问题描述

  • 当不同组件中的css规则,存在冲突时,高优先级的样式,就会覆盖低优先级的样式,示例如下:
  • 目录结构
    React 学习笔记 —— css 样式的模块化_react
  • 样式冲突
    React 学习笔记 —— css 样式的模块化_React_02
    React 学习笔记 —— css 样式的模块化_react_03
  • Welcome 组件后引入,因此覆盖Hello组件的样式
    React 学习笔记 —— css 样式的模块化_react_04
  • 如下
    React 学习笔记 —— css 样式的模块化_react_05
  • 当组件越来越多的时候,我们当然不想组件之间产生干扰,看如下两种解决方案

css预处理工具(更常用)

  • 通过给样式加上区分组件的前缀,避免样式的冲突
.hello {
	h1 {
		background-color: tomato;
	}
}
.welcome {
	h1 {
		background-color: gold
	}
}

/* 会被翻译成这样 */

.hello h1 {
	background-color: tomato;
}
.welcome h1 {
	background-color: tomato;
}
  • 再给组件加上类名
    React 学习笔记 —— css 样式的模块化_react_06

    React 学习笔记 —— css 样式的模块化_react_07

css 模块化

  • 首先需要将样式文件后缀修改为 .module.css
    React 学习笔记 —— css 样式的模块化_React_08

  • 样式如下
    React 学习笔记 —— css 样式的模块化_React_09
    React 学习笔记 —— css 样式的模块化_React_10

  • 引入时
    React 学习笔记 —— css 样式的模块化_react_11
    React 学习笔记 —— css 样式的模块化_react_12

  • 效果如下
    React 学习笔记 —— css 样式的模块化_React_13