主要观点:应停止使用class
属性,它是古老且存在诸多问题的系统,可通过属性、自定义标签名和自定义状态等方式来更高效地表达组件状态和参数。
关键信息:
- HTML 发展历程中
class
属性的引入及演变。 - 类选择器扩展的问题,如参数化困难、命名冲突等。
- BEM、Atomic CSS、CSS Modules 等解决方案的优缺点。
- 提出用属性(如
data-
属性)、自定义标签名和自定义状态来替代class
属性的解决方案及示例。
重要细节: - HTML 2.0 无样式,HTML 3.2 开始支持
id
和class
属性,1997 年 HTML 4.0 进一步发展。 - 类选择器扩展时面临的多种选择及其局限性,如添加额外类、创建不同“具体”类、命名空间类参数等。
- BEM 虽能解决部分问题但存在命名冗长、动态状态处理繁琐等问题。
- Atomic CSS 摒弃 OOP 概念,存在标记混乱、失去 CSS 部分优势、响应式设计易解读等问题。
- CSS Modules 仅解决“选择器冲突”问题,需维护跨栈工具且仍存在不变性问题及缓存问题。
- 属性可通过
data-
属性类似Map<string, T>
进行参数化,具有唯一性、可动态处理等优势,且 CSS Values 5 规范可使属性渗透到 CSS 属性。 - 自定义标签名是有效的 HTML5 语法,可自由样式化且无默认用户代理样式。
- 自定义状态可通过 JavaScript 定义自定义元素并操纵内部状态,以自定义伪选择器来改变样式,且在现代浏览器中得到支持。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。