一.前言

相信学过vue与react的小伙伴们应该都知道react使用css是多么麻烦,他没有像vue一样的规定好的样式,没有给css规定的作用域这也就react中一个组件样式会出现干扰另外一个组件样式的情况,就很麻烦。但是react的灵活性,使得写css也有很多的方法,下面让我们去探索吧!

二.编写react中的css的六种方法

1.内联样式

内联样式大家肯定不会陌生,通过style以属性的样式定义在便签内部,只对本标签有效

优点:结构清晰,不会造成污染。

缺点:组件内css代码过多,代码过于耦合。

react中内联样式与原生不同,这里我们不能使用驼峰,font-size 改为fontSize

react行内样式使用rem react中写css_css

 

react行内样式使用rem react中写css_动态添加_02

 2.普通的css写法

普通的css写法,就是在每一个对应的jsx文件导入对应的css文件。

优点:结构层次分明。

缺点:相同的class属性会造成样式污染。

这里注意的是导入css样式使用import导入

react行内样式使用rem react中写css_css_03

 

react行内样式使用rem react中写css_react行内样式使用rem_04

 

react行内样式使用rem react中写css_react行内样式使用rem_05

三.css moudules

css  modules 字面意思就是让css模块化,这样每个组件都会相对独立的使用自己的css文件。

css modules并不是react特有的解决方法,而是webpack环境下使用

react脚手架已经内置css modules

优点:css文件目录清晰,不会污染别的组件

缺点:无法动态的修改css传入的属性

react行内样式使用rem react中写css_配置文件_06

 

react行内样式使用rem react中写css_动态添加_07

 

react行内样式使用rem react中写css_react行内样式使用rem_08

 4.less的编写方法

有的小伙伴可能发现当我们在react编写less属性时没有效果,这是因为没有解析less的插件

其中有两种方法:1.使用npm eject 对webpack进行修改,很明显这不是明智的方法。2.就是使用@craco/craco来进行修改,这里推荐第二种。(这里ant design

安装:yarn add @craco/craco   yarn add craco-less

react行内样式使用rem react中写css_css_09

 修改配置文件:

修改package.json的运行脚本

react行内样式使用rem react中写css_css_10

craco.config.js文件,并修改配置。

react行内样式使用rem react中写css_react行内样式使用rem_11

 效果如下:

react行内样式使用rem react中写css_配置文件_12

 

react行内样式使用rem react中写css_配置文件_13

 5.css in js

看到这里有些小伙伴可能会想到css in js 什么鬼,其实跟jsx一样,css in js 是用js来写css,这也是小编最为推荐的方式。下面让我们来了解一下css in js 的魅力。

依赖安装:yarn add styled-components

在jsx文件中建立对应的style.js

react行内样式使用rem react中写css_react行内样式使用rem_14

 这里我们在styled-components中引入styled,通过styled创建对应的组件。这里我们可以理解我们创建的div相当于一个组件。

在jsx中使用

react行内样式使用rem react中写css_动态添加_15

 项目如下:

react行内样式使用rem react中写css_动态添加_16

 以上只是styled-components的基本操作,下面我们开始进阶操作

动态传入color以及动态修改color

react行内样式使用rem react中写css_react行内样式使用rem_17

 

react行内样式使用rem react中写css_配置文件_18

 效果如下:

react行内样式使用rem react中写css_动态添加_19

点击按钮后: 

react行内样式使用rem react中写css_配置文件_20

 attrs的使用,其目的给div一个默认属性,当没有传入属性时使用默认属性

未传入dColor时:

react行内样式使用rem react中写css_css_21

 效果:

react行内样式使用rem react中写css_css_22

 style-components定制属性主题

当我们构建一个项目时,有时会定制主题这里style-components也可以完成。

首先在根目录index 导入ThemeProvider

react行内样式使用rem react中写css_配置文件_23

 然后在组件中使用

react行内样式使用rem react中写css_配置文件_24

 效果:

react行内样式使用rem react中写css_动态添加_25

 styled-compons也支持属性的继承,这可以大量节约代码

react行内样式使用rem react中写css_css_26

当然styled-compons还有很对的方法希望你们可以继续挖掘。

6.classname库使用

在react中动态添加class大多数会使用三元运算符,这里给大家推荐另外一个库。

react行内样式使用rem react中写css_配置文件_27

 vue中动态添加class是不是很方便

react行内样式使用rem react中写css_配置文件_28

yarn add classnames

 使用classnames

react行内样式使用rem react中写css_react行内样式使用rem_29

 三.结语

使用react就感觉再买一辆车,什么配置都可以按着自己的想法来