文章插图
有些人极为讨厌 css-in-JS , 单单提起这个名字都会让他们反感 , 总之就是拒绝二字 。他们认为样式不属于 JAVAScript , 而是属于 CSS , 并且 CSS 有着很长的历史 , 浏览器支持非常完善 。关注点必须分离 , 其他路子都走错了 , 我们要以史为鉴(比如标签等) 。
有些人非常喜欢 CSS-in-JS 。他们看到模板和功能并存的理念和大多数的 JavaScript 框架都非常成功 , 所以包装在样式里似乎就是顺其自然 。Vue 的单文件组件就是一个例子 。
Brent Jackson 列举了一些 CSS-in-JS 能做和不能做的事情:
CSS-in-JS 能做什么?
- 让你用 JavaScript 语法编写 CSS
- 组件和样式共用
- 利用原生 JS 语法功能
- 利用 JS 生态系统
- 如何将样式应用于 DOM
- 继承如何工作
- CSS 属性如何工作
- CSS 布局如何工作
CSS-in-JS 的正方辩友和反方辩友我听过很多对 CSS-in-JS 的排斥言论 , 诸如“你用 CSS-in-JS 是因为你不懂 CSS”或者“你们这样做是因为你害怕级联 。我已经知道如何定位 CSS 了 。“但这些言论只是在挑事而已 。
Lara buns 的那篇“没有 Web 的 Web 世界”写的很好 , 其中就提到了 React 和 CSS-in-JS:
我讨厌 React , 因为默认情况下 CSS-in-JS 方法需要你编写完全自包含的组件 , 而不是从宏观层面构建网站的 UI 。不是说你用了 React 就得用 CSS-in-JS , 但这种做法很流行 , 上面这段评价也很公正有趣 。如果你什么东西都要打包 , 难道不是在引入更多不一致的风险吗?
我一直都是 CSS 模块的粉丝 , 因为它就像 CSS-in-JS 一样简单 , 而且和 SASS 并用可以保证一致性 。但人们使用它时也很容易陷入太多一次性使用的陷阱中 。
这些只会用一次的代码可以抛弃 , 可以分离 , 一切都很平衡 。
Laura 还说她喜欢 CSS-in-JS 方法 , 它提供了一些强大的功能和灵活性:
我喜欢 CSS-in-JS , 因为它提供了足够的抽象 , 让你既能用通用选择器之类的技巧 , 同时也能充分利用 JS 来做容器查询之类的东西 。Martin Hofmann 创建了一个网站 , 用一个很小的“警报组件”来客观地对比 BEM 与 Emotion。BEM 有一些优点 , 特别是不需要任何工具 , 并且可以轻松地与任何 Web 项目共享 。但 Emotion 方法在很多方面都比较干净 , 看起来更容易处理 。
文章插图
我希望有更多这种客观的技术比较 , 公正地列出每项技术的优势和代价 。
Scott Jehl 的一篇文章讨论了异步加载 CSS 。文章开头写到:
我们可以用一种不会拖累页面渲染的方法加载 CSS , 大幅提升页面性能和适应性 。值得一提的是 CSS-in-JS 方法天然就有这种能力 , 因为样式被捆绑到了 JavaScript 中 。当然这种做法需要付出性能代价 , 但是如果我们消除一些阻塞渲染的障碍就能减轻一些代价 。起码这种方法值得多用一些数据 。
我不觉得 CSS-in-JS 就一定提高了行业的门槛 。我们并没有强行排除 CSS , 强迫大家用别的语言 。这种方法适合某些项目 , 适用于特定规模 。
我觉得以下情况下你应该考虑一下 CSS-in-JS:
- 你正在开发一个有大量组件的 JavaScript 项目 。
- 你要把模板、功能和数据查询做在一起 。
- 你认为利用这种方法的同时不会影响用户体验 。
- 你的团队喜欢这种技术 , 不会因此萌生退意 。
如果你使用 JavaScript 框架来构建包含组件的 Web 应用程序 , 那么 CSS-in-JS 可能非常适合你的需求 。如果你的团队成员都具备基本的 JavaScript 能力那就最好不过了 。英文原文: https://css-tricks.com/the-differing-perspectives-on-css-in-js/
推荐阅读
- PHP的微服务框架预览
- 怎么知道大红袍是好是坏
- MySQL性能优化分区之实战
- 三角裤会往中间跑怎么回事 无痕内裤总是往中间跑怎么办
- 吃牛蛙是什么梗 基金牛蛙什么梗
- 潘嘎之交进成语库了吗 潘嘎之交是什么梗
- JS 的 new 到底是干什么的?
- 重庆小面的特色味道是什么 重庆特色美食火锅怎么介绍
- 淮阴侯列传中的韩信是一个怎样的人
- 梦到自己家装修房子是什么意思 孕妇梦到自己家装修房子