React中Css几种实现方案
全局样式
与传统 html 标签类属性不同,react 中 class 必须编写为 className,比如
全局 css
.box {
background-color:red;
width:300px;
height:300px;
}
js
function Hello() {
return <div className="box">hello react</div>
}
ReactDOM.render(<Hello />, document.getElementById('root'))
与传统在 html 标签定义 css 样式不同,因为这不是传统的 html 代码,而是 JSX,由于 class 作为关键字,无法作为标识符出现,比方说下面的代码将会报错。
const { class } = { class: 'foo' } // Uncaught SyntaxError: Unexpected token }
const { className } = { className: 'foo' }
const { class: className } = { class: 'foo' }
关于官方也有对此问题回答
有趣的话题,为什么 jsx 用 className 而不是 class
所以把传统的 html 代码强行搬运到 react 中,如果带有 class 与 style 属性,那么将会报错。
内联样式
内联样式也得写成对象 key-value 形式,遇到-连字符,则需要大写,如
function Hello() {
return (
<div className="box" style={{ fontSize: '32px', textAlign: 'center' }}>
hello react
</div>
)
}
CSS 的font-size
属性要写成fontSize
,这是 JavaScript 操作 CSS 属性的约定。
其实 可传入表达式,比方这里传入的就是{ fontSize: "32px",textAlign: "center" }
对象,也可以将其定义为一个变量传入。
但是写内联样式显得组丑陋影响阅读,并且样式不易于复用,同时伪元素与媒体查询无法实现,但是封装成类样式,又会影响到全局作用域,所以便有了局部样式styles.module.css
。