日期:2014-05-17  浏览次数:20871 次

【分享】非IE浏览器对 MARQUEE 的支持
MARQUEE 元素,就是著名的跑马灯,呃,,也可以说它实现了著名的跑马灯效果。省去我们很多的麻烦,它不属于W3C规范中的元素,最初由IE2.0引入,是微软发明的IE浏览器特有的元素,它可以用来创建一个文字滚动区域,并提供了一些特有的属性、方法及事件。
大概因为它看起来确实不错,所以目前所有浏览器都开始支持 MARQUEE 元素。但是具体的实现方式,估计都有不同。

Firefox中marquee对Date对象有依赖
<style>
  div {
  width: 200px;
  background: #DDD;
  }
</style>
<script>
  Date = null;
</script>
<div>
  <marquee behavior="alternate">TEXT</marquee>
</div>在上面的代码中,我将 Date对象置成了空。
打开浏览器,运行页面,”TEXT” 文字在除了Firefox 之外的浏览器之外都跑来跑去的,在 Firefox 中,压根没有看到 ”TEXT” 的影子。将Date=null;去掉,恢复正常。
看来,在 Firefox 里,MARQUEE 的实现和 Date 对象是有关系的。可能 MARQUEE 在Firefox里不是内置的HTML元素,是别的元素加JS代码模拟的也说不行。

Webkit浏览器中 MARQUEE 元素和它的 overflow 值
HTML code
<style>
    div {
       width: 200px;
       background: #DDD;
    }
    marquee {
       overflow:hidden;
    }
</style>
<div id="d1">
    <marquee behavior="alternate">TEXT</marquee>
</div>
这段代码,在其他浏览器中都很正常,”TEXT” 还是跑来跑去,唯有 Safari 和 Chrome,”TEXT” 静止不动。
去掉 marquee{overflow:hidden}; 的设置后,一切正常……

可以打开 Webkit 浏览器,使用它的开发者工具,查看一下 MARQUEE 元素的样式,你会发现,它的 overflow 值是: “-webkit-marquee;”,大概,这就是Webkit内核的浏览器实现 marquee 的秘密吧。
HTML code
<style>
    div {
       width: 200px;
       background: #DDD;
    }
    #d2 {
       overflow: -webkit-marquee;
    }
</style>
<div id="d1">
    <div id="d2" behavior="alternate">TEXT</div>
</div>
上面代码中并没有 MARQUEE 元素,但是在Webkit 内核的浏览器中 “TEXT” 还是会跑来跑去的。看来,Webkit 中 MARQUEE 的秘密果然在 “overflow: -webkit-marquee;”。

这个元素虽然标准中尚未支持,用起来还是蛮方便的,但是,用的时候一定注意,在Firefox中不要随便动 Date 对象,在Webkit 浏览器中,不要随便改 overflow 特性。


更多兼容性问题:【分享】浏览器兼容性问题目录

------解决方案--------------------
很不错的内容,收藏
------解决方案--------------------
恩支持
------解决方案--------------------
路过,看看
------解决方案--------------------
探讨
Firefox中marquee对Date对象有依赖

------解决方案--------------------
marquee 这个属性增加个无缝滚动属性就强大了
------解决方案--------------------
探讨

引用:

marquee 这个属性增加个无缝滚动属性就强大了
不大可能- -!

------解决方案--------------------
HTML code
<style>
    div { width:200px; background:#DDD; }
</style>
<div id="d1"><marquee id="m1" behavior="alternate">111</marquee></div>
<button id="b">Click</button>
<div id="d2">
<script>
    var a = Date.now;
    Date.now = null;
    document.getElementById("b").onclick = function () {
        Date.now = a;
        document.getElementById("d2").innerHTML = '<marquee id="m2">222</marquee>';
    }
</script>
</div>

------解决方案--------------------
http://mxr.mozilla.org/firefox/source/layout/style/xbl-marquee/xbl-marquee.xml