Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

黑一黑那笨拙的 CSS 规范

  CSS & CSSOM 是比 DOM 还笨重得多的东西,前端最复杂的地方莫过于此了。我觉得是因为人们太贪婪了,总是把各种奇怪的特性全加到 CSS 中。实际上我们真正常用的 CSS 属性也就寥寥那么几个而已,大部分东西根本没人用但却让规范变得非常复杂繁琐。
  我觉得作为一个规范,不应该把所有东西都平行地丢在一起,而是应该分级处理。就像天朝的电视节目没有分级,所以电视里的动画定位永远是儿童。如果有分级制,我们把最常用的一部分抽出来,不常用或无耦合的单独做成规范,这样就可以避免像现在这种程度的混乱。
  上面这段牢骚也许有点难理解吧?让我多举几个例子好好说明下。我们在写程序的时候总是尽可能地避免使用全局变量,避免多个体系之间的直接耦合。这么做是对的,这样才能让程序的逻辑最清晰,把逻辑复杂度降到最低。但是我们再看看 CSS 这个规范的设计呢?各个体系都存在直接耦合,总是牵一发而动全身。不懂 CSS 的人写起 CSS 来就好像是新手在玩魔方,拼出一个面,又把另一个面弄乱。最终写出来的东西也是毫无逻辑的,只是碰巧写了浏览器显示正常的 CSS 而已(这就是基于巧合编程)。
  CSS 的设计就像一堆模块耦合在一堆全局变量上的程序。比如 transform 会影响 position: fixed、opacity 会影响 stacking context 等这些多如牛毛的设定。这些坑永远都踩不完,而且同一个坑可能会踩许多次。
  其实我也不知道像 CSS 这样描述 UI 的东西到底应该如何设计才好。虽然我一直在黑 CSS,但至今也没想到一套比它更好的解决方案可以这么容易地描述 UI。但我确实有一些建议,比如分级(分类)处理。把基本布局的、渲染修饰的、动画、小语种排版、可访问性辅助等按照一定分类做成无耦合的多个模块来描述。这样有助于浏览器实现,可以让浏览器避免掉进很多性能的坑里。甚至有些时候浏览器可以选择性地不实现某些分类的特性来做到更高的性能,比如 React Native 其实就很希望用 CSS,但碍于 CSS 太复杂,所以只能把一些没什么用的功能砍掉。
  我希望一个规范最终会是把某些最基本的东西定义为必须实现,其它扩展的东西定义为可选实现。只有这样才能让规范不变得越来越笨拙。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^