Skip to content

display 属性详解

本页关键词:block、inline、inline-block、内容撑开、flex、grid


一、总览表

display 值常叫法是否独占一行是否可设宽高是否由内容撑开
block块级元素否(默认占满父元素)
inline行内元素
inline-block行内块是(默认)
none不显示
flex弹性盒
inline-flex行内弹性盒
grid网格

二、三大基础形态

块级元素 display: block

典型元素

html
div p h1 ul li section

特征

  • 独占一行
  • 默认宽度:100% 父元素
  • 可以设置 width / height
  • 不是由内容撑开的
css
div {
  display: block;
}

即使里面只有一个字,它也会横向占满整行。


行内元素 display: inline

典型元素

html
span a em strong

特征

  • 不独占一行
  • 宽高设置无效
  • 宽度完全由内容撑开
  • margin-top / bottom 无效
css
span {
  display: inline;
}

行内元素是"文字级"的存在。


行内块 display: inline-block

特征:看起来像行内元素(不换行),行为上像块级元素(可设宽高)。

  • 不独占一行(可以并排)
  • 可以设置 width / height
  • 默认大小:由内容撑开
  • 可以设置 margin / padding
css
button {
  display: inline-block;
}

buttoninputimg 天生就是行内块。

面试要点:inline-block 是最容易混淆的一种,本质是「行内 + 可设宽高」。


三、由内容撑开 vs 不由内容撑开

由内容撑开的

  • inline
  • inline-block
  • inline-flex
html
<span>abc</span>
<span>abcdef</span>

宽度随文字变化。


不由内容撑开的

  • block
  • flex
  • grid
html
<div>abc</div>

宽度仍然是父元素 100%。


四、不写 display 时的默认值

每个 HTML 标签都有默认 display

标签默认 display
divblock
pblock
spaninline
ainline
imginline-block
buttoninline-block
inputinline-block
lilist-item(≈ block)

不写 display ≠ 没有 display,而是使用浏览器默认样式。


img 不会被挤成一行文字的原因

css
img {
  display: inline-block; /* 浏览器默认 */
}

既能并排,又能有宽高。


五、易踩坑对比

行内元素不能设置宽高

css
span {
  width: 100px; /* 无效 */
  height: 100px;
}

改为 display: inline-block 后即可生效。


行内元素上下 margin 不生效

css
a {
  margin-top: 20px; /* 无效 */
}

行内块 / 块级均可生效。

面试要点:行内元素 width/height、margin-top/bottom 无效,是高频考点。


六、工程中怎么选

场景推荐 display
普通布局block / flex
文字修饰inline
按钮、标签inline-block
水平排列 + 可控尺寸inline-block
一维布局flex
二维布局grid

七、一句话总结

  • block:独占一行,占满父元素
  • inline:内容撑开,不能设宽高
  • inline-block:内容撑开 + 可设宽高
  • 不写 display:使用标签的默认 display