为什么没有 <flex> 或 <grid> 元素?

Why aren't there < flex > or < grid > elements?

其他display值有一个或多个对应的HTML元素,例如:

display: griddisplay: flex 必须通过样式分配。如果 <flex><grid> 元素可用,我可以看到通过 DOM 阅读起来会更容易。

既然可以制作自定义元素,是否没有将新元素类型添加到规范中?

您问题的答案与样式与呈现数据的分离有关。

用于显示数据的 HTML 标签应该根据您显示的数据类型来选择。例如,您可以在制作列表时使用 <li>,或者在您希望文本突出显示时使用 <strong>。 CSS 为您提供了很大的灵活性来修改数据的显示方式,允许您更改数据的显示方式,例如 <strong><em> 标签中的文本。许多标签的样式都可以更改,以便它们的行为与其他标签相同。例如,您可以使 <span> 标签的行为类似于 <div> 标签,反之亦然。但是,您不应该这样做。换句话说,您 select 的标签应该基于显示的数据类型,例如 <li> 用于列表项或 <p> 用于段落。从技术上讲,您永远无法将数据与其显示方式完全分开,但您应该尽可能地尝试这样做。

<flex><grid> 对于您要显示的数据类型没有任何意义。因此,它们是可以使用 CSS(而不是标签)编辑的样式。

I could see it being easier to read through the DOM if <flex> and <grid> elements were available.

您建议结合内容和演示文稿,这违背了 CSS 旨在解决的 separation of concerns 原则。

HTML用于内容的组织。 CSS用于内容的呈现。您的 <flex><grid> 元素将结合这两个问题,这是 1990 年代的情况,在 CSS 出现之前,HTML 两者兼而有之。

此外,如果我希望我的 <article> 成为网格容器,或者我的 <aside> 成为弹性容器怎么办?

为什么不也有 <block><inline>

事情开始变得混乱。


另外,你提问的前提也不正确

Other display values have one or more corresponding HTML elements ... but display: grid and display: flex must be assigned through styling.

实际上,所有HTML个元素的display值被赋值。唯一的区别是样式的来源。

在原始形式中,HTML 元素没有样式。它们只有语义。

直到浏览器指定 default styles 元素才具有表示意义。

因此,您可以这样说的唯一原因...

Other display values have one or more corresponding HTML elements, such as:

  • block - div, p
  • inline - span, strong, etc.
  • list-item - li
  • table - table, table-row - tr, etc.

... 是因为浏览器用这样的方式定义了这些元素:

Appendix D. Default style sheet for HTML 4

如您所见,已分配 display 个值。

因此浏览器为 HTML 元素设置了基本级别的格式设置。这些样式的更改和添加留给作者。

这里有更多详细信息: