在Nicolas Gallaghers' write up about HTML semantics,他概述了一种以模块化方式构建html和css的方法(受BEM架构的影响)。 他给出了一个例子,我并不完全理解:
/* Utility */
.u-utilityName {}
/* Component */
.ComponentName {}
/* Component modifier */
.ComponentName--modifierName {}
/* Component descendant */
.ComponentName-descendant {}
/* Component descendant modifier */
.ComponentName-descendant--modifierName {}
/* Component state (scoped to component) */
.ComponentName.is-stateOfComponent {}
他没有在他的文章中深入解释这一点,我仍然希望理解。所以我希望有人能回答这个问题。
答案 0 :(得分:2)
实用程序类本质上是表示类,用于修改元素的一个表示方面。这些是有用的,因为它们广泛适用。您可以将实用程序类应用于各种组件。由于它不是特定于某一特定组件,因此无需将其创建为组件修饰符。
状态类与修饰符类略有不同,因为通常通过JavaScript添加,更改或删除状态。因此,状态类只是一种约定,可以帮助确定样式表和脚本之间需要共享的类。您通常不希望在脚本中访问修饰符类,因为这会开始不必要地将它们耦合到特定的表示或组件。
答案 1 :(得分:0)
好的,所以我查看了他的源代码,看起来实用工具是"做"什么,而不是"是"一些东西。因此,实用程序将类似于" .u-textAlignLeft",以及类似于" .EnormousHeader"的组件。
然而,这提出了一个新问题:组件状态和实用程序之间的确切区别是什么?如果我必须定义它,那将是一个实用程序""某事(.u-textLeft)和状态"确实"只在其组件范围内有意义的东西(例如.is-Disabled)。希望这种散漫对任何人都有用!