Page 46 - css揭秘
P. 46

„ 每次抽象都必然会带来更高的学习成本,每当有新人加入到我们的
                           代码库中,这个问题都会重演。他要么已经对我们选择的这门预处
                           理器“方言”很熟悉,要么得从头学。这意味着我们要么强制协作
                           者接受我们的选择,要么花费额外的时间来培训,而这两者都不是
                           我们想要的。
                           „ 另外,别忘了还有抽象泄漏法则:“所有重大的抽象机制在某种程度
                           上都存在泄漏的情况。”预处理器是由人类写出来的,就像所有由
                           人类写出来的大型程序一样,它们有它们自己的 bug。这些 bug 可
                           能会潜伏很久,因为我们很少会怀疑预处理器的某个 bug 才是我们
                           CSS 出错的幕后元凶。

                        除了上面列出的这些问题,预处理器还可能导致这种风险:网站开发者
                    可能会不自觉地“依赖”和“滥用”。因为在某些时候,预处理器并不必要。
                    比如在小型项目中;或者在未来,说不定预处理器最受欢迎的那些特性都被
                    加入了原生 CSS 中。很惊讶吗?没错,很多受预处理器启发的特性都已经
                    以各种方式融入到原生 CSS 中了。

                           „ 有一份关于(跟变量类似的)自定义属性的草案,叫作 CSS 自定义
                           属性暨层叠式变量(http://w3.org/TR/css-variables-1)。
                           „ CSS 值与单位(第三版)中的 calc() 函数,不仅在处理运算时非常
                           强大,而且已经得到了广泛的支持,当下可用。
                           „ CSS 颜色(第四版)(http://dev.w3.org/csswg/css-color)引入的 color()
                           函数会提供颜色运算方法。
                           „ 关于嵌套,CSS 工作组内部正在进行一些正式的讨论,甚至以前还
                           有过一份相关的草案(ED)。
                        请注意,这些原生特性通常比预处理器提供的版本要强大得多,因为它
                              1①
                    们是动态的 。举个例子,预处理器完全不知道如何完成 100% - 50px 这样
                    的计算,因为在页面真正被渲染之前,百分比值是无法解析的。但是,原生
                    CSS 的 calc() 在计算这样的表达式时没有任何压力。与此类似,下面这样
                    的变量玩法在预处理器中是不可能做到的:

                        ul { --accent-color: purple; }
                        ol { --accent-color: rebeccapurple; }
                        li { background: var(--accent-color); }

                        你看清楚这段代码的意图了吗?在有序列表中,列表项的背景色将是
                       rebeccapurple;但在无序列表中,列表项的背景色将是                      purple。试
                    试用预处理器能否做到!当然,在这个例子中,我们可以直接使用后代选择
                    符,只不过这个例子的重点在于向你展示 CSS 的原生变量所具备的动态性。



                    ①  不要忘了这样的原生 CSS 特性也可以通过脚本来操纵。比如说,你可以用 JS 来改变一个变
                      量的值。



                                                                                               CSS 编码技巧        15







          ඀ࠡ  JOEC
   41   42   43   44   45   46   47   48   49   50   51