CSS-in-JS vs 传统CSS:现代样式方案选择指南(面向零基础初学者)

CD还没发
2025-06-25 05:59
阅读 328

开篇:什么是CSS-in-JS?它和传统CSS有什么不同?

开篇:什么是CSS-in-JS?它和传统CSS有什么不同?

在开发网页的时候,我们通常会用HTML 写结构、用CSS 来控制样式。而传统的做法是把 HTML 和 CSS 分开写,比如:

<!-- index.html -->
<div class="header">欢迎来到我的网站</div>
/* style.css */
.header {
  color: blue;
}

但在近年来,前端技术发展迅速,出现了一种新的写法:CSS-in-JS。顾名思义,就是把 CSS 样式直接写进 JavaScript 文件里。这种方式让样式和组件紧密结合,也更容易实现一些高级功能。

那么问题来了:
👉 我该用哪种方式来写样式呢?是继续用传统 CSS,还是试试 CSS-in-JS 呢?

本文将一步步带你了解这两个技术,让你从零开始上手,并通过一个小项目对比它们的使用方式和优缺点。


环境准备:搭建一个简单的开发环境

环境准备:搭建一个简单的开发环境

1. 安装 Node.js 和 npm

我们要先安装 Node.js,这是运行 JavaScript 的运行环境。npm 是 Node.js 自带的包管理器,用来安装各种工具。

安装完成后,在命令行中输入以下命令检查是否安装成功:

node -v
npm -v

你应该能看到两个版本号,说明安装成功了!

2. 创建项目文件夹

新建一个空文件夹,比如 my-styling-project,然后进入这个文件夹,运行:

npm init -y

这会创建一个 package.json 文件,记录你的项目信息。

3. 安装 React(为了演示 CSS-in-JS 示例)

我们以最流行的 CSS-in-JS 库之一 styled-components 为例,因此需要一个 React 环境。

安装 React:

npm install react react-dom

再安装 styled-components:

npm install styled-components

现在我们的环境就准备好了,接下来就可以动手写代码啦!


核心概念:用大白话解释关键术语

核心概念:用大白话解释关键术语

1. 什么是传统 CSS?

就是你以前学过的那种写法:

  • 单独的 .css 文件
  • 通过 class 或 id 给 HTML 元素添加样式
  • 适合静态页面或小型项目

优点:

  • 学习成本低
  • 浏览器兼容性好
  • 易调试

缺点:

  • 模块化不够强
  • 大项目时容易命名冲突
  • 不方便动态修改样式

2. 什么是 CSS-in-JS?

是一种“把 CSS 写进 JS”的新方法,特别是在 React 项目中非常流行。

常见库有:

  • styled-components(我们将用它做例子)
  • emotion
  • glamorous

优点:

  • 样式和组件在一起,结构更清晰
  • 支持动态样式(比如根据用户操作改变颜色)
  • 自动处理 class 名,避免冲突

缺点:

  • 初期学习曲线略陡
  • 编译后性能可能稍差(不过影响不大)

举例对比一下

假设我们要做一个蓝色背景的文字框,来看两种写法的区别:

✅ 传统 CSS:

<!-- App.html -->
<div class="box">这是一个盒子</div>
/* style.css */
.box {
  background-color: lightblue;
  padding: 10px;
  font-size: 18px;
}

🌟 CSS-in-JS(使用 styled-components):

import styled from 'styled-components';

const Box = styled.div`
  background-color: lightblue;
  padding: 10px;
  font-size: 18px;
`;

function App() {
  return <Box>这是一个盒子</Box>;
}

可以看到,样式直接写在 JS 文件中,而且可以直接当成组件使用 <Box>,是不是感觉很酷?


实战项目:用两种方式实现同一个小项目

实战项目:用两种方式实现同一个小项目

目标:创建一个按钮组件,点击后按钮文字变成红色。

项目结构示意:

my-styling-project/
├── index.html
├── index.js
├── style.css     ← 传统CSS
└── components/   ← 存放React组件和CSS-in-JS样式
    └── Button.js

第一步:传统 CSS 方式实现按钮

1. HTML 文件内容 (index.html):

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8" />
  <title>CSS 实践</title>
  <link rel="stylesheet" href="style.css" />
</head>
<body>
  <div id="root"></div>
  <script src="./index.js"></script>
</body>
</html>

2. JS 文件内容 (index.js):

移动端适配方案-2

document.getElementById('root').innerHTML = `
  <button class="btn">点我变红</button>
`;

document.querySelector('.btn').addEventListener('click', function () {
  this.style.color = 'red';
});

3. CSS 文件内容 (style.css):

.btn {
  background-color: lightgreen;
  padding: 10px 20px;
  border: none;
  font-size: 16px;
  cursor: pointer;
}

✅ 运行效果:打开浏览器访问 index.html,点击按钮文字变红。


第二步:CSS-in-JS 方式实现按钮(使用 styled-components)

1. 创建组件文件 (components/Button.js):

import styled from 'styled-components';

// 用JS定义样式
const StyledButton = styled.button`
  background-color: lightgreen;
  padding: 10px 20px;
  border: none;
  font-size: 16px;
  cursor: pointer;
  color: ${props => props.isRed ? 'red' : 'black'};
`;

function Button({ isRed, onClick }) {
  return (
    <StyledButton isRed={isRed} onClick={onClick}>
      点我变红
    </StyledButton>
  );
}

export default Button;

2. 修改主入口 JS 文件 (index.js):

import React from 'react';
import ReactDOM from 'react-dom/client';
import Button from './components/Button';

function App() {
  const [isRed, setIsRed] = React.useState(false);

  return (
    <Button
      isRed={isRed}
      onClick={() => setIsRed(true)}
    />
  );
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);

✅ 运行效果:按钮默认黑色,点击之后变红。

💡 小提示:如果你没有设置好 React 环境(比如没有 Webpack),可以用在线平台 CodeSandbox 快速尝试上面代码。


新手常见问题解答

前端开发工具界面-1

❓ Q1:为什么用 CSS-in-JS?传统 CSS 不好吗?

  • 如果你是做一个小型页面,或者只是想练手,那传统 CSS 完全够用了。
  • 如果你是做一个大型 React 项目,CSS-in-JS 有更好的模块化能力和样式可维护性。

❓ Q2:CSS-in-JS 是不是比传统 CSS 更快?

不一定哦。CSS-in-JS 在运行时会“生成”样式,所以有时候加载会慢一点点。不过对于大多数项目来说,这种差别可以忽略不计。

❓ Q3:CSS-in-JS 会影响 SEO 吗?

不会。搜索引擎主要看 HTML 内容和结构,样式对 SEO 影响极小。

❓ Q4:我要不要马上转 CSS-in-JS?

建议先掌握传统 CSS 再学习 CSS-in-JS。打牢基础,后面升级更快!


学习建议:下一步怎么学?

🔹 1. 推荐学习路线图

阶段 内容
初级 学 HTML + CSS 基础,能做出简单网页
中级 学 JavaScript,能写出交互逻辑
高级 学 React 框架,尝试 CSS-in-JS 技术
进阶 研究 Webpack、Babel 等构建工具

🔹 2. 学习资源推荐

🔹 3. 动手练习建议

  • 写一个个人简历页,尝试用两种方式写样式,比较感受
  • 参考 Ant Design 组件库,看看别人是怎么封装组件样式的
  • 用 CodeSandbox 搭建一个 React + styled-components 的小 Demo

总结:你该如何选择?

使用场景 推荐方式
初学者入门 传统 CSS
静态网站展示 传统 CSS
React 项目开发 CSS-in-JS(如 styled-components)
团队协作开发 CSS-in-JS(减少命名冲突)
想追求更好的工程规范 CSS-in-JS

🎉 恭喜你完成了《CSS-in-JS vs 传统CSS》的初学指南!希望这篇文章能帮你建立清晰的认知,也能作为你进一步学习的起点。别忘了多写代码,多练才是王道!

如果你觉得这篇文章有用,也可以分享给身边正在学习前端的朋友 👇💬

评论 0

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