曾经的前端开发中,JavaScript、CSS、HTML 作为三大独立的技术,各司其职,互不干涉。然而随着组件结构 React 的出现,将 HTML、CSS、JavaScript 强制混合在一起,这就有了 JSX 以及 CSS in JS 的诞生。接下来,本文作者将分享使用 CSS in JS 的真实感受。

作者 | max stoiber

译者 | 苏本如

责编 | 屠敏

出品 | CSDN(ID:CSDNNews)

程序员转行学什么语言?

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

以下为译文:

三年来,我都没有用任何 .css 文件为我的 Web 应用程序设置样式了,相反地,我用 Javascript 来编写所有的 CSS 样式。

我知道你想问什么:“为什么有人会用 Javascript 编写 CSS 呢?”下面听我来解释。

CSS-in-JS 是什么样子的?

开发人员已经创建了不同风格的 CSS-in-JS 库。到目前为止最受欢迎的是我参与创建的一个名为 styled-components (https://styled-components.com/)的库,它在GitHub上已经拥有20,000多颗星。

将其与 React 结合起来使用,就像下面的示例:

import styled from 'styled-components'const Title = styled.h1`color: palevioletred;font-size: 18px;
`const App = () => (<Title>Hello World!</Title>
)

这个示例将渲染字体大小为 18px, 颜色为”苍紫罗蓝色”的 <h1> 标题文字到 DOM 组件,效果如下:

我为什么喜欢 CSS-in-JS

首先,CSS-in-JS 增强了我的信心。我可以添加、更改和删除 CSS,而不会产生任何意外的后果。我对一个组件样式的更改也不会影响任何其他的内容。如果我删除了一个组件,我同时也删除它的 CSS。不再有以前的样式表越来越臃肿的问题!

  • 信心提升:添加、更改和删除 CSS,不会产生任何意外的后果,同时避免了无用的死代码。

  • 无痛维护:不需要再去寻找影响你的组件的 CSS 样式代码。

我曾经加入的团队尤其受益于这种信心提升。我不能期望所有的团队成员,特别是年轻人,对 CSS 有一个百科全书式的理解。

有了 CSS-in-JS,我们就可以自动避开常见的令人沮丧的 CSS 问题,例如类名冲突和 CSS 优先级特性。这让我们的代码库保持干净,同时也让我们能更快地推进开发进程。

  • 增强的团队合作:无论团队成员的经验水平如何,CSS-in-JS 可以避免常见的令人沮丧的 CSS 问题,以保持代码库干净并加快开发进程。

在性能方面,CSS-in-JS 库会跟踪我在页面上使用的组件,并且只将它们的样式注入到 DOM 中。虽然这样做会让我的 .js 包稍微重了一些,但是用户需要下载的 CSS 负荷变得尽可能地小了,对 .css 文件的额外网络请求也减少了。

页面的互动会变得稍微慢一些,但对用户来说有价值的首屏渲染(first paint)的时间加快了!

  • 快速性能:只给用户发送关键的 CSS 来保证快速的首屏渲染(first paint)速度。

我还可以根据不同的状态(variant=“primary”vs. variant=“secondary”)或全局主题来轻松调整组件的样式。当我动态更改上下文时,组件将自动应用正确的样式。

  • 动态样式:使用全局主题或基于不同状态来轻松设置组件的样式。

CSS-in-JS 仍然提供 CSS 预处理器的所有重要功能。所有的库都支持自动前缀,而 Javascript 提供了大多数其他特性,比如本地的 mixins(函数)和 variables。

我知道你想说:“Max,你也可以通过其他工具、严格的流程或广泛的培训来获得这些好处。CSS-in-JS 看起来没有什么特别的啊?“

CSS-in-JS 将所有这些好处组合到一个方便的 package 中并加以实施。它指引我走向成功之路:做正确的事容易,做错误的事难(甚至不可能)。

谁在用CSS-in-JS?

数千家公司在使用CSS-in-JS进行开发,包括 Reddit、Patreon、Target、Atlassian、Vogue、GitHub、Coinbase 等等。

CSS-in-JS 是否适合你?

如果你正使用一个 Javascript 框架来构建一个包含组件的 Web 应用程序,那么 CSS-in-JS 可能是一个很好的选择。尤其是在你的团队中的每个团队都了解基本的 Javascript 的情况下。

如果你不确定如何在你的团队中开始使用,我建议你自己先尝试一下,看看它会不会让你感觉很好!

原文:https://mxstbr.com/thoughts/css-in-js/

本文为 CSDN 翻译,如需转载,请注明来源出处。

【End】

 热 文 推 荐 

腾讯变革 150 天全记录

为什么那么多人用“ji32k7au4a83”作密码?

@程序员,你真的会用 Unix 命令?

☞ 这个 17 岁少年凭什么成为“顶级大师”?

程序员什么时候才能觉得不穷?

让数百万台手机训练同一个模型?Google把这套框架开源了

剧情反转! 创始人去世事件再爆新料, 1.8亿美元难道去了天堂?

云漫圈 | 如何给女朋友解释什么是HTTP

☞ 没有一个人,能躲过程序员的诱惑!

System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

喜欢就点击“好看”吧!

我为什么要用 Javascript 编写 CSS?相关推荐

  1. 【JavaScript编写计算工资小程序】【表格细边框设置】【网页设计与网站开发HTML、CSS、JavaScript实例教程】【第十章】JavaScript基础——【传智播客】实验作业题【实验5】

    以下为本人大一选修课<网页设计与网站开发>的实验作业题,均为本人原创,分享给大家.如有不足之处欢迎指出. 1.题目: 实验5.新建页面test5.html,利用JavaScript编写如下 ...

  2. 这两天发现一个老外用JavaScript编写的好东西:dp.SyntaxHighlighter。

    dp.Synta 来源http://blog.s135.com/post/226/ r介绍:在网页中加亮显示源代码的工具[原创]  大 | 中 | 小  [ 2007-4-19 14:56 | by  ...

  3. html5 数字滚动选择器,Odometer使用JavaScript和CSS制作数字滑动效果

    Odometer是一个使用JavaScript和CSS技术,制作出数字上下滑动的动画效果插件,有点类似与我们的天然气的读数的动画效果,这个插件是轻量级的,压缩版本只有3kg,使用CSS3动画技术,所以 ...

  4. 提高编写CSS代码效率的10个习惯

    提高编写CSS代码效率的10个习惯 1.保持一贯性. 就像其它的任何事一样,值得一直保持一贯性.保持连贯性,而不是想到什么就给id和class命名什么. CSS的级联样式有利于加深你的记忆,而且充分利 ...

  5. react 改变css样式_web前端入门到实战:编写CSS代码的8个策略,资深开发工程师总结...

    编写基本的CSS和HTML是我们作为Web开发人员学习的首要事情之一.然而,我遇到的很多应用程序显然没有人花时间真正考虑前端开发的长久性和可维护性.我认为这主要是因为许多开发人员对组织CSS / HT ...

  6. “非常有用”的JavaScript 和 CSS 库插件推荐

    在前端开发过程中,高质量的网页设计需要直观和用户友好的界面,而且屏幕上的元素也起着非常重要的作用.Web 设计师不断地寻找优秀代码的集合,希望能提升工作效率.但找到合适的工具库并不总是那么容易的. 以 ...

  7. 用javascript编写的小游戏-打砖块

    用javascript编写的小游戏-打砖块 前言 启发 下载链接 游戏功能说明 代码效果演示 代码 后记 前言 这是我在CSDN发表的第一篇文章.是我在初学javascript后, 忽然来了兴致, 编 ...

  8. jquery+javascript编写国籍控件

    jquery+javascript编写国籍控件 主要功能和界面介绍 国籍控件主要支持中文.英文过滤以及键盘上下事件. 源码介绍 国籍控件核心是两个文件,navtionality.js 和 mian.c ...

  9. 动态分页展示效果(纯JavaScript编写,值得学习)

    动态分页展示效果(纯JavaScript编写,值得学习) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

最新文章

  1. Linux下C++开发工具介绍
  2. 瑞德西韦重症用药结果再曝光,上百名重症一周内好转,股价大涨19%
  3. 轻松架设Win 2003用户隔离FTP站点
  4. jQuery日期弹出选择框Datepicker效果
  5. JavaScript高级程序设计(二):在HTML中使用JavaScript
  6. 头部数据人才24小时图鉴
  7. JPA / Hibernate实体状态转换的初学者指南
  8. stat()函数:获取文件状态
  9. python批量打印mathcad_Print Conducto全能批量打印工具
  10. Java_Arrays.fill() 初始化二维数组一个指定值
  11. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_朴素贝叶斯算法知识点总结...
  12. CVPR2020|3D目标检测算法推荐论文源码大盘点
  13. BLE Mesh网络协议综述
  14. 【CXY】JAVA基础 之 语法基础
  15. 方顿教育:让消费者满意的短视频电商服务平台
  16. qcon_从QCon San Francisco 2009中学到的重点知识和教训
  17. python用selenium 验证码图片_Python +Selenium解决图片验证码登录或注册问题(推荐)
  18. IP网络控制器架构与关键技术
  19. 永远不可能学会的数论之基础数论(例题)
  20. 计算机网络实训室建设设备,计算机网络技术综合实训室建设方案--200万.doc

热门文章

  1. 台式临床化学分析仪行业调研报告 - 市场现状分析与发展前景预测
  2. 中国临床诊断自动化行业市场供需与战略研究报告
  3. 专业零售商行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  4. 窗口潜水面罩行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  5. 2021-2025年中国电子液体处理系统行业市场供需与战略研究报告
  6. C语言作业 – 数组排序算法可视化
  7. 2017级C语言大作业 - 水果忍者
  8. 三条中线分的六个三角形_三角形中的边长和线段(下)
  9. 云原生是什么?它从哪里来?又到哪里去?
  10. 谷歌将彻底淘汰10年前发布的Android版本