核心知识
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>