Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[译] 为什么我用 JavaScript 来编写 CSS

[译] 为什么我用 JavaScript 来编写 CSS

作者头像
ConardLi
发布于 2019-10-21 09:37:34
发布于 2019-10-21 09:37:34
1.3K00
代码可运行
举报
文章被收录于专栏:code秘密花园code秘密花园
运行总次数:0
代码可运行

译者:Ivocin 校对者:MacTavish Lee, Mirosalva

三年来,我设计的 Web 应用程序都没有使用 .css 文件。作为替代,我用 JavaScript 编写了所有的 CSS

我知道你在想什么:“为什么有人会用 JavaScript 编写 CSS 呢?!” 这篇文章我就来解答这个问题。

CSS-in-JS 长什么样?

开发者们已经创建了不同风格的 CSS-in-JS。迄今为止最受欢迎的,是我和他人共同开发的一个叫做 styled-components 的库,在 GitHub 上有超过 20,000 颗星。

如下是它与 React 一起使用的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import styled from 'styled-components'
const Title = styled.h1`  color: palevioletred;  font-size: 18px;`
const App = () => (  <Title>Hello World!</Title>)

复制代码

这会在 DOM 里渲染一个字体大小为 18px 的浅紫红色的 <h1>

为什么我喜欢 CSS-in-JS?

主要是 CSS-in-JS 增强了我的信心。我可以在不产生任何意外后果的情况下,添加、更改和删除 CSS。我对组件样式的更改不会影响其他任何内容。如果删除组件,我也会删除它的 CSS。不再是只增不减的样式表了!✨

信心:在不产生任何意外后果的情况下,添加、更改和删除 CSS,并避免无用代码。

易维护:再也不需要寻找影响组件的 CSS 了。

尤其是我所在的团队从中获取了很大的信心。我不能指望所有团队成员,特别是初级成员,对 CSS 有着百科全书般的理解。最重要的是,截止日期还可能会影响质量。

使用 CSS-in-JS,我们会自动避开 CSS 常见的坑,比如类名冲突和权重大战(specificity wars)。这使我们的代码库整洁,并且开发更迅速。?

提升的团队合作:无论经验水平如何,都会避开 CSS 常见的坑,以保持代码库整洁,并且开发更迅速。

关于性能,CSS-in-JS 库跟踪我在页面上使用的组件,只将它们的样式注入 DOM 中。虽然我的 .js 包稍大,但我的用户下载了尽可能小的有效 CSS 内容,并避免了对 .css 文件的额外网络请求。

这导致交互时间稍微长一点,但是首次有效绘制却会快很多!??

高性能:仅向用户发送关键 CSS 以快速进行首次绘制。

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

动态样式:基于全局主题或不同状态设置组件样式。

CSS-in-JS 还提供 CSS 预处理器的所有重要功能。所有库都支持 auto-prefixing,JavaScript 原生提供了大多数其他功能,如 mixins(函数)和变量。

我知道你在想什么:“Max,你也可以通过其他工具或严格的流程或大量的培训来获得这些好处。是什么让 CSS-in-JS 变得特别?”

CSS-in-JS 将所有这些好处结合到一个好用的包中并强制执行它们。它引导我走向成功的关键:做正确的事情很容易,做错事很难(甚至不可能)。

谁在使用 CSS-in-JS?

有上千家公司在生产中使用 CSS-in-JS,包括 Reddit、Patreon、Target, Atlassian、Vogue、GitHub、Coinbase 等等。(包括本网站)

CSS-in-JS 适合你吗?

如果你使用 JavaScript 框架来构建包含组件的 Web 应用程序,那么 CSS-in-JS 可能非常适合。特别是你所在团队中每个人都理解基本的 JavaScript。

如果你不确定如何开始,我会建议你尝试一下 CSS-in-JS,亲眼看看它有多好!✌️

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 code秘密花园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CSS Modules VS. styled-components,哪个才是解决 CSS 不足之处的更好方案?
CSS 是一门标记语言,用于元素布局及样式定义。它存在很多问题,例如书写效率和维护性低;缺乏模块机制、变量、函数等概念;容易出现全局样式污染和样式冲突等。目前前端社区存在很多解决上述问题的方案,主要包括 CSS Module以及 styled-components💅(CSS-in-JS 的代表)。 styled-components 在我的日常开发中用得很多,并且用得非常顺手。它的 CSS-in-JS 思想以及通过 props 来动态更改样式跟 React 的开发理念一脉相承,并且还基于 React Con
玖柒的小窝
2021/10/31
8.1K1
CSS Modules VS. styled-components,哪个才是解决 CSS 不足之处的更好方案?
为什么和 CSS-in-JS 说拜拜
本文是由 Emotion 的第二大活跃维护者 Sam 分享,本文第一人称都指的是 Sam。Emotion 是一个广泛流行的 CSS-in-JS 库,用于React。文文章 Sam 会带大家深入探讨 CSS-in-JS 最初吸引人的原因,以及为什么作者(以及Spot团队的其他成员)决定放弃它。
前端小智@大迁世界
2022/11/30
2.4K0
为什么和 CSS-in-JS 说拜拜
Emotion库维护者解释为什么Spot公司不再使用运行时CSS-in-JS
Sam Magura 是 Spot 的软件工程师,也是活跃的 Emotion 库维护者。最近,他详细解释了 Spot 公司为什么放弃运行时 CSS-in-JS 库 Emotion,而选择了 Sass 模块——运行时开销、负载开销和服务器端渲染问题导致了较差的用户体验。
深度学习与Python
2022/11/28
7720
CSS样式组件:为什么你应该(或不应该)使用它
选择完全适合您需求的样式模块就像选择 JavaScript 框架一样困难。您的最终选择可能取决于项目的规模、公司现有的堆栈或仅仅是品味问题。如果 React 是您的框架,那么样式组件就不能从您的可能性列表中排除。Bas Bastiaans - PanCompany 的前端开发人员 - 最近从“更少”组件迁移到样式化组件,并分享了他之后经历的好处。接下来,他还讨论了在采取他所做的迁移步骤之前必须考虑的一些谈话要点。
哈德森sir
2024/05/16
1500
CSS-in-JS,向Web组件化再迈一大步 | 洞见
简介 CSS-in-JS是什么,看到这个词就能大概猜到是在JavaScript里写CSS,那为什么要在JavaScript里写CSS呢,像之前一样写在css文件里哪里不好么? (图片来自:http:/
ThoughtWorks
2018/04/17
1K0
CSS-in-JS,向Web组件化再迈一大步 | 洞见
react css组织的另一种选择styled-components
本文介绍了如何使用 styled-components 库来编写具有良好视觉效果和可维护性的 CSS 组件,同时介绍了该库的一些特性。
IMWeb前端团队
2018/01/08
9370
【React】:CSS 模块化
以下是 CSS Guidelines 中的一个示例,这个示例展示了一个问题:除了写这段代码的人,没有人知道这段代码是干什么的。
WEBJ2EE
2020/07/14
1.3K0
【React】:CSS 模块化
React基础(10)-React中编写样式CSS(styled-components)
React是一个构建用户界面的js库,从UI=render()这个等式中就很好的映射了这一点,UI的显示取决于等式右边的render函数的返回值.
itclanCoder
2020/10/17
4.5K0
JavaScript 有趣的冷知识:tagged template literals
不晓得大家在利用 React.js 开发网页的时候有没有用过一个很好用的组件叫 styled-components,styled-components 是一个用来产生元素样式的组件,让你可以在 JSX 中编写 css 达到 CSS-IN-JS 的技巧,讲了这么多就是因为 styled-component 的官方文件有说了这句话:
前端小智@大迁世界
2022/03/22
2560
JavaScript 有趣的冷知识:tagged template literals
styled-components不完全手册
大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder
前端柒八九
2024/03/25
1480
styled-components不完全手册
7. 精读《请停止 css-in-js 的行为》
styled-components 利用 ES6 的 tagged template 语法创建 react 纯样式组件。消除了人肉在 dom 和 css 之间做映射和切换的痛苦,并且有大部分编辑器插件的大力支持(语法高亮等)。此外,styled-components 在 ReactNaive 中尤其适用。
黄子毅
2022/03/14
2K0
7. 精读《请停止 css-in-js 的行为》
再见,CSS-in-JS
大家好,我 ssh。在过去的开发中,我一直在用 styled-component 库作为 CSS 的解决方案。它有很多优点,灵活、可复用性强、功能强大、可以接受动态 JS 变量传入组件等等…… 但今天我看到一篇文章,说都是 Spot 团队的人已经决定抛弃 CSS-in-JS 的方案了,因为对他们来说,性能损耗已经远远超过其灵活性的优势了。接下来,我来和大家分享一下这篇Why We're Breaking Up with CSS-in-JS
ssh_晨曦时梦见兮
2023/10/14
5740
再见,CSS-in-JS
谈谈 CSS 预处理器
完整高频题库仓库地址:https://github.com/hzfe/awesome-interview
HZFEStudio
2021/09/26
2.6K1
React 中使用CSS
注意事项: 在正常的css中,比如background-color,box-sizing等属性,在style对象div1中的属性中,必须转换成驼峰法,backgroundColor,boxSizing。而没有连字符的属性,如margin,width等,则在style对象中不变。
grain先森
2019/03/28
1.4K0
5件你可能不知道可以使用 CSS-in-JS 来做的事情
除了传统的 CSS,你还可以使用 内联样式 和 CSS-in-JS 作为 React 应用程序的样式选项。
一墨编程学习
2019/01/02
1.5K0
技术天地 | CSS-in-JS:一个充满争议的技术方案
为了解决传统CSS在现代前端应用开发中遇到的痛点,FreeWheel评估了大量新一代的CSS框架/工具/方案。在本文中,作者以评估过程为线索,介绍了CSS-in-JS的背景、现状、开发特点和趋势。
用户6543014
2020/08/07
2.7K0
技术天地 | CSS-in-JS:一个充满争议的技术方案
React-组件-CSS-In-JS
React组件CSS-in-JS是一种流行的前端开发技术,它将组件的JavaScript逻辑与样式定义结合在一起,以提高代码的可维护性和可重用性。通过CSS-in-JS,开发者可以在组件级别轻松管理样式,而不必担心全局污染或类名冲突。
杨不易呀
2023/09/30
4000
CSS in JS的好与坏
CSS-in-JS是一种技术(technique),而不是一个具体的库实现(library)。简单来说CSS-in-JS就是将应用的CSS样式写在JavaScript文件里面,而不是独立为一些 .css, .scss或者 less之类的文件,这样你就可以在CSS中使用一些属于JS的诸如模块声明,变量定义,函数调用和条件判断等语言特性来提供灵活的可扩展的样式定义。值得一提的是,虽然CSS-in-JS不是一种很新的技术,可是它在国内普及度好像并不是很高,它当初的出现是因为一些 component-based的Web框架(例如React,Vue和Angular)的逐渐流行,使得开发者也想将组件的CSS样式也一块封装到组件中去以解决原生CSS写法的一系列问题。还有就是CSS-in-JS在React社区的热度是最高的,这是因为React本身不会管用户怎么去为组件定义样式的问题,而Vue和Angular都有属于框架自己的一套定义样式的方案。
进击的大葱
2022/08/22
2.5K0
CSS in JS的好与坏
CSS Modules与Styled Components:提升CSS可维护性
CSS Modules和Styled Components都是现代Web开发中用于提升CSS可维护性的解决方案,它们通过不同的方式解决了传统CSS的一些问题,如样式冲突、命名约定和全局作用域。
天涯学馆
2024/08/17
1270
React组件设计实践总结03 - 样式的管理
CSS 是前端开发的重要组成部分,但是它并不完美,本文主要探讨 React 样式管理方面的一些解决方案,目的是实现样式的高度可定制化, 让大型项目的样式代码更容易维护.
_sx_
2019/08/07
7.2K0
React组件设计实践总结03 - 样式的管理
相关推荐
CSS Modules VS. styled-components,哪个才是解决 CSS 不足之处的更好方案?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验