注: BEM ではブロックと呼ばれるモジュールという言葉を使用します。また、変更された BEM 命名規則を使用して、回答にもそれを使用してください。
BLOCK__ELEMENT--MODIFIER
.btn
次のようなモジュールがあるとします。
.btn {
background: red;
text-align: center;
font-family: Arial;
i {
width:15px;
height:15px;
}
}
そして、内部に.popup-dialog
モジュールを作成する必要があります。.btn
.popup-dialog {
...
.btn {
position: absolute;
top: 10px;
right: 10px;
}
}
SMACSS と BEM では、モジュール内のモジュールの配置をどのように処理する必要がありますか?
あなたの答えでは、正しい解決策を特定し、次のアプローチも分析してください: (以下のすべての例は、上記の CSS に基づいて構築または変更されていることに注意してください)
アプローチ1
.btn
[内の元のクラスをオーバーライド.popup-dialog
]
CSS :
.popup-dialog {
...
.btn { // override the original .btn class
position: absolute;
top: 10px;
right: 10px;
}
}
マークアップ:
<div class="popup-dialog">
...
<button class="btn"><i class="close-ico"></i> close</btn>
</div>
アプローチ 2
[ の中にサブクラスを追加する.popup-dialog
]
CSS :
.popup-dialog {
...
.popup-dialog__btn {
position: absolute;
top: 10px;
right: 10px;
}
}
マークアップ:
<div class="popup-dialog">
...
<button class="btn popup-dialog__btn"><i class="close-ico"></i> close</btn>
</div>
アプローチ 3
.btn
[修飾子付きサブクラス]
CSS :
.btn--dialog-close {
position: absolute;
top: 10px;
right: 10px;
}
マークアップ:
<div class="popup-dialog">
...
<button class="btn btn--dialog-close"><i class="close-ico"></i> close</btn>
</div>
アプローチ 4
[.btn
レイアウト クラスを持つサブクラス]
CSS :
.l-dialog-btn { // layout
position: absolute;
top: 10px;
right: 10px;
}
マークアップ:
<div class="popup-dialog">
...
<button class="btn l-dialog-btn"><i class="close-ico"></i> close</btn>
</div>