2016-03-25 23 views
5

的擦为flexbox订购供应商前缀的正确方法是什么?

  • CSS Tricks说,display供应商前缀为Flexbox的顺序是重要的,示出了一个排序(-webkit-box-moz-box-ms-flexbox-webkit-flexflex
  • MDN示出的不同的顺序CSS技巧和掉期-moz-box输出-moz-flex-webkit-box,-webkit-flex,-moz-flex,-ms-flexbox,flex
  • Bourbon显示了又一个不同的顺序和box,其带来的其他两页甚至没有提到(-webkit-box-moz-boxbox-webkit-flex-moz-flex-ms-flexboxflex

的问题

  • 订单真的很重要吗?
  • 这样做的正确方法是什么?

回答

5

只要W3C版本(官方属性)到最后,就没有区别。

CSS渲染引擎将始终选择最后应用的属性。因此,例如,如果实际支持flex,那么您不希望Chrome跳过flex并选择-webkit-flex

您看到CSS-Tricks,MDN和Bourbon中供应商前缀排序的变化,因为顺序无关紧要。请注意他们都有什么共同点:flex是最后一个。

这里有一些更多的细节:

+0

如果官方版本的最后版本很重要,我还会认为以供应商为前缀的版本按照时间顺序排列是非常重要的。例如,只要'-webkit-box'在'-webkit-flex'之前,并且(独立)'-moz-box'在'-moz-flex'之前。那是对的吗? –

+0

正如您的问题中发布的示例所示,供应商前缀的顺序并不重要。让自己变得容易,使用这个工具:[** autoprefixer **](https://autoprefixer.github.io/)。 –

+0

我知道这个工具,但我认为你误解了我。如果你的浏览器理解了'-prefix-box'和'-prefix-flexbox',而不是'-prefix-flex'或'flex',如果你有'--prefix-flex',前缀-Flexbox'在'-prefix-box'之前,你会得到'-prefix-box'行为(或者我假设)。因此,订单(独立于其他供应商)非常重要。 –

3

大多数情况下,供应商的前缀顺序并不是那么重要,但要确保你使用的是标准化版本通过在最后添加没有供应商前缀(只是flex)的标准版本。如果属性相同,CSS总是优先处理最后一个。

无论如何,无前缀的flex现在支持最常见的浏览器:http://caniuse.com/#feat=flexbox。 96%的浏览器可以使用flexbox,82%的浏览器在没有前缀的情况下支持flex。

+0

你是否有任何理由让没有供应商资格的(在这种情况下是'flex')作为最后一个属性?我已经看到它一遍又一遍地传递下去,但从来没有见过任何不是肤浅的推理。 –

+0

好问题。我并不是幕后的专家,但将财产置于最后,这一点似乎更加“自然” - 每个人都将最终使用这个财产。但这是我的知识,可能还有其他一些推荐理由。也许供应商的前缀在以后不会得到修复 - 那么如果您仍然使用早期版本,您将无法获得全局修复(?)。通常全球应该是稳定的,但这只是一个想法。 – NiklasMH

2

我正在添加一个新的正确答案。因为它确实是的事,尤其是对于flexbox。你指出的最后两个例子并不是最新到今天所需的最终语法,并且需要被丢弃。

就像尼克拉斯说的那样,你总是希望官方的W3C标准前置属性最后。理由是CSS会一个接一个地解析所有的规则。相同(或类似)属性的最后一条规则总是优先于先前规则。由于三种不同类型的规则和规格,flexbox的情况是特殊的。

首先,忽略给定的MDN和波旁规则集,它们不是最新的。

来自MDN示例的规则display: -moz-flex;是可悲的错误。 Firefox确实(并且不)正式支持它。 Firefox官方仅支持-moz-boxflex。我将编辑修改-moz-box替代文章。

box参考波旁不再准确。你不需要它。一些演示可能包含它的原因是,官方的“flexbox”标准财产在当时(2009年)成为boxflex在这一点上不存在。语法是flex在2013年晚些时候作为最终推荐。

而在IE10之间实现了-ms-flexbox中间2011-2012 draft spec

所以对于flex规则集来说,首先声明较老的属性是非常重要的,在正确给定的CSS技巧顺序中。你可以找到规则集here, with additional explanations on full browser support

这两个规则可以交换任何一种方式没有太大的影响是-webkit-box-moz-box

请注意,Firefox和Edge必须别名较旧的属性或webkit前缀规则,以尝试解决各种bugs occuring due to inaccurate order和/或缺少Web上的属性。

因此从这个意义上说,使用完整的current flexbox rule set非常重要。

相关问题