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

Laravel中npm run dev编译SCSS生成错误CSS:hover前多空格如何修复

问题原因

这个问题和package.json、package-lock.json配置没有任何关系,不需要修改这两个文件,本质是SCSS嵌套语法书写错误,不是编译工具的bug。

SCSS嵌套规则的默认逻辑是:嵌套的子选择器如果没有特殊标记,编译时会在父选择器和子选择器之间拼接一个空格,作为后代选择器解析。你源码里嵌套的:hover前没有加父选择器引用标记,编译后自然生成了.nav-link :hover——这个选择器会匹配.nav-link内部所有被hover的后代元素,而不是被hover的.nav-link本身,这就是你看到的“多余空格”的来源,也是样式失效的根本原因。

修复方案

只需要修改SCSS源码,在:hover前加上&符号即可。&是SCSS的父选择器引用符,会直接把父选择器拼接到当前选择器前面,不会插入额外空格。

修复后的SCSS代码:

.nav-link {
    color: $color_light;
    font-weight: 600;
    font-size: 1.5em;

    &:hover {
        color: $color_vLight;
    }
}

修改完成后重新执行npm run dev编译,生成的CSS就会是正确的.nav-link:hover,没有多余空格,样式即可正常生效。

补充说明

这个是SCSS嵌套的高频入门坑,大量开发者刚接触SCSS嵌套语法时都遇到过同类问题,不需要调整Laravel自带的Vite/Mix编译配置,也不需要改动依赖版本。

日常写SCSS嵌套时可以按这个规则判断要不要加&:

  • 如果要选择当前父元素本身的伪类(比如:hover、:active、:focus)、伪元素(比如::before、::after)、叠加状态类(比如和父元素同级的.active、.disabled类),必须加&拼接
  • 如果要选择父元素内部的后代元素,不需要加&,默认拼接的空格就是后代选择器需要的分隔符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:30:52