Meebo栏是如何跨浏览器运行得如此之好?
How does the Meebo bar work so well cross-browser?
Meebo聊天栏是一个小的、不显眼的栏(不包括一些站点放置在其中的可选弹出窗口——尽管基本栏相当不显眼),它贴在视窗的底部,只需要几行JavaScript就可以添加到页面中。具体来说,我感兴趣的是他们如何设法让"视口底部"定位工作得如此之好,一致,并且没有闪烁或其他跨浏览器的工件。
注意Meebo的解决方案也不需要一个特定的DOCTYPE在页面上,即使在IE中,所以无论它是做什么,它运行良好的IE怪癖模式。这是关键——我要问的是,除了添加标签或插入标签的代码外,如何使视图底部工具栏在没有对托管页面进行控制的情况下工作。CSS固定单独不是一个可接受的解决方案,因为它不能正常工作在IE怪癖模式
此外,虽然我提到Meebo栏作为一个例子,我实际上并不是在寻找一个社交工具栏,所以我不能只使用Meebo。
必需的浏览器支持-注意Meebo支持所有这些:IE6,IE7+,Firefox, Safari, Chrome。完全不显示(但完全不破坏页面)对于IE6来说是可以接受的,尽管首选的当然是它(像Meebo一样)在IE6中工作良好。其他浏览器如Opera也不错,但我的必需的浏览器列表在上面。
简单的答案是,对于quirks模式和IE6,我们利用CSS表达式的功能来动态计算元素的位置。正如nwellcome指出的那样,我们为每个浏览器提供针对性的CSS文件,因此我们能够在不利用*/_漏洞或其他奇怪的浏览器针对性攻击的情况下实现此行为。
此外,我们利用了IE渲染引擎的一个有趣行为,如果在HTML或Body元素上设置了背景属性,IE将在重绘之前计算固定元素的位置。这大大减少了你通常看到的基于javascript的方法在scroll/resize上重新定位元素时的闪烁行为。
这个站点提供了在所有主要浏览器中实现position:fixed的解决方案的一个很好的概述:http://www.howtocreate.co.uk/fixedPosition.html
它还引用了一个相当巧妙的解决闪烁问题的方法:http://www.howtocreate.co.uk/emails/LinusSylven.html
希望有帮助!
看着那个页面,我看到他们的默认解决方案是使用位置固定,但然后他们加载了混乱的CSS和javascript每个特定的浏览器通过构建URL为这些资源的相关信息(浏览器,版本等)和写/附加它们作为样式和脚本元素在头元素。
当我把IE7放在quirkmode时,我看到他们不断地用javascript重新定位div,在我的机器上,至少从重画中产生的闪烁是可怕的,但这可能是最好的方法,并且对页面的其余部分影响最小。另一个固定怪模位置的解决方法包括将元素设置为相对于视口的绝对位置,这会扰乱页面上其他所有内容的绝对位置。
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 为什么jQueryUILayout在AdobeAIR中运行如此缓慢
- 为什么使用 Webpack 和 Gulp 构建的输出包如此之大 (>1.9Mb)
- 保持 JavaScript 在浏览器控制台中运行,即使在新的页面加载之后也是如此
- Node.js 应用无法在端口 80 上运行,即使没有其他进程阻止该端口也是如此
- base64 javascript没有在iis上运行,在某些浏览器中也是如此,原因是什么
- 为什么在这个例子中图像高度变得如此之大
- Meebo栏是如何跨浏览器运行得如此之好?
- 为什么选择排序在Javascript中如此之快?
- 动画帧的动画速度如此之慢的原因是什么
- 每次运行datastore.runQuery时出错:必须设置Query.Query和Query.gql_Query字段之
- 为什么与jar文件相比,js框架的大小如此之小
- 是什么让Twitter页面之间的导航如此之快
- JavaScript(管状视频背景)并不总是加载和运行.有时确实如此