display 属性可以设置元素的内部和外部显示类型 display types。元素的外部显示类型 outer display types 将决定该元素在流式布局中的表现(块级或内联元素);元素的内部显示类型 inner display types 可以控制其子元素的布局(例如:flow layoutgridflex)。
CSS 规范(特指 CSS Level 1/2/3 规范)中查阅 display 属性的所有取值时需要注意:个别取值的详细信息记录在独立的规范中。 例如,display: flex 的详细信息在 CSS Flexible Box Model 规范中记录。可以在本文档末尾的表格中查看所有有关的规范。

# 语法

display 属性使用关键字取值来指定,关键字取值被分为六类:

.container {
  display: [ <display-outside> | <display-inside> ] | <display-listitem> |
    <display-internal> | <display-box> | <display-legacy>;
}

# Outside

<display-outside>
这些关键字指定了元素的外部显示类型,实际上就是其在流式布局中的角色(即在流式布局中的表现)。
'page("/zh-CN/docs/Web/CSS/display-outside", "Syntax")'
<display-outside> 的可用值:
block
这个值会生成一个块级元素盒子,同时在该元素之前和之后打断(换行)。简单来说就是,这个值会将该元素变成块级元素
inline
这个值会生成一个行内元素盒子,该元素之前和之后不会打断(换行)。如果空间充足,该元素后的元素将会在同一行显示。简单来说就是,这个值会将该元素变成行内元素
**run-in **
这个值生成一个 run-in 盒子。如果其后的兄弟元素是块级盒子,那么这个 run-in 盒子就会以兄弟元素的第一个行内元素盒子的形式存在;如果其后的兄弟元素是行内元素,那么这个 run-in 盒子会变成块级元素。
run-in 元素的存在形式取决于相邻的元素,如果它的内部存在 block box,那么它会变成块级元素盒子。

# Inside

<display-inside>(en-US)
这些关键字指定了元素的内部显示类型,它们定义了该元素内部内容的布局方式(假定该元素为非替换元素 non-replaced element)。
'page("/zh-CN/docs/Web/CSS/display-inside", "Syntax")'
<display-inside> 的可用值:
**flow **
该元素使用流布局(块和内联布局)来布置其内容。
如果它的外部显示类型是 inline 或 run-in,并且它正在参与块或内联格式上下文,那么它会生成一个内联框。否则它会生成一个块容器框。
根据其他属性(例如 positionfloat、 或 overflow)的值以及它本身是否参与块或内联格式化上下文,它要么为其内容建立新的块格式化上下文 (BFC),要么将其内容集成到其父格式化中语境。
flow-root
该元素生成一个块元素框,它建立一个新的块格式上下文,定义格式根所在的位置。
table
这些元素的行为类似于 HTML<table> 元素。它定义了一个块级框。
flex
该元素的行为类似于块元素,并根据 flexbox 模型布置其内容。
grid
该元素的行为类似于块元素,并根据网格模型布置其内容。
**ruby **
该元素的行为类似于内联元素,并根据 ruby 格式模型布置其内容。它的行为类似于相应的 HTML<ruby> 元素。

# List Item

<display-listitem>(en-US)
将这个元素的外部显示类型变为 block 盒,并将内部显示类型变为多个 list-item inline 盒。
'page("/zh-CN/docs/Web/CSS/display-listitem", "Syntax")'

# Internal

<display-internal>
有些布局模型(如 table 和 ruby)有着复杂的内部结构,因此它们的子元素可能扮演着不同的角色。这一类关键字就是用来定义这些 “内部” 显示类型,并且只有在这些特定的布局模型中才有意义。
Valid <display-internal> values:
table-row-group
These elements behave like <tbody> HTML elements.
table-header-group
These elements behave like <thead> HTML elements.
table-footer-group
These elements behave like <tfoot> HTML elements.
table-row
These elements behave like <tr> HTML elements.
table-cell
These elements behave like <td> HTML elements.
table-column-group
These elements behave like <colgroup> HTML elements.
table-column
These elements behave like <col> HTML elements.
table-caption
These elements behave like <caption> HTML elements.
**ruby-base **
These elements behave like <rb> HTML elements.
**ruby-text **
These elements behave like <rt> HTML elements.
**ruby-base-container **
These elements behave like <rbc> HTML elements generated as anonymous boxes.
**ruby-text-container **
These elements behave like <rtc> HTML elements.

# Box

<display-box>
这些值决定元素是否使用盒模型。
Valid <display-box> values:
contents
These elements don't produce a specific box by themselves. They are replaced by their pseudo-box and their child boxes. Please note that the CSS Display Level 3 spec defines how the contents value should affect "unusual elements" — elements that aren’t rendered purely by CSS box concepts such as replaced elements. See Appendix B: Effects of display: contents on Unusual Elements for more details.
Due to a bug in browsers this will currently remove the element from the accessibility tree — screen readers will not look at what's inside. See the Accessibility concerns section below for more details.
none
Turns off the display of an element so that it has no effect on layout (the document is rendered as though the element did not exist). All descendant elements also have their display turned off. To have an element take up the space that it would normally take, but without actually rendering anything, use the visibility property instead.

# Legacy

<display-legacy>
CSS 2 对于 display 属性使用单关键字语法,对于相同布局模式的 block 级和 inline 级变体需要使用单独的关键字。
'page("/en-US /docs/Web/CSS/display-legacy", "Syntax")'

# 是否该继续使用 Legacy 取值?

CSS Level 3 规范详细说明了 display 属性的两类取值 —— 显式地指定了外部和内部显示属性的规范 —— 但是还没有被浏览器广泛支持。
<display-legacy> 方法允许使用单个关键字达到相同效果,开发者应该在双关键字取值被广泛支持之前采用这个方法。举例来说,你可以这样指定 inline flex 容器:
.container { display: inline-flex; }
Copy to Clipboard
也可以用两个关键字来指定。
Copy to Clipboard
.container { display: inline flex; }
有关规范变更的更多信息,查阅文章 Adapting to the new two-value syntax of display (en-US)

# 全局设置

/_ Global values _/ display: inherit; display: initial; display: unset;