当前位置: 首页 > news >正文

编写CSS的格式

1、内联样式的css

import React, { PureComponent } from 'react'export class App extends PureComponent {constructor() {super()this.state = {fs: 20}}render() {const { fs } = this.statereturn (<div><p style={{ color: 'red', fontSize: `${fs}px` }}>哈哈哈哈哈</p><p style={{ color: 'blue' }}>嘿嘿嘿嘿</p></div>)}
}export default App

2、普通的css写法

Home.jsx

import React, { PureComponent } from 'react'export class Home extends PureComponent {render() {return (<div><p className='title'> 我是 Home.jsx 文件,我的样式是被影响的,<br />因为,<br />import 引入的普通css, 样式之间会相互影响。</p></div>)}
}export default Home

App.jsx

import React, { PureComponent } from 'react'
import './App.css'  `【用 import 引入的普通css, 不同组件的样式之间,会相互影响】`
import Home from './Home'export class App extends PureComponent {render() {return (<div><h3 className="title">标题</h3><p className="content">内容哈哈哈哈</p><Home></Home></div>)}
}export default App

App.css

.title {font-size: 32px;color: green;
}.content {font-size: 22px;color: orange;
}

在这里插入图片描述

3、CSS_Moudle写法

  • css modules 并不是React特有的解决方案,而是所有使用了类似于webpack配置的环境下都可以使用的,如果在其他项目中使用,就需要自己进行配置了,比如:配置webpack.config.js中的modules: true。

  • React的脚手架已经内置了 css modules 的配置,
    我们只需要这样做即可:
    .css / .less / .scss 等样式文件,修改成,.module.css / .module.less / .module.scss
    之后 import AppStyle from './App.module.css' 这样引入就行了。

  • 但是这种方案也是有缺陷的,如:
    1、引用的类名,不能使用连接符(.home-title)这种形式的,因为在js中不识别
    2、所有的className都必须使用{style.className}的形式编写
    3、不方便动态修改某些样式,依然需要内联样式进行辅助

App.module.css 文件

.title {font-size: 32px;color: green;
}.content {font-size: 22px;color: orange;
}

App.jsx

import React, { PureComponent } from 'react'
import AppStyle from './App.module.css'
import Home from './Home'export class App extends PureComponent {render() {return (<div><h3 className={AppStyle.title}>标题,我的样式的类名是title</h3><p className={AppStyle.content}>内容哈哈哈哈,我的样式的类名是content</p><Home></Home></div>)}
}export default App

Home.jsx

import React, { PureComponent } from 'react'export class Home extends PureComponent {render() {return (<div><p className='title'> 我是 Home.jsx 文件,我的样式的类名是title<br />因为,<br />本项目使用的 App.module.css 的形式,<br />所以本文件的样式不受影响</p></div>)}
}export default Home

4、css in js(推荐)

variable.js

export const primaryColor = '#ff8800'
export const secondColor = '#ff7788'export const smallSize = '8px'
export const middleSize = '14px'
export const bigSize = '18px'

style.js

import styled from 'styled-components'*使用外部文件提供的变量
import { smallSize } from './variable'*这里涉及到了es6的 标签模板字符串
export const AppWrapper = styled.div`.footer {margin-top: 10px;border: 1px solid red;}
`1、可以接受外部传入的props
2、可以通过 attrs 设置默认值
3、可以使用外部文件提供的变量
export const SectionWrapper = styled.div.attrs(props => {return {tcolor: props.color || 'blue'}
})`border: 1px solid red;.title {/* props.size 的 size 由外部传入 */font-size: ${props => props.size}px;/* 通过 attrs 提供的默认值 */color: ${props => props.tcolor};// 当 .title 处于 hover状态时,背景颜色为紫色&:hover {background: purple;}}.content {/* font-size: 20px; */font-size: ${smallSize}; /* 使用外部变量 */color: green;}
`

App.jsx

import React, { PureComponent } from 'react'
import { AppWrapper, SectionWrapper } from './style.js'export class App extends PureComponent {constructor() {super()this.state = {size: 20,   color: 'yellow'}}render() {const { size, color } = this.statereturn (<AppWrapper>{/* <SectionWrapper size={size} color={color}> */}<SectionWrapper size={size}><h2 className="title">我是标题</h2><p className="content">我是内容</p><button onClick={e => this.setState({ color: 'red' })}>更改颜色</button></SectionWrapper><div className="footer"><p>免责声明</p><p>版权声明</p></div></AppWrapper>)} // end-render
}export default App

5、第三方库 classnames

import React, { PureComponent } from 'react'`引入 classnames库`
import classnames from 'classnames'export class App extends PureComponent {constructor() {super()this.state = {isbbb: false,isccc: true}}render() {const { isbbb, isccc } = this.stateconst classList = ['aaa']if (isbbb) classList.push('bbb')if (isccc) classList.push('ccc')const classname = classList.join(',')return (<div><h2 className={`aaa ${isbbb ? 'bbb' : ''} ${isccc ? 'ccc' : ''}`}>标题哈哈哈哈</h2><h2 className={classname}>呵呵呵</h2>{/* classnames库 的使用 */}<h2 className={classnames('aaa', {bbb: isbbb}, {ccc: isccc})}>嘿嘿嘿嘿</h2><h2 className={classnames(['aaa', {bbb: isbbb}, {ccc: isccc}])}>嘿嘿嘿嘿</h2></div>)} // end-render
}export default App
http://www.lqws.cn/news/530713.html

相关文章:

  • 2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(五)
  • 【STM32】外部中断
  • HTTP协议-后端接收请求
  • CRON表达式编辑器与定时任务实现技术文档
  • Sonarqube:Jenkins触发sonar扫描出现UnsupportedClassVersionError错误处理
  • EXILIUM×亚矩云手机:重构Web3虚拟生存法则,开启多端跨链元宇宙自由征途
  • GEO引领品牌大模型种草:迈向Web3.0与元宇宙的认知新空间
  • 【算法深练】栈特性的解题密码:LIFO规则在题型中的灵活运用
  • 供应链管理:计划相关岗位及其岗位职责
  • 【C++】ATM机模拟系统 :完整窗口实现
  • 机器学习15-规则学习-知识加强
  • MySQL-主从复制分库分表
  • WebSocket 与 HTTP 的区别及 Spring Boot 实战应用
  • 如何将视频从 iPhone 发送到 Android 设备
  • Midscene.js:使用 LLMs.txt 快速生成 AI 自动化测试用例「喂饭教程」
  • pyhton自动化采集数据脚本
  • 实现Taro小程序+nut-ui左滑删除效果
  • Go 语言中的指针
  • Java+Vue开发的SRM企业招采管理系统,一站式管理招采,助力企业高效运营
  • VC formal document and examples
  • 先考 HCIA 还是直接考 HCIP?网络工程师认证选择指南
  • 深入剖析Nginx架构及其不同使用场景下的配置
  • 蜂鸟代理IP+云手机:跨境电商多账号运营的“隐形风控引擎”
  • 手机控车一键启动汽车智能钥匙
  • Java Lambda表达式
  • CMake实践:安装与配置
  • 基于vue3+ByteMD快速搭建自己的Markdown文档编辑器
  • MySQL 中的锁机制详解:原理、实现方式与实战解析!
  • MySQL多表关系
  • Nordic 电源管理nPM1300 EK评估板介绍