我最近对CSS模块很感兴趣。如果你还没有听说过,这篇文章是给你的。我们将关注该项目及其目标和目的。如果你感兴趣,请继续关注,因为下一篇文章将介绍如何开始使用这个想法。如果您希望实现或提高使用率,第3部分将介绍在React环境中使用它们。
文章系列:
1. 什么是CSS模块,我们为什么需要它们?(你在这里!)
2. CSS模块入门
3. React+CSS模块=
什么是CSS模块?
根据回购协议,CSS模块包括:
默认情况下,所有类名和动画名称的作用域都在本地的CSS文件。
因此,CSS模块不是官方规范或浏览器中的实现,而是构建步骤中的一个过程(在Webpack或Browserify的帮助下),该过程将更改类名和选择器的作用域(即有点像命名空间)。
这看起来像什么?为什么?我们将在稍后介绍。首先,请记住HTML和CSS通常是如何工作的。类应用于HTML:
An example heading
该类采用CSS样式:
.title {
background-color: red;
}
只要CSS应用于HTML文档,<h1>的背景将是红色的。我们不需要处理CSS或HTML。浏览器可以理解这两种文件格式。
CSS模块采用不同的方法。我们需要在JavaScript文件中编写所有标记,而不是编写纯HTML,比如index.js。下面是一个如何工作的示例(稍后我们将查看一个更现实的示例):
import styles from "./styles.css";
element.innerHTML =
`
An example heading
`;
在我们的构建步骤中,编译器将搜索这些样式。css文件,然后查看我们编写的JavaScript,并通过styles.title访问.title类。然后,我们的构建步骤将把这两个东西处理成新的、单独的HTML和CSS文件,用一个新的字符串替换HTML类和CSS选择器类。
我们生成的HTML可能如下所示:
An example heading
我们生成的CSS可能如下所示:
._styles__title_309571057 {
background-color: red;
}
class属性和selector.title完全消失,取而代之的是这个全新的字符串;我们的原始CSS根本没有提供给浏览器。
正如Kitty Giraudel在关于该主题的教程中所说:
[类]是动态生成的、唯一的,并映射到正确的样式。
这就是样式作用域的含义。它们的作用域是特定的模板。如果我们有按钮。css文件,我们只能将其导入到按钮中。js模板和其中的.btn类对于其他模板(例如forms.js)是不可访问的,除非我们也将其专门导入到那里。
为什么我们要用CSS和HTML来做这件事?我们到底为什么要这样做?
为什么要使用CSS模块?
使用CSS模块,可以保证单个组件的所有样式:
住在一个地方
仅适用于该组件,不适用于其他组件
此外,任何组件都可以具有真正的依赖关系,例如:
import buttons from "./buttons.css";
import padding from "./padding.css";
element.innerHTML = `