You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SASS中:last-child与::after用法解析及最后一个li伪元素移除问题

面包屑导航伪元素样式问题解析与修正

原代码的问题所在

先看你写的SASS编译后的CSS代码,就能明白为啥没生效:

ul.breadcrumbs {
  margin-top: 30px;
  display: flex;
  list-style-type: none;
  gap: 20px;
}
ul.breadcrumbs li.bread-item::after {
  content: ">";
  margin-left: 20px;
}
ul.breadcrumbs:last-child::after {
  content: "";
}

最后一条规则是给页面中最后一个ul.breadcrumbs元素的伪元素清空内容,完全没选中ul内部最后一个li.bread-item的伪元素,自然达不到移除最后一个箭头的效果。

正确的实现代码

你需要把:last-child选择器嵌套在li.bread-item的层级里,这样才能精准选中目标元素:

ul.breadcrumbs
    margin-top: 30px
    display: flex
    list-style-type: none
    gap: 20px
    li.bread-item
        &::after
            content: ">"
            margin-left: 20px
        // 给最后一个li的伪元素清空内容
        &:last-child::after
            content: ""

编译后的CSS会变成:

ul.breadcrumbs {
  margin-top: 30px;
  display: flex;
  list-style-type: none;
  gap: 20px;
}
ul.breadcrumbs li.bread-item::after {
  content: ">";
  margin-left: 20px;
}
ul.breadcrumbs li.bread-item:last-child::after {
  content: "";
}

这时候就能正确移除最后一个面包屑项后面的箭头了。

更高效的写法推荐

其实可以换个思路,只给非最后一个面包屑项加伪元素,这样不用额外清空内容,逻辑更直接:

ul.breadcrumbs
    margin-top: 30px
    display: flex
    list-style-type: none
    gap: 20px
    li.bread-item
        &:not(:last-child)::after
            content: ">"
            margin-left: 20px

这种写法不会给最后一个li生成伪元素,也就不需要后续清除,代码更简洁。

内容的提问来源于stack exchange,提问作者Alexander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:30:51