React学习日记(样式篇)

133 阅读2分钟

react项目当前常用的编写样式的方式分别是行内样式、外部样式、CSS-In-JS、Atom CSS

1、行内样式

<div style={{color: red;}}>标题</div>

优点

1、样式不会和其他组件冲突
2、可以读取state

缺点

1、必须使用驼峰语法
2、样式没有代码提示
3、样式数量上升后,代码混乱
4、无法编写伪类、伪元素

2、外部样式

// a.module.css ,通过在文件名加上module可以起到限制作用域的效果,类似Vue的scoped
.title {
    color: red;
}

// HelloWorld
import style from './a.module.css'
<div className={ style.title }>标题</div>

优点

1、方便维护
2、可以使用预处理scss、less

缺点

1、类名不能使用连字符
2、必须style.XXX使用
3、不能动态修改样式

3、CSS-In-JS

定义:“CSS-in-JS” 是指一种模式,其中 CSS 由 JavaScript 生成而不是在外部文件中定义

常见的库:

  • styled-components
  • emotion
  • glamorous

styled-components

styled-components的本质是通过函数的调用(不使用括号,使用``),最终创建出一个组件:

  • 这个组件会被自动添加上一个不重复的class;

  • styled-components会给该class添加相关的样式;

    import styled from 'style-components' const Wrap = styled.div color: red;

    标题

支持类似于CSS预处理器一样的样式嵌套:

  • 支持直接子代选择器或后代选择器,并且直接编写样式;
  • 可以通过&符号获取当前元素;
  • 直接伪类选择器、伪元素等;

常用特性:

1、获取props

const Wrap = styled.div`
    color: ${porps => props.color};
`

<Wrap color="red">标题</Wrap>

2、设置attrs

const Wrap = styled.div.attrs({
    id: 'wrap',
    'data-type': 'wrap'})`
    color: red;
`

3、继承

const CusButton = styled.div`
  background: #000;
`

const CusPrimaryButton = styled(CusButton)`
  font-size: 20px;
`

<CusPrimaryButton>按钮</CusPrimaryButton>

4、设置主题

// App.js
import { ThemeProvider } from 'styled-components'
import HelloWorld from './components/HelloWorld'
<ThemeProvider theme={{color: 'orange'}}>
    <HelloWorld></HelloWorld>
</ThemeProvider>// HelloWorld
import styled from 'styled-components'
const CusButton = styled.div`  color: ${props => props.theme.color};  background: #000;`<CusButton>按钮</CusButton>

4、Atom CSS

将很多可重复使用的样式提取出来,放在一个公共的css文件中,通过类名的方式去引用样式,减少各个文件内的css代码量。

比较有名的框架 Tailwind

具体配置可以参考

在react脚手架中使用Tailwind CSS (入门)_qq_48557089的博客-CSDN博客_react tailwind

优点

1、减少各个文件内的css代码量,可以更专注业务
2、方便统一调整样式

缺点

1、学习成本高,需要理解各种含义的类名
2、复杂的样式通常需要二次封装后再使用,否则导致元素上类名过多,影响阅读

参考文章

React系列十一 - React中的CSS - 知乎 (zhihu.com)

从零带你架构一个企业级 React 项目 - 掘金 (juejin.cn)