在制作网站导航时,我们常常需要告诉用户当前正处于哪一个栏目。除了改变文字颜色或背景,在导航项下方显示一个向下的小三角是非常直观的做法。借助CSS的::after伪元素,我们可以不添加任何额外HTML标签,仅用样式就在当前项上画出三角指示器。

一、利用border绘制三角形的原理
CSS里最经典的画三角方式,是把一个元素的宽度和高度都设为0,然后只保留某一边的边框有颜色,其余三边设为透明。比如一个向下指的三角,就是让上边框有颜色、左右和下边框透明。因为边框在相交处是斜线过渡,四个边框各占一个梯形,当宽高为0时这些梯形就收缩成了三角形。
理解了这个原理,我们就可以通过::after伪元素为导航项动态插入这样一块“零尺寸带边框”的区域。伪元素本身不占正常文档流位置,配合绝对定位就能悬浮在文字下方。相比切图方案,它缩放不失真,颜色随时可改,也更容易做动画。
/* 向下三角的基础写法 */
.triangle {
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #ff6600;
}
二、在导航当前项上用::after插入三角
假设我们有一组横向导航,结构是一个ul.nav里面多个li,当前项带有active类。我们给li设置position: relative,然后对li.active::after使用绝对定位,把它放到li的底部中间。左侧偏移用left: 50%再加transform: translateX(-50%),就能稳健居中,不用算具体像素。
下面的例子展示了完整样式。注意伪元素必须写content: ''才会生成,三角形本身的宽高要为0,且只用上边框着色。为了让三角紧贴导航下边缘,可以把bottom设为负值,或者根据父级下边框粗细做微调。
ul.nav {
list-style: none;
display: flex;
padding: 0;
margin: 0;
background: #f5f5f5;
}
ul.nav > li {
position: relative;
padding: 12px 20px;
cursor: pointer;
}
ul.nav > li.active {
color: #ff6600;
font-weight: bold;
}
ul.nav > li.active::after {
content: '';
position: absolute;
left: 50%;
bottom: -6px;
transform: translateX(-50%);
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #ff6600;
}
对应的HTML部分非常干净,不需要为三角单独写标签:
<ul class="nav"> <li>首页</li> <li class="active">产品</li> <li>关于我们</li> </ul>
三、常见问题与优化建议
很多人在第一次写的时候会发现三角没出现,多半是忘了写content属性,或者伪元素被父级overflow: hidden裁掉了。如果导航栏设置了溢出隐藏,可以把三角放在li内部靠下的位置,而不是用负bottom伸出去。另外,当导航项有底部边框时,三角的颜色最好和边框或背景形成对比,否则看不清。
想让三角出现得更柔和,可以给它加一个渐显动画:先把opacity设为0,active时变1,并配合transition。如果需要向上、向左等其他方向,只需调整有颜色的边框是哪一条即可。例如向右的三角用左边框着色、其余透明。这样一套逻辑能覆盖所有方向的指示器需求,维护成本很低。
ul.nav > li::after {
content: '';
position: absolute;
left: 50%;
bottom: -6px;
transform: translateX(-50%);
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #ff6600;
opacity: 0;
transition: opacity 0.2s ease;
}
ul.nav > li.active::after {
opacity: 1;
}
四、小结
通过::after伪元素配合border三角技法,我们可以用纯CSS给导航当前项加上小三角,不增加DOM节点,易于换色和做动画。核心要点是父级相对定位、伪元素绝对定位居中、宽高为零且只用一条边框着色。掌握后稍作变形就能适配各种导航风格。
css::after伪元素导航三角标记修改时间:2026-08-07 21:33:28