老哥们,问一个 SCSS 的问题

34 天前
 17681880207

我有个组件的 html 定义如下:

<!-- 默认卡片 -->
<div class="card">
  <div class="card__title">
  	<slot name="title"/>
  </div>
  <div class="card__content">
    <slot name="content"/>
  </div>
</div>

<!-- 警告卡片样式 -->
<div class="card card--warning">
  <div class="card__title">
  	<slot name="title"/>
  </div>
  <div class="card__content">
    <slot name="content"/>
  </div>
</div>

<!-- 成功卡片样式 -->
<div class="card card--successful">
  <div class="card__title">
  	<slot name="title"/>
  </div>
  <div class="card__content">
    <slot name="content"/>
  </div>
</div>

关于 SCSS 我的想法是:

// 这里定义了普通卡片样的样式
.card {
  &__title {
    color: gray;
  }
  
  &__content {
    color: lightgray;
  }
  
  // 定义警告卡片的样式
  &--warning {
    &__title {
      color: yellow;
    }
  
    &__content {
      color: lightyello;
    }
  }
  
  // 定义成功卡片的样式
  &--successful {
    &__title {
      color: green;
    }
  
    &__content {
      color: lightgreen;
    }
  }
}

但是警告卡片和成功卡片的 css 会被解析为:

.card--warning__title {}
.card--warning__content {}

.card--successful__title {}
.card--successful__content {}

也就是我实际使用的时候如果要使用警告卡片,实际上 html 应该写成:

<div class="card card--warning">
  <div class="card--warning__title"><!-- 而不是 <div class="card__title"> -->
  	<slot name="title"/>
  </div>
  <div class="card-warning__content"><!-- 而不是 <div class="card__content"> -->
    <slot name="content"/>
  </div>
</div>

请问各位老哥,SCSS 应该怎么来定义样式啊?

1149 次点击
所在节点    CSS
7 条回复
Perry
34 天前
这种问题直接问 LLM 就能有答案
P233
34 天前
& 在 scss 里是 parent reference 的意思,全部平级就好了
nxgh
34 天前
zhuoyan
34 天前
// 这里定义了普通卡片样的样式
.card {
&__title {
color: gray;
}

&__content {
color: lightgray;
}

// 定义警告卡片的样式
&--warning {
.card {
&__title {
color: yellow;
}

&__content {
color: lightyello;
}
}
}

// 定义成功卡片的样式
&--successful {
.card {
&__title {
color: green;
}

&__content {
color: lightgreen;
}
}
}
}
dallaslu
34 天前
& 是指 parent ,根据层级来的。你需要的是固定前缀
17681880207
30 天前
@Perry 可能我问的方式有问题,尝试了几次,给不出我满意的回答。DeepSeek r1 甚至还会陷入死循环。
Perry
30 天前
@17681880207 这种简单的可能不需要用 R1 ,Sonnet 3.5 试试看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1112790

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX