我有一个Item类和一个紧凑的"修改器"类:

.item { ... }
.item.compact { /* styles to make .item smaller */ }

这个不错.不过,我想添加一个@media查询,当屏幕足够小时,它会强制.item类紧凑.

一开始我就这么想:

.item { ... }
.item.compact { ... }
@media (max-width: 600px) {
  .item { @extend .item.compact; }
}

但这会生成以下错误:

您不能从@media内@extend外部 Select 器.你只能

我如何使用SASS来实现这一点,而不必求助于复制/粘贴样式?

推荐答案

简单的答案是:你不能,因为Sass不能(或不会)为它组成 Select 器.你不能在媒体查询的内部扩展媒体查询之外的内容.如果它只是复制一份,而不是试图组合 Select 器,那当然是件好事.但事实并非如此,所以你不能.

Use a mixin

如果您打算在媒体查询内外重用代码块,但仍希望它能够扩展它,那么请编写一个mixin和一个extend类:

@mixin foo {
    // do stuff
}

%foo {
    @include foo;
}

// usage
.foo {
    @extend %foo;
}

@media (min-width: 30em) {
    .bar {
        @include foo;
    }
}

Extend the selector within a media query from the outside

这不会真正帮助您的用例,但它是另一种 Select :

%foo {
  @media (min-width: 20em) {
    color: red;
  }
}

@media (min-width: 30em) {
  %bar {
    background: yellow;
  }
}

// usage
.foo {
  @extend %foo;
}

.bar {
  @extend %bar;
}

Wait until Sass lifts this restriction (or patch it yourself)

关于这个问题有许多正在进行的讨论(除非您有什么有意义的东西要添加,否则请不要为这些主题做贡献:维护人员已经意识到用户需要这个功能,这只是一个如何实现它以及语法应该是什么的问题).

Css相关问答推荐

我试图用图像填充行的一列

在carousel组件上应用css转换时出现问题

当鼠标悬停在元素的::第一行时,如何应用样式?

React呈现多个css文件

如何仅以WooCommerce单一产品页面为目标?

为什么在RadixUi上应用Tailwincss和自定义css类不起作用?

如何使TWebPanel具有圆角?

如何使背景出现在具有自己背景 colored颜色 的子元素上

如何从 WooCommerce 中的 Betheme 图像中删除产品永久链接图标

如何使用 Tailwind CSS 稳定 React 中的浮动标签?

如何阻止 Mud Blazor MudTable 列扩展以适合文本

如何在相对位置和绝对位置之间转换元素?

为什么这个绝对定位的 ::after 伪元素会崩溃,除非父级有过滤器?

:required 或 [required] CSS Select 器

如何测试页面上的文本被删除

未知规则 @propertycss(unknownAtRules)

如何将 Google 字体链接到我的 Nuxt 文件?

你能用 JavaScript 控制 GIF 动画吗?

如何在 Chrome 的判断器中添加/插入之前或之后的伪元素?

CSS flex,如何在第一行显示一个项目,在下一行显示两个项目