全局样式/局部样式
- 全局样式
样式文件名为: xxx.css
/scss/less
导入:import ‘xxx.css/scss/less’
类名:就是自定义类名
- 局部样式
样式文件名为: xxx.module.css
导入:import styles from ‘xxx.module.css’
使用:<p className={styles.container}></div>
类名:组件名_自定义类名__hash转base64值取前5位,用于防止缓存
import React from 'react'
import Hello from './Hello'
import './app.css' // 全局样式
import Styles from './hello.module.css' // 局部样式
class App extends React.Component {
render() {
return (
<div>
App
<p className='box'></p>
<p className={Styles.container}></p>
<Hello/>
</div>
)
}
}
cra中使用sass
- 安装两个插件 node-sass 和 sass-loader
$ yarn add node-sass sass-loader -D $ cnpm i node-sass sass-loader -D
cra中使用less
安装两个插件 less 和 less-loader (用于less转css)
$ yarn add less less-loader -D $ cnpm i less less-loader -D
cra内置了css和sass配置,但是没有less的配置,
less和sass使用区别不大,去拷贝sass配置【位于config/webpack.config.js】给less即可
504-538 只需将sass改成less
还是报错并且报错中提到了版本就需要降版本
$ yarn add less-loader@7.3.0 -D $ cnpm i less-loader@7.3.0 -D
局部样式中写全局样式
:global 表示里面的类名都是全局类名
用于局部写全局
:global{
.wrapper{
width: 100px;
height: 100px;
background: pink;
}
}
import style from './cpp.module.scss'
<p className='wrapper'></p>
行内样式
react中不允许如下书写
- jsx也是虚拟DOM写法
- 虚拟DOM是一个对象模型,要求是对象的写法 ```html 改为如下书写
```javascript
class App extends React.Component {
style ={
width:'100px',
height:'100px',
background:'red',
}
render() {
return (
<div>
{/* 直接在元素上以对象的形式来进行样式的定义 */}
<p style={this.style}></p>
</div>
)
}
}
注意:样式属性要用驼峰命名法表示,如backgroundColor而不是background-color;fontSize而不是font-size
<input type="text" style={{"backgroundColor":"yellow","color":"red"}} value={value}/>
使用classname第三方模块
类名处理
先安装classnames
$ yarn add classnames -D $ cnpm i classnames -D
使用
import React from 'react'
import classname from 'classnames' // 导出的classname是一个函数
class App extends React.Component {
render() {
return (
<div>
<p className={classname({
a: true,
b: true,
c: false,
})}></p>
</div>
)
}
}
export default App
样式组件 - 了解
安装
$ yarn add styled-components -D $ cnpm i styled-components -D
使用
import React from 'react'
import styled from 'styled-components' // todo1、引入
console.log(styled)
// todo2、创建样式组件
const Container = styled.div`
width:100px;
height:100px;
background:${props=>props.color||'red'};
// 有color属性就用color属性的颜色,没有则用red
`
export default class App extends React.Component{
color='pink'
render(){
return(
<div>
{/* todo3、Container可以作为组件直接使用 */}
<Container/>
<Container color={this.color} />
</div>
)
}
}
自动生成类名,不用在起类名