将任何 class 的 &:hover 扩展到 SASS 或 SCSS 中任何其他 class 的悬停

Extend &:hover of any class to any other class's hover in SASS or SCSS

有没有办法将任何 class 的 &:hover 扩展到任何其他 class 的悬停?

我的代码是这样的,它停止了两个 classes:

的悬停

HTML

<a href="#" class="button1">Button 1</a>
<a href="#" class="button2">Button 2</a>

SCSS

.button1 {
  background: black;
  padding: 5px 10px;
  text-decoration: none;
  color: white;
  &:hover {
    background: red;
  }
}

.button2 {
  background: blue;
  padding: 5px 10px;
  text-decoration: none;
  color: white;
  &:hover {
    @extend .button1:hover
  }
}

您可以使用占位符。

%hover {
  background: red;
}

.button1 {
  background: black;
  padding: 5px 10px;
  text-decoration: none;
  color: white;
  &:hover {
    @extend %hover;
  }
}

.button2 {
  background: blue;
  padding: 5px 10px;
  text-decoration: none;
  color: white;
  &:hover {
    @extend %hover;
  }
}

或者,也许更好的解决方案是为您的按钮使用更通用的 class:

.btn {
  padding: 5px 10px;
  text-decoration: none;
  color: white;

  &:hover {
    background: red;
  }
}

.btn--1 {
  background: black;
}

.btn--2 {
  background: blue;
}

处理所有这些东西的一个好方法是也使用变量, 例如,如果您定义如下内容:

$buttons-hover-color: #somecolor;

然后你可以在任何按钮中调用它,如果将来你想改变它,只需改变变量,所有按钮都会更新。 另一个重要的事情是 extend 在媒体查询中不起作用,所以也许将来当你针对移动设备时,你不想在移动设备上使用红色,所以你只需要为其创建另一个 var。

像这样:

$btn-hover-color: red;
$btn-hover-mobile: black;

.button1 {
 background: black;
 padding: 5px 10px;
 text-decoration: none;
 color: white;
 &:hover {
  background-color: $btn-hover-color;
 }
}

.button2 {
  background: blue;
  padding: 5px 10px;
  text-decoration: none;
  color: white;
  &:hover {
    background-color: $btn-hover-color;
  }

  @media (max-width: 800px) {
    &:hover {
      background-color: $btn-hover-mobile;
    }
  }
 }

希望对您有所帮助

试试这个解决方案。它对我有用 http://jsbin.com/lezuwalida/edit?html,css,output

生成的 css 看起来一样

.demon:hover, .demon.demo {
  outline: 3px solid red;
}

.demon2:hover, .demon2.demo2 {
  outline: 3px solid red;
}

您可以使用mixin

@mixin hoverStyle {
   &:hover{
     background: red;
   }
}

.button1 {
   background: blue;
   padding: 5px 10px;
   text-decoration: none;
   color: white;
   @include hoverStyle;
}

.button2 {
   background: blue;
   padding: 5px 10px;
   text-decoration: none;
   color: white;
   @include hoverStyle;
}