前几天,我正在研究浏览器(我使用chrome,但我猜它适用于所有)使用用户代理样式表格式化HTML元素.
使用时blockquote,我发现了这个:
blockquote {
-webkit-margin-before: 1em;
-webkit-margin-after: 1em;
-webkit-margin-start: 40px;
-webkit-margin-end: 40px;
}
Run Code Online (Sandbox Code Playgroud)
看起来很好.但为什么他们不能使用更像这样的东西?:
blockquote {
margin-left:/*whatever*/;
margin-top:/*whatever*/;
margin-right:/*whatever*/;
margin-bottom:/*whatever*/;
}
Run Code Online (Sandbox Code Playgroud)
这恰好发生在我身上,我觉得这很奇怪.
有些浏览器使用这样的CSS规则,因为它们的规范还没有被W3C最终确定,因此如果他们要保留前缀,他们就会冒最终W3C标准格式略有不同的风险,并在浏览器之间创建不兼容性或者在同一浏览器的版本之间,因为它们将格式更改为标准的处理方式.
对于具有多个参数的规则,这是一个特殊问题 - 可能出错的主要问题是标准最终以不同的顺序存在参数:
border-radius: 3px 3px 6px 6px;
box-shadow: 3px 3px 6px #fff;
Run Code Online (Sandbox Code Playgroud)
...等等...
添加前缀是他们的保证,如果最终的标准与他们的实现不同,那么什么都不会破坏.
关于margin-before代替的部分margin-left,似乎是因为-webkit-margin-before规则不是等同于margin-left,而是margin:before最近的一个旨在使事物在RTL和垂直书写模式下工作的提议.请参阅此页:http://lists.w3.org/Archives/Public/www-style/2010Sep/0625.html但它似乎相当模糊.