注意:我使用模块这个词,在 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)
方法一
[覆盖内部的原始.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>
方法二
[在里面添加一个子类.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>