第 9 课 8 / 25 | 编码:L09-12
核心知识

display:行内、块级与行内块

相同的两个 span,只改变 display。先看是否另起一行,再看设置的宽高是否生效。

inline · 行内

唱段 角色
.tag {
  display: inline;
}

像文字片段一样在一行中排下去,空间不够时会换行。

这里的 span 不按声明的 width、height 确定尺寸,边框紧随文字。

block · 块级

唱段 角色
.tag {
  display: block;
}

在普通文档流中各起一行;可以设置宽高。

即使两张窄盒子看起来能放进同一行,后一张仍另起一行。

inline-block · 行内块

唱段 角色
.tag {
  display: inline-block;
}

把整个盒子放进行内排版:空间足够可以同行,宽高也生效。

一行放不下时,后面的盒子整体换到下一行。

三组都使用相同的内容与尺寸

<span class="tag">唱段</span>
<span class="tag">角色</span>

上方每组分别使用对应的 display。这里只比较普通、非替换的 span 文本元素,不套用于 img 等替换元素。

.tag {
  box-sizing: content-box;
  width: 140px;
  height: 50px;
  border: 2px solid teal;
}

在 block 和 inline-block 两组中,无内边距的边框盒为 144px × 54px;inline 组不能这样计算。

补充:block 一定占满整行的宽度吗?

不一定。在普通文档流中,块级盒子的 width:auto 通常会使用父容器的可用宽度;本例明确写了 width:140px,所以盒子可以较窄。盒子有多宽与后面的块级盒子是否另起一行,是两个不同问题。

改变 display 只改变排版,不会把 span 的 HTML 语义变成标题、按钮或段落。

修改同一处 display,对照三个结果

<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>黄梅戏活动栏目</title>
  <style>
    .tag {
      display: inline-block;
      box-sizing: content-box;
      width: 140px;
      height: 50px;
      border: 2px solid teal;
    }
  </style>
</head>
<body>
  <span class="tag">唱段</span>
  <span class="tag">角色</span>
</body>
</html>