为什么浏览器的用户代理样式表使用-prefixed CSS属性?

时间:2012-03-01 16:25:26

标签: css browser

前几天,我正在研究浏览器(我使用chrome,但我猜它适用于所有)使用用户代理样式表格式化HTML元素。

使用blockquote时,我发现了这个:

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*/;
}

这件事发生在我身上,我觉得这很奇怪。

2 个答案:

答案 0 :(得分: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,而是{{1}这是一个旨在使事物在RTL和垂直书写模式下工作的最新提案。看到这个页面:http://lists.w3.org/Archives/Public/www-style/2010Sep/0625.html但它似乎相当模糊。

答案 1 :(得分:1)

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