2012-03-01 99 views
8

有一天,我正在研究如何使用用户代理样式表浏览器(我使用chrome,但我猜它适用于所有格式)HTML元素。为什么浏览器的用户代理样式表使用-prefixed CSS属性?

当使用,我发现这一点:

blockquote { 
-webkit-margin-before: 1em; 
-webkit-margin-after: 1em; 
-webkit-margin-start: 40px; 
-webkit-margin-end: 40px; 
} 

看起来很好。但是,为什么不能他们使用更多的东西像这样?:

blockquote { 
margin-left:/*whatever*/; 
margin-top:/*whatever*/; 
margin-right:/*whatever*/; 
margin-bottom:/*whatever*/; 
} 

这只是发生在我身上,我认为这是很奇怪的。

+0

因为他们可以吗?我也一直在想这个,并且认为这与盒子模型怪异有关。好奇看看你会得到什么答案。 – 2012-03-01 16:30:08

+1

因为它们是**用户代理样式表**(正如你强调的那样)? – BoltClock 2012-03-01 16:47:12

回答

7

某些浏览器使用这样的CSS规则,因为它们的规范尚未由W3C最终确定,因此如果它们要放弃前缀,它们将面临最终W3C标准格式略有不同的风险,并且创建浏览器之间或相同浏览器版本之间的不兼容性,因为它们将格式更改为标准的做事方式。

这是与多个参数的规则特定问题 - 可以去错更主要的是,该标准最终有不同的顺序参数:

border-radius: 3px 3px 6px 6px; 
box-shadow: 3px 3px 6px #fff; 

...等...

添加前缀是他们的保证,如果最终标准与实现不同,则不会中断。

至于有关margin-before代替margin-left的一部分,这似乎是因为-webkit-margin-before规则不是margin-left等效,但margin:before,这是一个旨在使事情最近提议RTL和垂直书写模式下工作。看到这个页面:http://lists.w3.org/Archives/Public/www-style/2010Sep/0625.html虽然它似乎很隐晦。

+1

这并不能解释为什么他们使用完全不同的CSS属性,而不是'平常'的。它不是'-webkit-margin-left',它是'-webkit-margin-before'。 – 2012-03-01 16:34:33

+0

编辑,虽然我不认为这是问题的关键。问题的标题肯定会提到“-prefixed”CSS属性。 – 2012-03-01 16:44:26

+0

现在,这些属性只是WebKit(* urgh *)的专有属性,不应被视为官方或由工作组认可,直到它们被添加到规范中。供应商前缀不仅用于官方属性的实验版本;他们也被供应商用来创建他们自己的属性世界,让他们自己去玩或使用各种各样的原因,其中一些最终可能会或可能不会被提升为规范的补充。作为另一个非WebKit示例,Mozilla使用了许多前缀选择器,属性和值来解决某些怪癖。 – BoltClock 2012-03-01 16:48:29

1

帮助开发人员查看哪些元素是浏览器的默认值。

相关问题