CMS组件定制场景下的实际应用对比
在CMS界面中,编辑者有时可以自定义组件的渲染方式。比如在Accordion组件中,编辑者可以从下拉菜单中选择展开图标类型。
传统上,我们可能会使用BEM命名规范来处理这些变化,但在CMS定制场景下,data attributes可能是一个更好的选择。
<span class="demo-accordion-item demo-accordion-item--icon-down">Item</span>
<span class="demo-accordion-item demo-accordion-item--icon-right">Item</span>
<span class="demo-accordion-item demo-accordion-item--icon-plus">Item</span>
<span class="demo-accordion-item" data-icon="down-arrow">Item</span>
<span class="demo-accordion-item" data-icon="right-arrow">Item</span>
<span class="demo-accordion-item" data-icon="plus">Item</span>
.demo-accordion-item { /* 通用样式 */ }
.demo-accordion-item--icon-down { /* 向下箭头样式 */ }
.demo-accordion-item--icon-right { /* 向右箭头样式 */ }
.demo-accordion-item--icon-plus { /* 加号样式 */ }
[data-icon] { /* 通用样式 */ }
[data-icon="down-arrow"] { /* 向下箭头样式 */ }
[data-icon="right-arrow"] { /* 向右箭头样式 */ }
[data-icon="plus"] { /* 加号样式 */ }
点击上方按钮切换查看Data Attributes方式
点击上方按钮切换查看BEM方式
想象一个列表控制或菜单组件,编辑者可以在项目前后添加文本。这可能是产品名称后的彩色圆圈"NEW",或者是带数字的红色通知徽章。
<button class="c-txt c-txt--badge c-txt--color-red
c-txt--posv-top c-txt--posh-left">
产品名称
</button>
<button class="product-item" data-text-type="red badge top left"
data-text="NEW">
产品名称
</button>
后端开发者更容易理解和实现,不需要复杂的CSS类名生成逻辑
HTML更简洁,不会有冗长的class列表
支持多个值,可以轻松添加新的修饰符
在CMS系统中更自然地与后端数据模型映射
在CMS组件定制场景下,Data Attributes提供了一个更实用、更易维护的解决方案:
虽然在某些纯CSS场景下BEM仍然有价值,但在CMS集成场景中,Data Attributes往往是更好的选择。