第4章 高度な機能を覚えてSassを使いこなそう
4-1 スタイルの継承ができるエクステンド(@extend)
エクステンドの基本
.box {
margin: 0 0 30px;
padding: 15px;
border: 1px solid #ccc;
}
// .box で使ったスタイルを継承
.item {
@extend .box;
}
.box, .item {
margin: 0 0 30px;
padding: 15px;
border: 1px solid #ccc;
}
同じルールセット内で、複数継承する
// エクステンド
.notes {
color: #d92c25;
font-weight: bold;
text-align: center;
}
.bd {
border-top: 1px solid #900;
border-bottom: 1px solid #900;
}
// 複数継承
.item {
small {
display: block;
padding: 10px;
@extend .notes;
@extend .bd;
}
}
.notes, .item small {
color: #d92c25;
font-weight: bold;
text-align: center;
}
.bd, .item small {
border-top: 1px solid #900;
border-bottom: 1px solid #900;
}
.item small {
display: block;
padding: 10px;
}
エクステンドの連鎖
.att {
color: red;
font-weight: normal;
}
.attBox {
// .att を継承
@extend .att;
padding: 15px;
border: 1px solid red;
}
.notes {
// .att が継承されている、.attBox を継承(連鎖)
@extend .attBox;
}
.att, .attBox, .notes {
color: red;
font-weight: normal;
}
.attBox, .notes {
padding: 15px;
border: 1px solid red;
}
エクステンドが使えるセレクタ
エクステンドが使える例
// クラスセレクタ
.class { ... }
// タイプセレクタ
small { ... }
// IDセレクタ
#selectorID { ... }
// 連結セレクタ
.pd.bd { ... }
// 属性セレクタ
input[type="text"] { ... }
// 擬似クラス
a:hover { ... }
// 擬似要素
p::first-line { ... }
エクステンドが使えない例
// 子孫セレクタ
.item p { ... }
// 子セレクタ
#main > article { ... }
// 隣接セレクタ
h2 + h3 { ... }
// 間接セレクタ
h3 ~ h3 { ... }
エクステンド専用のプレースホルダーセレクタ
// エクステンド専用のプレースホルダーセレクタ
%boxBase {
padding: 15px;
border: 1px solid #999;
}
// プレースホルダーセレクタを継承
.item {
@extend %boxBase;
margin-bottom: 20px;
}
section {
@extend %boxBase;
margin-bottom: 60px;
}
.item, section {
padding: 15px;
border: 1px solid #999;
}
.item {
margin-bottom: 20px;
}
section {
margin-bottom: 60px;
}
@media 内ではエクステンドは使用できない
%btnBase {
display: inline-block;
padding: 5px 10px;
background: #eee;
}
@media all and (orientation:landscape) {
a {
@extend %btnBase;
}
}
@media all and (orientation: landscape) {
a {
display: inline-block;
padding: 5px 10px;
background: #eee;
}
}
@media all and (orientation:landscape) {
%btnBase {
display: inline-block;
padding: 5px 10px;
background: #eee;
}
a {
@extend %btnBase;
}
}
@media all and (orientation:landscape) {
%btnBase {
display: inline-block;
padding: 5px 10px;
background: #eee;
}
a {
@extend %btnBase;
}
}
.btn {
@extend %btnBase;
}
@media all and (orientation: landscape) {
a, .btn {
display: inline-block;
padding: 5px 10px;
background: #eee;
}
}
警告を抑止する !optional フラグ
.btn {
@extend %btnBase !optional;
}

