伪元素(::before/::after)可不改HTML添加装饰,需设content及display等属性;支持绝对定位角标、双边框、背景叠加;注意不影响布局、可访问性及鼠标事件。
不改 HTML 结构,也能给元素加装饰——伪元素(::before 和 ::after)就是最常用、最干净的方案。
::before 或 ::after 添加小图标或分隔符比如在导航菜单文字前加一个圆点,或标题后加一条短横线,都不需要额外写 标签。
关键点:伪元素默认是行内级,要显示必须设置 content(哪怕只写 content: ""),并根据需要设定 display、尺寸和定位。
当想在按钮右上角加个红色小角标、或卡片左下角加个标签,又不想动 HTML,伪元素配合 position: absolute 就很合适。
前提是父容器设 position: relative,否则绝对定位会相对于最近的定位祖先,容易跑偏。
z-index,避免被内容遮住有些视觉效果用纯 CSS 边框或 box-shadow 不够灵活,比如双色边框、不规则投影、或叠加一层半透明蒙版,这时可以多用一个伪元素层。
; z-index: -1; } .card::after { content: ""; position: absolute; top: -4px; left: -4px; right: -4px; bottom: -4px; border: 2px solid #6c757d; z-index: -2; }
z-index: 2)伪元素默认不参与文档流,但若设了 display: block 又没控制好尺寸,可能意外撑开高度;更重要的是,它们不会被屏幕阅读器读出,所以不能用来传递关键信息。
pointer-events: none 避免伪元素拦截鼠标事件transform,性能比直接改 left/top 更好