如上所示:
<ul class="navbar-menu">
<li class="nav-item">
<a href="#" class="nav-link">首页</a>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle">
产品
<span class="dropdown-arrow">▼</span>
</a>
首页和产品两个导航子项并没有对齐,使用flex布局已经实现了其父元素容器对齐,但是里面的文字没有对齐。
使用如下属性:
/* 导航链接 */
.nav-link {
display: inline-block;
}
实现了对齐:
属性解析
先整体说结论
这三行 CSS 是一套针对行内/行内块元素的垂直居中方案,通常用于让文字/小元素在「同行的其他元素」中垂直居中(比如图标和文字对齐),而非整个容器的居中(和之前的 flex 居中是不同场景)。
逐行拆解含义
1. line-height: 1.5;(行高)
- 核心作用:控制文字所在行的「整体高度」,同时让文字在这一行的垂直方向上居中。
- 通俗解释:把文字想象成“站在一个看不见的盒子里”,
line-height就是这个盒子的高度,文字会默认在盒子垂直正中间。1.5是相对值(基于当前字体大小),比如字体大小是16px,行高就是16*1.5=24px;- 这行代码的注释“行高确保垂直居中”,指的是文字在自己的行内垂直居中。
2. display: inline-block;(行内块)
- 核心作用:让元素同时具备「行内元素」和「块级元素」的特性:
- 行内特性:可以和其他行内元素(比如文字、图标)排在同一行;
- 块级特性:可以设置
width、height、margin、padding(纯行内元素不行)。
- 为什么需要:注释里的“使用块级显示确保对齐”,是因为纯行内元素无法精准控制尺寸和对齐,
inline-block是实现“同行元素垂直对齐”的基础。
3. vertical-align: middle;(垂直对齐)
- 核心作用:控制「行内/行内块元素」在同行中的垂直对齐方式,
middle表示“和同行元素的垂直中线对齐”。 - 关键注意:
- 这个属性只对行内元素、行内块元素、表格单元格生效,对块级元素(
display: block)完全无效; - 它对齐的是「同行的其他元素」,不是“整个父容器的垂直居中”(这是新手最容易混淆的点)。
- 这个属性只对行内元素、行内块元素、表格单元格生效,对块级元素(
实战示例(一看就懂)
下面的代码能直观展示这三行 CSS 的作用(比如让图标和文字垂直居中):
<!DOCTYPE html>
<html>
<head>
<style>
/* 父容器 */
.box {
font-size: 16px;
border: 1px solid #ddd;
padding: 10px;
}
/* 图标元素(行内块 + 垂直对齐) */
.icon {
width: 24px;
height: 24px;
background-color: #42b983;
display: inline-block; /* 行内块,能设宽高+同行显示 */
vertical-align: middle; /* 和文字垂直中线对齐 */
}
/* 文字元素(行高确保自身居中) */
.text {
line-height: 1.5; /* 文字在自己的行内垂直居中 */
}
</style>
</head>
<body>
<div class="box">
<span class="icon"></span>
<span class="text">这是和图标垂直居中的文字</span>
</div>
</body>
</html>
效果说明:
- 绿色的小方块(模拟图标)和文字排在同一行;
- 二者的垂直中线对齐,视觉上完全居中,不会出现图标偏上/偏下的情况;
- 如果删掉
vertical-align: middle;,图标会默认和文字的基线对齐,看起来会偏下,体验很差。
新手避坑点
vertical-align: middle不是“让元素在父容器垂直居中”,而是“同行元素之间的对齐”;line-height只对文字生效,对图片/图标等非文字元素无效;- 必须先设置
display: inline-block,vertical-align才能生效(块级元素用不了)。
总结
line-height: 1.5:让文字自身在所在行内垂直居中,控制行的整体高度;display: inline-block:让元素可同行显示,且能自定义宽高,是对齐的基础;vertical-align: middle:让行内/行内块元素和同行的其他元素垂直中线对齐。
这三行是前端实现“图标+文字”“小元素同行居中”的经典组合,比 flex 更轻量,适合简单的行内对齐场景~