在编写 CSS 时,我已经开始使用BEM 方法论,并且在少数情况下我很难找到做某件事的最佳方法。
我想在这里举一个简单的面板示例。
假设我正在使用 BEM 样式编写面板组件 CSS。所以我的 CSS 可能如下所示:
.panel {}
.panel__titlebar {}
.panel__content { display: none; }
面板可以是无镀铬的或镀铬的。所以我为面板定义了另一个修饰符类:
.panel--with-chrome {
border: 4px solid black;
border-radius: 4px;
}
现在可以说,面板可以处于全屏/最大化状态,其中 chrome 和标题栏也会消失。不要为面板和标题栏定义修饰符,明智的做法是在父级(例如面板--全屏)上定义修饰符,其余元素应相应更改。所以现在我的 CSS 变成了:
.panel--fullscreen {
/* something has to be done here */
}
.panel--fullscreen .panel__titlebar { display: none; }
要在全屏模式下删除 chrome,我可以:
在 JS 中切换panel--with-chrome类和panel--fullscreen类
覆盖面板内的 chrome CSS——全屏类。
首先不好,因为理想情况下我只想在 JS 中切换一个类(.panel--fullscreen)来切换全屏模式。
第二个不好,因为我必须覆盖以前的 CSS,这是一种不好的做法。
那么最好的方法是什么?感谢您的评论。
谢谢