双值 display 语法(有时还有三值)

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

您知道单值语法:.thing { display: block; }。“block” 是一个单值。 display 有很多单值。例如,inline-flex,它类似于 flex,因为它成为一个弹性容器,但表现得像一个内联级元素而不是块级元素。这有点直观,但一个可以更广泛地应用相同概念并同样直观的双值系统会更好。

要深入了解,您应该阅读 Rachel Andrew 的博文 CSS Display 属性的双值语法规范 也是一篇不错的读物,Miriam 的这段视频也是如此

在我的脑海中,它是这样映射的

选择 blockinline,然后选择 flowflow-rootflexgridtable。如果它是 list-item,则为第三个值。

您基本上从每一列中选择一个来描述您想要的布局。因此,我们一直使用的现有值大致映射如下

考虑上面这两列的另一种方式是 **“外部”和“内部”** display 值。外部,就像它如何与周围的其他元素一起流动。内部,就像布局如何在这些元素内部发生。

您真的可以使用它吗?

其实不能。Firefox 70 是第一个支持它的浏览器,而且据我所知,Chrome 或 Safari 方面没有其他支持信号。它是 CSS 的一次重大改进,但在日常使用中,还需要几年时间。像布局这样重要的东西,您不希望仅仅为了这个稍微有点描述性的好处而让它失败。它可能也不值得使用 @supports 等进行渐进增强。

花絮

  • 查看 自动转换 部分。仅仅因为您将元素设置为特定的 display,并不意味着它可能不会被某些情况覆盖。我假设它主要是在谈论元素被强制成为弹性项目或网格项目。
  • 存在隐式简写。例如,如果您使用 inline list-item,则实际上是 inline flow list-item,而 list-itemblock flow list-item。看起来都相当直观。
  • 您仍然可以使用诸如 table-rowtable-header-group 之类的内容。这些都是单值处理,就像 contentsnone 一样。
  • 第一列从技术上讲也包括 run-in,但据我所知,没有浏览器曾经支持过 run-in display。
  • 第二列从技术上讲包括 ruby,但我从未理解过它到底是什么。

我们如何谈论 CSS

我喜欢 Rachel 如何将此更改与更合理的思维和教学模型联系起来

… 它们以框是块级还是内联级以及子元素的行为来正确解释框与其他框的交互。我认为,为了理解什么是 display 以及它的作用,它们提供了非常有用的澄清。因此,我开始使用这两个值来教授 display,以帮助解释更改格式上下文时发生了什么。

看到新功能得到实施总是令人兴奋的,我希望其他浏览器也能尽快实施这些双值版本。然后,在不远的将来,我们将能够像现在解释它一样编写 CSS,清楚地展示框与其子元素行为之间的关系。