【问题标题】:Sass @extend base/default without also extending pseudo-classes?Sass @extend base/default 不扩展伪类?
【发布时间】:2012-08-11 09:44:23
【问题描述】:

我知道我可以@extend .foo:hover,但是有没有一种方法可以@extend .foobar 基本/默认属性而不扩展伪类的定义,例如 :hover、:active 等?

例如,我将如何更改以下内容以使 .foobar 仅扩展 .foo 的默认状态?

.foo {
    & {
         color:blue;
    }
    &:hover {
         background-color: black;
    }
}

.foobar {
     @extend .foo;
     &:hover {
          //As is, I have to override. Any better way?
          background-color: transparent;
     }
}

(如果用Sass没有办法做到这一点,有没有首选的方法来达到同样的效果?)

【问题讨论】:

  • @feeela Sass extends 要么全有,要么全无。不能只扩展选择器的一部分,如果你想要的话,你必须重新考虑如何编写选择器。

标签: css css-selectors extend sass


【解决方案1】:

你必须重写你的选择器,以便只扩展你想要的部分:

%foo {
    color:blue;
}

.foo {
    @extend %foo;

    &:hover {
         background-color: black;
    }
}

.foobar {
    @extend %foo;

    &:hover {
         background-color: transparent;
    }
}

但是,根据您将如何扩展/重用 .foo 类,新的 @content 指令可能是更好的选择。

@mixin foo {
    color: blue;

    &:hover {
        @content;
    }
}

.foo {
    @include foo {
        background-color: black;
    }
}

.foobar {
    @include foo {
        background-color: transparent;
    }
}

【讨论】:

  • 这应该如何工作?我和 OP 有同样的问题,只想扩展基类,但是 SASS 做了很多额外的伏都教。阅读 \@content 的文档,我看不到与 \@extend 的任何关系...
  • @feeela 我已经改写了答案。 @content@extend 无关,但有时使用内容感知 mixin 会产生更紧凑的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2015-11-14
  • 2020-04-25
  • 1970-01-01
  • 2014-07-03
  • 2017-04-04
  • 2017-03-20
相关资源
最近更新 更多