SCSSファイルにこれがあります。
.class-a{
display: inline-block;
//some other properties
&:hover{
color: darken(#FFFFFF, 10%);
}
}
.class-b{
//Inherite class-a here
//some properties
}
クラスbでは、すべてのプロパティとclass-a
のネストした宣言を継承したいと思います。これはどのように行われますか?私は@include class-a
を使用しようとしました、しかしそれはコンパイル時にエラーを投げるだけです。
@mixin
と@include
は、このような単純な場合には必要ありません。
ただすることができます:
.myclass {
font-weight: bold;
font-size: 90px;
}
.myotherclass {
@extend .myclass;
color: #000000;
}
これを試して:
これで、%base-classをあなたのクラスのどれでも拡張することができます(例.my-class)。
%base-class {
width: 80%;
margin-left: 10%;
margin-right: 10%;
}
.my-base-class {
@extend %base-class;
}
.my-class {
@extend %base-class;
margin-bottom: 40px;
}
@extendを使用することは良い解決策ですが、コンパイルされたCSSがクラス定義を分割することに注意してください。同じプレースホルダーを拡張するクラスはグループ化され、そのクラスで拡張されていないルールは別の定義になります。いくつかのクラスが拡張されるようになると、コンパイルされたcssまたはdevツールでセレクターを探すのが手に負えないものになる可能性があります。ミックスインはミックスインコードを複製し、追加のスタイルを追加します。
@extendと@mixinの違いは、この sassmeister で確認できます。
もう1つのオプションは、属性セレクタを使用することです。
[class^="your-class-name"]{
//your style here
}
"your-class-name"で始まるすべてのクラスはこのスタイルを使用します。
だからあなたのケースでは、あなたはそれを好きにすることができます:
[class^="class"]{
display: inline-block;
//some other properties
&:hover{
color: darken(#FFFFFF, 10%);
}
}
.class-b{
//specifically for class b
width: 100px;
&:hover{
color: darken(#FFFFFF, 20%);
}
}
w3Schools の属性セレクタについての詳細
@extend .myclass;
@extend #{'.my-class'};