CSS-in-JS vs 传统CSS:现代样式方案选择指南

★杨思宇
2025-06-25 19:59
阅读 479

开篇:理解CSS的两种写法风格

开篇:理解CSS的两种写法风格

你有没有发现,网页上的文字可以居中,图片能自动调整大小,颜色和排版还特别有“设计感”?这些,都是CSS在起作用。

但在前端开发的世界里,写CSS的方式也在不断进化。我们今天要聊聊两个常见的样式管理方式:

  • 传统CSS:就是你在<style>标签或者.css文件里写的那些代码。
  • CSS-in-JS:一种把CSS写进JavaScript文件里的新方式,越来越流行。

这篇文章会帮你从零开始认识这两种写法,并通过一个简单项目告诉你它们各自的优缺点,让你在实际使用时知道怎么选。


环境准备:搭建你的第一个本地开发环境(VS Code + HTML 文件)

环境准备:搭建你的第一个本地开发环境(VS Code + HTML 文件)

🛠️ 目标:创建一个基本的HTML页面用于练习CSS与JS。

1. 安装 VS Code

前往官网 https://code.visualstudio.com 下载安装 Visual Studio Code(简称 VS Code),它是一款免费、功能强大的代码编辑器。

2. 创建项目文件夹

新建一个名为 my-css-project 的文件夹,在里面创建两个文件:

my-css-project/
├── index.html
└── styles.css

3. 编写简单的 HTML 结构

index.html 中输入以下内容:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>CSS实战教程</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <h1>你好,样式世界!</h1>
  <button id="btn">点击变色</button>

  <script src="script.js"></script>
</body>
</html>

暂时不需要 script.js,后面我们会用到。

4. 运行你的页面

在 VS Code 安装完后,安装插件 Live Server(可以在扩展商店搜索)。然后右键点击 index.html → “Open with Live Server”,这样你就可以在浏览器中直接查看并实时更新页面。

现在你可以打开浏览器看到页面了。


核心概念对比:什么是传统CSS?CSS-in-JS又是什么?

核心概念对比:什么是传统CSS?CSS-in-JS又是什么?

✅ 传统CSS:样式与结构分离的经典方式

这是最经典也最常被初学者学习的方法:HTML负责结构,CSS负责样式。

示例:给按钮添加背景色和字体加粗

styles.css 文件中加入:

#btn {
  background-color: blue;
  color: white;
  font-weight: bold;
}

刷新浏览器,你会看到按钮是蓝色带白色字、字体加粗。

🟩 优点:

  • 学习门槛低,资料丰富。
  • 可维护性较强(尤其是小项目)。
  • 所有样式统一管理。

🟥 缺点:

  • 随着项目变大容易混乱(比如命名重复)。
  • 难以实现组件级别的动态样式控制(比如点击按钮改变颜色需要操作DOM)。

✨ CSS-in-JS:更现代化的写法

这是一种把样式写在 JavaScript 文件里的新方式,尤其适合使用 React、Vue 或其他组件化框架的项目。

常见库包括:

  • styled-components(React常用)
  • emotion
  • JSS
  • Aphrodite

示例:用内联对象定义样式

先来试试最基础的写法,不依赖任何库,纯JavaScript实现样式注入。

修改你的页面,加上 <style id="dynamicStyle"> 标签:

<style id="dynamicStyle"></style>

然后在根目录下新建 script.js 文件,写入如下代码:

// 获取 style 标签
const styleTag = document.getElementById("dynamicStyle");

// 构造一段 CSS 字符串
const dynamicCSS = `
#btn {
  background-color: purple;
  color: yellow;
  border-radius: 5px;
  padding: 10px 20px;
}
`;

// 把样式插入页面
styleTag.innerHTML = dynamicCSS;

// 添加交互:点击后修改样式
document.getElementById("btn").addEventListener("click", () => {
  styleTag.innerHTML = `
    #btn {
      background-color: green;
      color: orange;
    }
  `;
});

点击一下按钮,你会发现按钮变了颜色!

💡 这种方式就是在 JS 中“写CSS”,属于 CSS-in-JS 思想的简化实现

当然,生产中我们通常会借助一些库来更好地组织代码。


实战项目:做一个“可变色主题切换”按钮

这个项目将帮助你亲身体验传统CSS和CSS-in-JS的用法区别。

第一步:传统CSS方案实现

styles.css 中定义两套按钮样式:

.dark-theme {
  background-color: black;
  color: white;
}

.light-theme {
  background-color: white;
  color: black;
  border: 1px solid #ccc;
}

并在 index.html 按钮上设置默认类:

<button id="btn" class="dark-theme">切换主题</button>

script.js 中写入切换逻辑:

const btn = document.getElementById("btn");

btn.addEventListener("click", () => {
  if (btn.classList.contains("dark-theme")) {
    btn.classList.remove("dark-theme");
    btn.classList.add("light-theme");
  } else {
    btn.classList.remove("light-theme");
    btn.classList.add("dark-theme");
  }
});

✅ 成果:点击按钮切换深色/浅色。


第二步:尝试 CSS-in-JS 写法

这次我们不在外部 .css 文件里定义样式了,而是全部放在JS中。

首先清空 styles.css,再删除 <link rel="stylesheet"... 的那一行。

script.js 中改写为以下内容:

const styleTag = document.getElementById("dynamicStyle");

function applyTheme(theme = "dark") {
  let css = "";
  if (theme === "dark") {
    css = `
    #btn {
      background-color: darkblue;
      color: white;
      padding: 10px 20px;
      border-radius: 8px;
    }`;
  } else {
    css = `
    #btn {
      background-color: lightgray;
      color: black;
      padding: 10px 20px;
      border-radius: 8px;
    }`;
  }
  styleTag.innerHTML = css;
}

applyTheme(); // 初始加载暗色主题

document.getElementById("btn").addEventListener("click", () => {
  const isDark = styleTag.innerHTML.includes("darkblue");
  applyTheme(isDark ? "light" : "dark");
});

🎯 效果完全一样,但样式全部由JS动态生成!


哪个更好?来看看它们的区别

特点 传统CSS CSS-in-JS
学习难度 简单直观 略微复杂(涉及JS)
动态能力 弱(需手动操作class) 强(样式可编程)
复用程度 一般 更高,可在函数中封装
适用范围 简单项目或静态页 动态、组件化项目(如React)
工具支持 浏览器原生支持 需引入库

新手常见问题解答 💬

❓Q1:为什么推荐使用 CSS-in-JS?

  • 因为它可以动态生成样式,方便根据用户行为或状态变化进行实时样式更改。
  • 更适合组件式开发,避免全局样式污染。

❓Q2:学哪个好呢?

  • 对于刚入门的同学建议优先掌握传统 CSS,打好基础;
  • 如果你想进一步深入 React / Vue 等现代框架,强烈建议学习 CSS-in-JS,未来更有发展潜力。

❓Q3:会不会写得乱?

  • 如果没有规范,确实容易出错;
  • 推荐配合工具如 Emotion(React中)或 Tailwind JIT 来辅助书写。

下一步学习建议:逐步构建你的技能树 🧱

📝 入门路线图

  1. 第一阶段:掌握传统CSS

    • 使用 DevTools 检查和调试样式
    • 熟悉盒模型(margin, padding, border等)
    • 掌握布局方法:flex、grid、position
  2. 第二阶段:学会使用变量和模块化

    • 学习使用 CSS 自定义属性(变量)
    • 尝试使用 BEM/CSS Modules 方法组织大型项目中的样式
  3. 第三阶段:尝试使用CSS-in-JS库

    • 在 React/Vue 项目中引入 styled-components 或 Emotion
    • 封装可复用的“带样式的组件”
    • 体验如何用JS逻辑决定样式(如动画条件渲染)

小结

用户交互流程图-1

在这篇文章中,我们带你了解了两种主流的样式管理方式:

  • 传统CSS:熟悉、易读、适合初学者;
  • CSS-in-JS:灵活强大,适应现代前端需求。

不论你选择哪条路,记住一点:

代码是给人看的,偶尔给机器跑一下。

所以写出清晰、整洁、易于维护的代码才是终极目标。如果你希望继续挑战自己,我建议你尝试在一个小型项目中结合两者使用,看看哪种风格更适合你!

接下来,你可以试着做一两个带交互的小页面,比如“待办清单”、“天气预报卡片”、“个人主页”——在实战中进步最快哦 😄!


附录:本文完整代码整理地址(GitHub Gist 或 CodePen)请自行补充
🔍 关键词搜索建议:intro to CSS-in-JS for beginners

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝