@xrtgavin
2020-03-26T18:54:08.000000Z
字数 896
阅读 1903
知乎
已发布
原文:CSS Utility Classes and "Separation of Concerns"
作者有多年工作经验,其对待 CSS 的心路历程如下:
特点:以 CSS 在 HTML 中的语义来命名 CSS 类名
缺点:HTML 达到了「分离关注」的目的,无需关心 CSS 了,但是 CSS 的结构与 HTML 的结构强耦合,几乎就是 HTML 结构的复刻。
典型代表:BEM 方法论
实际工作中,面临的两难境地:
特点:HTML 是独立的,CSS 依赖 HTML
导致的结果:HTML 可以方便地调整样式,CSS 不能方便地重用。
特点:CSS 是独立的,HTML 依赖 CSS
导致的结果:CSS 可以方便地复用,HTML 不能方便地调整样式。
每个项目负责人都要意识到,「分离关注」并非是一个非黑即白的选择,而是一个权衡(tradeoff),一边是方便地调整样式,一边是方便地复用样式。
考虑到
1. HTML 是结构化的信息,具有明显的约束(如:标签种类等)
2. CSS 是创造性灵感类信息,有极大的发散空间,达成相同效果有多种方式,无约束且易被滥用,被滥用后容易导致 UI 的不一致性
作者坚定的选择
「方便地复用 CSS」,为 CSS 增加约束,提升 UI 一致性。
作者的观察:
一个组件做得越多,或者一个组件越具体,越难以复用
注:粒度越粗,越难复用。
作者的观察:
通过细粒度的功能类的组合,可以有效去除 CSS 中的重复
所有的 CSS 均由功能类组合而成
好处:对 CSS 的使用施加约束,有利于产生更一致的 UI
但是如果一个组件频繁被使用,却每次都要用功能类组合而成么?