属性 没有供应商前缀,后跟 CSS3 中的供应商前缀属性
a property without vendor prefix followed by vendor prefixed properties in CSS3
根据 "Why do browsers create vendor prefixes for CSS properties?" 的 answer 之一,需要供应商前缀的原因之一是即使 属性 的最终规范不同也能避免分页来自供应商的实施(解释)。
我读了一本书,上面说在有供应商前缀的 属性 声明之后放置 属性 没有供应商前缀通常是一个好习惯,如下所示:
p {
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
-o-hyphens: auto;
hyphens: auto;
}
假设连字符的最终规范与供应商的解释不同。如果有人开发了一个依赖于某些供应商前缀实现的网页,那么页面的设计不会因为我假设的 "hyphens" 规范与供应商的不同而中断吗?如果解释与最终规范相同,我认为上面的代码就可以了。为什么上面的代码通常是一个好习惯?
上面的代码是很好的做法,因为 CSS's overidding feature.
通过这种方式,您可以让浏览器检查它是否具有特定的供应商前缀(现代浏览器通常不需要它,但在支持旧版本时它很好)并且最后您有一个通用的(catch -全部) 属性;
如果浏览器无法识别任何 属性 类型,它将忽略它...
您提供的代码片段被认为是一种很好的做法,因为它(希望)向前和向后兼容...
基本上,对于非标准实现,每个浏览器实现 属性 的方式可能与前缀略有不同。如果一切顺利,最终不同的浏览器将标准化 属性 并(希望)以相同的方式呈现它。
带前缀的版本暂时可以使用,并且(希望)在浏览器标准化 属性 并删除前缀时,无前缀版本将可以使用。
我知道上面看到的 "hopefully" 并不是那么令人鼓舞,如果您希望 CSS 是防弹的,请不要使用新属性,直到它们标准化或设计您的优雅地降级的东西。
一些 css3 属性,例如 border-radius,在某种程度上是标准化的,并且可以在没有前缀的情况下正确呈现,但并不是每个互联网用户都会使他们的浏览器保持最新,所以继续下去可能是个好主意使用前缀一段时间。
另一方面,Firefox 会在没有前缀的情况下呈现某些属性,而 Chrome 则不会,例如 animation and @keyframes。在这种情况下,使用前缀版本后跟非前缀版本非常有意义。
.myClass {
position: relative;
-webkit-animation: myAnimation 3s; /* Chrome will use this */
animation: myAnimation 3s; /*Firefox will ignore the -webkit- property and use this */
}
@-webkit-keyframes myAnimation { /* Chrome will use this */
from {
background: red;
top: 10px;
}
to {
background: blue;
top: 100px;
}
}
@keyframes myAnimation { /*Firefox will ignore the -webkit- property and use this */
from {
background: red;
top: 10px;
}
to {
background: blue;
top: 100px;
}
}
<div class="myClass">Hello World</div>
在 Firefox 和 Chrome 中尝试上面的代码片段,看看我在说什么。
根据 "Why do browsers create vendor prefixes for CSS properties?" 的 answer 之一,需要供应商前缀的原因之一是即使 属性 的最终规范不同也能避免分页来自供应商的实施(解释)。
我读了一本书,上面说在有供应商前缀的 属性 声明之后放置 属性 没有供应商前缀通常是一个好习惯,如下所示:
p {
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
-o-hyphens: auto;
hyphens: auto;
}
假设连字符的最终规范与供应商的解释不同。如果有人开发了一个依赖于某些供应商前缀实现的网页,那么页面的设计不会因为我假设的 "hyphens" 规范与供应商的不同而中断吗?如果解释与最终规范相同,我认为上面的代码就可以了。为什么上面的代码通常是一个好习惯?
上面的代码是很好的做法,因为 CSS's overidding feature.
通过这种方式,您可以让浏览器检查它是否具有特定的供应商前缀(现代浏览器通常不需要它,但在支持旧版本时它很好)并且最后您有一个通用的(catch -全部) 属性;
如果浏览器无法识别任何 属性 类型,它将忽略它...
您提供的代码片段被认为是一种很好的做法,因为它(希望)向前和向后兼容...
基本上,对于非标准实现,每个浏览器实现 属性 的方式可能与前缀略有不同。如果一切顺利,最终不同的浏览器将标准化 属性 并(希望)以相同的方式呈现它。
带前缀的版本暂时可以使用,并且(希望)在浏览器标准化 属性 并删除前缀时,无前缀版本将可以使用。
我知道上面看到的 "hopefully" 并不是那么令人鼓舞,如果您希望 CSS 是防弹的,请不要使用新属性,直到它们标准化或设计您的优雅地降级的东西。
一些 css3 属性,例如 border-radius,在某种程度上是标准化的,并且可以在没有前缀的情况下正确呈现,但并不是每个互联网用户都会使他们的浏览器保持最新,所以继续下去可能是个好主意使用前缀一段时间。
另一方面,Firefox 会在没有前缀的情况下呈现某些属性,而 Chrome 则不会,例如 animation and @keyframes。在这种情况下,使用前缀版本后跟非前缀版本非常有意义。
.myClass {
position: relative;
-webkit-animation: myAnimation 3s; /* Chrome will use this */
animation: myAnimation 3s; /*Firefox will ignore the -webkit- property and use this */
}
@-webkit-keyframes myAnimation { /* Chrome will use this */
from {
background: red;
top: 10px;
}
to {
background: blue;
top: 100px;
}
}
@keyframes myAnimation { /*Firefox will ignore the -webkit- property and use this */
from {
background: red;
top: 10px;
}
to {
background: blue;
top: 100px;
}
}
<div class="myClass">Hello World</div>
在 Firefox 和 Chrome 中尝试上面的代码片段,看看我在说什么。