あるCSSクラスをベースに、右詰めや左詰めなどバリエーション違いのクラスを作りたいというケースに @extend は使えます。
下記はSass記法例。
.box { width: 300px; height: 200px; } .right-box { @extend .box; float: right; margin: 0 0 20px 20px; } .left-box { @extend .box; float: left; margin: 0 20px 20px 0; }
CSS側には下記のように展開されます。
.box, .right-box, .left-box { width: 300px; height: 200px; } .right-box { float: right; margin: 0 0 20px 20px; } .left-box { float: left; margin: 0 20px 20px 0; }
一見 @mixin と大差ないように思えますが、 @mixin は記録したプロパティを使いまわすためのもので、@extend はベースのクラスと統一化するためのものと、概念に差があります。
出力されたCSSも @extend したクラス側にプロパティが書かれるわけでなく、 @extend 元のクラスに追加記述される形なので、CSSソースは @mixin より軽量化されます。