Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React 播客专栏 Vol.12|告别样式混乱!两种方式让你的 React 样式更专业

React 播客专栏 Vol.12|告别样式混乱!两种方式让你的 React 样式更专业

作者头像
前端达人
发布于 2025-05-18 02:05:00
发布于 2025-05-18 02:05:00
7600
代码可运行
举报
文章被收录于专栏:前端达人前端达人
运行总次数:0
代码可运行

👋 欢迎回到《前端达人 · React 播客书单》第 12 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听

写了那么多组件,是不是也想让它们“好看起来”?今天我们带你用两种新方式,告别样式混乱,一步步走上前端组件化样式的正道!

✅ 今日学习目标一览

📌 本期聚焦:

  • 解决 Plain CSS 带来的样式冲突问题
  • 学会使用 CSS Modules 实现组件级样式隔离
  • 初步掌握 CSS-in-JS,体验 Emotion 的动态样式魅力

🧩 Plain CSS 为何不够用?

Plain CSS 就像“群发短信”,谁都能收到,但没人知道到底发给谁。

  • 所有样式默认是全局的
  • 类名一重复,样式就出事

于是,我们需要 “局部样式” 的能力,让每个组件都穿上“独立制服”。

🔐 CSS Modules:给每个组件一个独立小空间

CSS Modules 是什么?

  • 一种可以给每个组件自动生成唯一类名的技术
  • 样式不会全局污染,安全感 MAX!

✅ 只需给文件起名为 .module.css,CRA 项目中就能直接用,不需配置。

✍️ CSS Modules 怎么用?

  1. 创建样式文件(文件名要叫 xxx.module.css):
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* Alert.module.css */
.container { padding: 12px; }
.warning { background-color: yellow; }
  1. 在组件中导入样式:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import styles from './Alert.module.css';
  1. 使用 className 引用:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div className={`${styles.container} ${styles.warning}`}>
  Hello World
</div>

✅ 类名实际会被变成一串 hash,彻底杜绝重复!

📊 CSS Modules 有啥优缺点?

✅ 优点

⚠️ 缺点

样式隔离,告别类名冲突

样式和逻辑分离,查看时需要切文件

保留传统 CSS 写法,上手容易

打包时可能包含没用到的样式,略有浪费

CRA 中开箱即用

组件多时 CSS 文件多,结构稍繁琐

🎨 CSS-in-JS:样式不再漂泊,直接写在 JS 里!

CSS-in-JS 是什么?

  • 用 JavaScript 的方式写 CSS!
  • 不用跳文件,不用记类名,全靠组件内部管理
  • 代表库:Emotion、styled-components

这期我们聚焦 Emotion,它灵活、高性能,社区支持度也很高。

✨ Emotion 入门:css 属性 + 模板字符串

要点如下:

  • 在组件顶部加注释:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** @jsxImportSource @emotion/react */
  • 使用 Emotion 提供的 css 函数:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { css } from '@emotion/react';

<span
  css={css`
    font-weight: bold;
    color: blue;
  `}
>
  Emotion 来咯!
</span>

✅ 语法像写 CSS,又能用变量、函数,写起来很香!

🔁 Emotion 最大的魔法:动态样式

想根据 props 改变颜色?一句话搞定!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div
  css={css`
    color: ${isWarning ? "#e7650f" : "#118da0"};
    background: ${isWarning ? "#f3e8da" : "#dcf1f3"};
  `}
>
  动态样式安排!
</div>

💡 样式里用 ${} 嵌 JS 变量,配合状态管理,组件随心换“衣服”!

🔄 Emotion 样式是怎么生效的?

跟 CSS Modules 的构建时不同,Emotion 是运行时生成样式

  • 运行时解析模板字符串
  • 动态生成带作用域的 class
  • 自动挂载进 HTML <style>

🚧 注意:Emotion 需要你手动安装依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install @emotion/react

⚖️ Emotion 的优缺点速查

✨ 优点

⚠️ 缺点

支持 JS 逻辑、状态驱动样式

运行时生成样式,有轻微性能消耗

样式与组件贴近,阅读维护更方便

初学者不太习惯在 JS 中写 CSS

无样式冲突问题,作用域自动隔离

样式混入 JS 文件,可能让组件体积变大

🧠 总结:CSS Modules vs Emotion

维度

CSS Modules

Emotion (CSS-in-JS)

样式作用域

构建时隔离

运行时生成独立类名

写法风格

标准 CSS 文件分离写法

样式和组件代码共存

动态能力

弱,需要配合类名逻辑处理

强,样式中直接嵌 JS 表达式

上手门槛

低,类似传统 CSS 开发

稍高,需要熟悉 JS + 模板字符串写法

性能

构建时生成,无运行时开销

运行时处理,有一定性能成本

🎯 选择建议:

  • 偏向样式分离:👉 选择 CSS Modules
  • 偏向逻辑融合、组件高度内聚:👉 Emotion 更合适!

#React #React播客 #前端达人 #前端播客 #CSS

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

本文分享自 前端达人 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React 播客专栏 Vol.18|React 第二阶段复习 · 样式与 Hooks 全面整合
今天,我们将对第二阶段的内容进行系统复盘,重点是两个关键词:样式 与 Hooks。
前端达人
2025/06/09
670
React 播客专栏 Vol.18|React 第二阶段复习 · 样式与 Hooks 全面整合
React 播客专栏 Vol.13|样式不难搞,Tailwind CSS 与 SVG 实战入门
👋 欢迎回到《前端达人 · React 播客书单》第 13 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听
前端达人
2025/05/19
1220
React 播客专栏 Vol.13|样式不难搞,Tailwind CSS 与 SVG 实战入门
React 播客专栏 Vol.11|Plain CSS 如何在 React 中优雅登场?
👋 欢迎回到《前端达人 · React 播客书单》第 11 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听
前端达人
2025/05/15
530
React 播客专栏 Vol.11|Plain CSS 如何在 React 中优雅登场?
为什么和 CSS-in-JS 说拜拜
本文是由 Emotion 的第二大活跃维护者 Sam 分享,本文第一人称都指的是 Sam。Emotion 是一个广泛流行的 CSS-in-JS 库,用于React。文文章 Sam 会带大家深入探讨 CSS-in-JS 最初吸引人的原因,以及为什么作者(以及Spot团队的其他成员)决定放弃它。
前端小智@大迁世界
2022/11/30
2.5K0
为什么和 CSS-in-JS 说拜拜
Emotion库维护者解释为什么Spot公司不再使用运行时CSS-in-JS
Sam Magura 是 Spot 的软件工程师,也是活跃的 Emotion 库维护者。最近,他详细解释了 Spot 公司为什么放弃运行时 CSS-in-JS 库 Emotion,而选择了 Sass 模块——运行时开销、负载开销和服务器端渲染问题导致了较差的用户体验。
深度学习与Python
2022/11/28
8080
React 播客专栏 Vol.10|你以为是复习?其实是 TypeScript + React 真正上手的开始!
👋 欢迎回到《前端达人 · React 播客书单》第 10 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听
前端达人
2025/05/14
470
React 播客专栏 Vol.10|你以为是复习?其实是 TypeScript + React 真正上手的开始!
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.2K1
CSS Modules VS. styled-components,哪个才是解决 CSS 不足之处的更好方案?
技术天地 | CSS-in-JS:一个充满争议的技术方案
为了解决传统CSS在现代前端应用开发中遇到的痛点,FreeWheel评估了大量新一代的CSS框架/工具/方案。在本文中,作者以评估过程为线索,介绍了CSS-in-JS的背景、现状、开发特点和趋势。
用户6543014
2020/08/07
2.8K0
技术天地 | CSS-in-JS:一个充满争议的技术方案
React 播客专栏 Vol.9|React + TypeScript 项目该怎么起步?从 CRA 到配置全流程
👋 欢迎回到《前端达人 · React 播客书单》第 9 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听
前端达人
2025/05/13
1260
React 播客专栏 Vol.9|React + TypeScript 项目该怎么起步?从 CRA 到配置全流程
再见,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
7790
再见,CSS-in-JS
React基础(10)-React中编写样式CSS(styled-components)
React是一个构建用户界面的js库,从UI=render()这个等式中就很好的映射了这一点,UI的显示取决于等式右边的render函数的返回值.
itclanCoder
2020/10/17
4.6K0
在React中引用CSS方式及写法大全
安装node-sass就可以,因为有个node-sass,scss文件才能在node环境上编译成css文件。 然后编写scss文件
我只会写Bug啊
2023/12/25
4030
React 播客专栏 Vol.16|useRef 和 useMemo 是干嘛的?
今天我们来聊聊两个非常实用但经常被误解的 React Hook:useRef 和 useMemo。
前端达人
2025/05/27
970
React 播客专栏 Vol.16|useRef 和 useMemo 是干嘛的?
CSS闯关指南:从手写地狱到“类”积木之旅|得物技术
在Web开发网页设计中,CSS(层叠样式表)扮演着至关重要的角色,它用于控制网页的布局、外观和视觉效果。CSS不仅可以美化网页的视觉表现,还可以提高网页的可访问性、可维护性和响应式设计。在我们进行网页开发的时候,CSS是必不可少的一个环节。但是在早期的纯手写CSS阶段时会存在很多的痛点,这些痛点催生了 CSS 预处理工具(如 Sass/Less)和 CSS-in-JS 方案的兴起,进入工具曙光时代,但它们本质上仍未能突破"手动编写样式规则"的范式。直到原子化 CSS 理念的回归——通过预定义的实用类(Utility Classes)组合样式,配合智能化的工具链,为解决传统 CSS 困境提供了新的思路。
得物技术
2025/05/26
1640
CSS闯关指南:从手写地狱到“类”积木之旅|得物技术
我们如何使用 Next.js 将 React 加载时间缩短 70%
Causal 是一个多维电子表格,能够处理从基本算术一直到 10 亿次计算的金融模型的一切。Causal 的前端是在 2019 年用 Create React App(CRA)构建的,它为我们提供了很好的服务——它只需要最小的初始设置,并允许快速迭代。随着我们的客户规模和复杂性的增加,性能变得越来越受到关注,我们达到了 CRA 设计支持的极限。最重要的是,CRA 本身并不支持跨多页应用程序的路由分割,所以我们的页面加载时间慢得令人沮丧。为了解决这些问题,我们改用 Next.js,将初始页面加载时间减少了 70%,并将开发者的体验提升到一个新的水平。
深度学习与Python
2022/11/28
5K0
CSS Modules与Styled Components:提升CSS可维护性
CSS Modules和Styled Components都是现代Web开发中用于提升CSS可维护性的解决方案,它们通过不同的方式解决了传统CSS的一些问题,如样式冲突、命名约定和全局作用域。
天涯学馆
2024/08/17
1730
在React项目中使用CSS Module
就在前几天,写了一篇CSS 20大酷刑,然后看后台数据,反馈还是挺好的,看来大家还是对这个「最熟悉的陌生人」,有种「食之无味,弃之可惜」的感觉。在上篇中,我们就说过,由于CSS庞杂的体系和令人眼花缭乱的属性,总是让人「望而却步」。但是,它也是我们翻身农奴做主人,势必要翻过的四座大山之一 CSS/Html/JavaScript/WebAsssembly。(自认为,WebAssembly也会成为一座我们需要逾越的大山,有关它的介绍,可以看我们之前写的浏览器第四种语言-WebAssembly)
前端柒八九
2023/09/10
1.8K0
在React项目中使用CSS Module
你了解 JSX,那你了解 StyleX 么?
近日,Meta开源了一款「CSS-in-JS库」 —— StyleX。看命名方式,Style - X是不是有点像JS - X,他们有关系么?当然有。
公众号@魔术师卡颂
2023/12/13
4670
你了解 JSX,那你了解 StyleX 么?
【React】:CSS 模块化
以下是 CSS Guidelines 中的一个示例,这个示例展示了一个问题:除了写这段代码的人,没有人知道这段代码是干什么的。
WEBJ2EE
2020/07/14
1.4K0
【React】:CSS 模块化
手写 css-modules 来深入理解它的原理
我们知道,浏览器里的 JS 之前没有模块的概念,都是通过不同的全局变量(命名空间)来隔离,后来出现了 AMD、CMD、CommonJS、ESM 等规范。
神说要有光zxg
2022/06/06
5670
手写 css-modules 来深入理解它的原理
推荐阅读
相关推荐
React 播客专栏 Vol.18|React 第二阶段复习 · 样式与 Hooks 全面整合
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档