We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
组件式开发选择合适的css解决方案尤为重要
css
通常会遵循以下规则:
在这一方面,vue使用css起来更为简洁:
vue
而在react中,引入CSS就不如Vue方便简洁,其引入css的方式有很多种,各有利弊
react
CSS
Vue
常见的CSS引入方式有以下:
直接在组件中书写css样式,通过style属性直接引入,如下:
style
import React, { Component } from "react"; const div1 = { width: "300px", margin: "30px auto", backgroundColor: "#44014C", //驼峰法 minHeight: "200px", boxSizing: "border-box" }; class Test extends Component { constructor(props, context) { super(props); } render() { return ( <div> <div style={div1}>123</div> <div style={{backgroundColor:"red"}}> </div> ); } } export default Test;
上面可以看到,css属性需要转换成驼峰写法
这种方式优点:
缺点:
写法上都需要使用驼峰标识
某些样式没有提示
大量的样式, 代码混乱
某些样式无法编写(比如伪类/伪元素)
将css单独写在一个css文件中,然后在组件中直接引入
App.css文件:
App.css
.title { color: red; font-size: 20px; } .desc { color: green; text-decoration: underline; }
组件中引入:
import React, { PureComponent } from 'react'; import Home from './Home'; import './App.css'; export default class App extends PureComponent { render() { return ( <div className="app"> <h2 className="title">我是App的标题</h2> <p className="desc">我是App中的一段文字描述</p > <Home/> </div> ) } }
这种方式存在不好的地方在于样式是全局生效,样式之间会互相影响
将css文件作为一个模块引入,这个模块中的所有css,只作用于当前组件。不会影响当前组件的后代组件
这种方式是webpack特工的方案,只需要配置webpack配置文件中modules:true即可
webpack
modules:true
import React, { PureComponent } from 'react'; import Home from './Home'; import './App.module.css'; export default class App extends PureComponent { render() { return ( <div className="app"> <h2 className="title">我是App的标题</h2> <p className="desc">我是App中的一段文字描述</p > <Home/> </div> ) } }
这种方式能够解决局部作用域问题,但也有一定的缺陷:
CSS-in-JS, 是指一种模式,其中CSS由 JavaScript 生成而不是在外部文件中定义
JavaScript
此功能并不是 React 的一部分,而是由第三方库提供,例如:
下面主要看看styled-components的基本使用
styled-components
本质是通过函数的调用,最终创建出一个组件:
基本使用如下:
创建一个style.js文件用于存放样式组件:
style.js
export const SelfLink = styled.div` height: 50px; border: 1px solid red; color: yellow; `; export const SelfButton = styled.div` height: 150px; width: 150px; color: ${props => props.color}; background-image: url(${props => props.src}); background-size: 150px 150px; `;
引入样式组件也很简单:
import React, { Component } from "react"; import { SelfLink, SelfButton } from "./style"; class Test extends Component { constructor(props, context) { super(props); } render() { return ( <div> <SelfLink title="People's Republic of China">app.js</SelfLink> <SelfButton color="palevioletred" style={{ color: "pink" }} src={fist}> SelfButton </SelfButton> </div> ); } } export default Test;
通过上面四种样式的引入,可以看到:
在组件内直接使用css该方式编写方便,容易能够根据状态修改样式属性,但是大量的演示编写容易导致代码混乱
组件中引入 .css 文件符合我们日常的编写习惯,但是作用域是全局的,样式之间会层叠
引入.module.css 文件能够解决局部作用域问题,但是不方便动态修改样式,需要使用内联的方式进行样式的编写
通过css in js 这种方法,可以满足大部分场景的应用,可以类似于预处理器一样样式嵌套、定义、修改状态等
至于使用react用哪种方案引入css,并没有一个绝对的答案,可以根据各自情况选择合适的方案
The text was updated successfully, but these errors were encountered:
PostCSS
Sorry, something went wrong.
unocss
tailwind css
No branches or pull requests
一、是什么
组件式开发选择合适的
css
解决方案尤为重要通常会遵循以下规则:
在这一方面,
vue
使用css
起来更为简洁:而在
react
中,引入CSS
就不如Vue
方便简洁,其引入css
的方式有很多种,各有利弊二、方式
常见的
CSS
引入方式有以下:在组件内直接使用
直接在组件中书写
css
样式,通过style
属性直接引入,如下:上面可以看到,
css
属性需要转换成驼峰写法这种方式优点:
缺点:
写法上都需要使用驼峰标识
某些样式没有提示
大量的样式, 代码混乱
某些样式无法编写(比如伪类/伪元素)
组件中引入css文件
将
css
单独写在一个css
文件中,然后在组件中直接引入App.css
文件:组件中引入:
这种方式存在不好的地方在于样式是全局生效,样式之间会互相影响
组件中引入 .module.css 文件
将
css
文件作为一个模块引入,这个模块中的所有css
,只作用于当前组件。不会影响当前组件的后代组件这种方式是
webpack
特工的方案,只需要配置webpack
配置文件中modules:true
即可这种方式能够解决局部作用域问题,但也有一定的缺陷:
CSS in JS
CSS-in-JS, 是指一种模式,其中
CSS
由JavaScript
生成而不是在外部文件中定义此功能并不是 React 的一部分,而是由第三方库提供,例如:
下面主要看看
styled-components
的基本使用本质是通过函数的调用,最终创建出一个组件:
基本使用如下:
创建一个
style.js
文件用于存放样式组件:引入样式组件也很简单:
三、区别
通过上面四种样式的引入,可以看到:
在组件内直接使用
css
该方式编写方便,容易能够根据状态修改样式属性,但是大量的演示编写容易导致代码混乱组件中引入 .css 文件符合我们日常的编写习惯,但是作用域是全局的,样式之间会层叠
引入.module.css 文件能够解决局部作用域问题,但是不方便动态修改样式,需要使用内联的方式进行样式的编写
通过css in js 这种方法,可以满足大部分场景的应用,可以类似于预处理器一样样式嵌套、定义、修改状态等
至于使用
react
用哪种方案引入css
,并没有一个绝对的答案,可以根据各自情况选择合适的方案参考文献
The text was updated successfully, but these errors were encountered: