sIFR.useStyle检查Safari 4和Opera中的怪异

时间:2009-10-19 08:21:45

标签: safari sifr opera repaint

所以,我正在使用sIFR(版本3,修订版436)替换导航中的元素,一切都很美。但是,当我打开sIFR.useStyleCheck来检测CSS加载时,Safari 4中的一切都变得不稳定了。我觉得插入的虚拟div看起来好像是它的42px左边距,它抛出了sIFR文本这样它就不会处于正确的水平位置,或者在它应该的时候不会包裹等等。我的浏览器窗口中也有一个水平滚动条,这总是很有趣。但是,如果我调整浏览器窗口的大小,那么所有内容都会重新粉刷,并且再次正常。

我知道在Firefox中不会发生这种情况。它确实会影响Opera。还没有在Safari 3中测试过。上帝知道当我在IE中启动它会发生什么,但我猜它实际上会好的,因为Mark(Wubben)说sIFR.useStyleCheck主要是为了提高Safari和Opera的性能。

有什么建议吗?我找了一种强制重画的方法,但无法理解。如果我这样做,那将不是一个非常优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

对于任何关心的人,我发现问题是我的sIFR.css在我的typography.css之前加载了。重要的原因是因为当你使用sIFR.useStyleCheck时,sIFR会等待进行任何替换,直到它检测到它插入的虚拟div具有42px的左边距。 42px的余量当然是由sIFR.css设定的。一旦检测到42px左边距,那么sIFR就会愉快地替换你的文本,即使你的CSS的其余部分指示文本在第一个位置/样式的位置尚未加载。一旦进行了替换,那么你的typography.css就不会使用它们 - 除非你调整浏览器窗口的大小并重新调整sIFR。

所以我的第一个猜测是虚拟div以某种方式抛弃了东西而不是它。虚拟div已成功删除,不会更改任何内容。

有趣的是,不同的浏览器以不同的方式处理CSS。很明显,Firefox必须先处理所有CSS,然后再让sIFR设置虚拟div的样式。但是对于Opera和Safari来说,以正确的顺序加载CSS是至关重要的,因为sIFR会在风格发生时受到影响。因此,这修复了上面描述的Safari和Opera中的“古怪”,但我在Opera中仍然有一些神秘的造型问题......但这是另一个故事。