目录

方案一: namespaces

方案二:CSS in JS

1. styled-jsx

2. styled-components

安装

全局样式

局部(组件)样式

方案三:CSS Modules


用了 React 很久了,关于 react 中 css 作用域隔离一直不爽,这里总结一下在 React 中 优雅的写css。

  • 方案一:namespaces
  • 方案二:CSS in JS
  • 方案三:CSS Modules

方案一: namespaces

利用约定好的命名来隔离 CSS 的作用域。这种方式不多加描述,大家都懂。

方案二:CSS in JS

目前的 CSS in JS 的第三方库有60余种,介绍两款我在使用的库

  • styled-jsx
  • styled-components

1. styled-jsx

我在之前的文章中有写过它,你可以参阅

在 create-react-app 中使用 styled-jsx_五虎战画戟-CSDN博客yarn add react-app-rewired customize-cra在 package.json 中替换/* package.json */ "scripts": {- "start": "react-scripts start",+ "start": "react-app-rewired start",- "build": "react-scripts build",+ "build": "react-app-rewired build",- ".https://blog.csdn.net/qq_41887214/article/details/120523661语法:

import React from "react";export default () => {return (<div className='container'><section className='main'><h1>111111</h1></section><style jsx>{`.container {height: 100vh;background: royalblue;}.main {height: 300px;background: #61dafb;}`}</style></div>);
}

缺点:但是 styled-jsx 的缺点在于,它无法修改第三方UI组件的样式,这让我很痛心。当我要修改第三方UI组件时只能用 css namespaces 使用

优点:但是优点也很明显,语法和 css 一致,没有学习成本

2. styled-components

安装

npm install --save styled-components

全局样式

// style.js
import { createGlobalStyle } from 'styled-components'export const GlobalStyle = createGlobalStyle`html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, u, i, center,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td,article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary,time, mark, audio, video {margin: 0;padding: 0;border: 0;font-size: 100%;font: inherit;vertical-align: baseline;}/* HTML5 display-role reset for older browsers */article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {display: block;}body {line-height: 1;}ol, ul {list-style: none;}blockquote, q {quotes: none;}blockquote:before, blockquote:after,q:before, q:after {content: '';content: none;}table {border-collapse: collapse;border-spacing: 0;}
`;

项目入口文件index.js中加载全局样式 style.js

import React from 'react';
import ReactDOM from 'react-dom';
import { GlobalStyle} from './style.js';
import App from './App';ReactDOM.render(<><GlobalStyle/><App/></>,document.getElementById('root')
);

局部(组件)样式

对于一个特定的组件,我们可以事先在render函数中,用组件的命名方式替换原本的div等标签

import React, {Component} from 'react'
import {HeaderWrapper,Nav,NavItem
} from './style'class Header extends Component {render() {return (<HeaderWrapper><Nav><NavItem className='left active'>首页</NavItem><NavItem className='left'>下载App</NavItem><NavItem className='right'>登陆</NavItem><NavItem className='right'><span className='icon'>												

如何在 React 中优雅的写 CSS?CSS作用域隔离相关推荐

  1. boost::unorder_map如何插入元素_「React」如何在React中优雅的实现动画

    最简单的动画组件实现 动画的本质,无非就是一个状态样式到另一个状态样式的过渡.最简单的动画组件,我们只需要指定两个状态的样式(进入的样式,离开的样式),以及一个开关(控制状态),即可完成. codep ...

  2. 如何在React中做到jQuery-free

    前言 前些天在订阅的公众号中看到了以前阮一峰老师写过的一篇文章,「如何做到 jQuery-free?」.这篇文章讨论的问题,在今天来看仍不过时,其中的一些点的讨论主要是面向新内核现代浏览器的标准 DO ...

  3. 如何在MyBatis中优雅的使用枚举

    From: https://segmentfault.com/a/1190000010755321 问题 在编码过程中,经常会遇到用某个数值来表示某种状态.类型或者阶段的情况,比如有这样一个枚举: p ...

  4. 如何在vscode中优雅的编写C语言

    如何在vscode中优雅的编写C语言 各位好,我认为vscode编辑器在windows环境下除了Pycharm外是最方便的IDE了,但在初学C语言时很少有人的第一个C语言软件使用的是vscode来编译 ...

  5. react网格生成_如何在React中构建实时可编辑数据网格

    react网格生成 by Peter Mbanugo 彼得·姆巴努戈(Peter Mbanugo) 如何在React中构建实时可编辑数据网格 (How to Build a Real-time Edi ...

  6. 如何在React中引入阿里图标库的图标

    一.周所周知 在 Antd Design 中也有一些图标,但是要找到自己想要的图标不是很方便,需要一个一个的找.而且提供的图标数量也不是很多! 而阿里图标库可以通过搜索找到自己想要的图标,图标的数量和 ...

  7. 如何在React中使用Typescript

    TypeScript can be very helpful to React developers. TypeScript对React开发人员可能非常有帮助. In this video, Ben ...

  8. easyswoole数据库连接池_如何在 Swoole 中优雅的实现 MySQL 连接池

    如何在 Swoole 中优雅的实现 MySQL 连接池 一.为什么需要连接池 ? 数据库连接池指的是程序和数据库之间保持一定数量的连接不断开, 并且各个请求的连接可以相互复用, 减少重复连接数据库带来 ...

  9. react 中渲染html_如何在React中识别和解决浪费的渲染

    react 中渲染html by Nayeem Reza 通过Nayeem Reza 如何在React中识别和解决浪费的渲染 (How to identify and resolve wasted r ...

  10. 如何在React中从其父组件更改子组件的状态

    by Johny Thomas 约翰尼·托马斯(Johny Thomas) 如何在React中从其父组件更改子组件的状态 (How to change the state of a child com ...

最新文章

  1. Linux Xmanager
  2. Node初学(一)require方法
  3. 浅谈NLP中的对抗训练方式
  4. NOIP2019 Emiya家今天的饭
  5. 有关循环和判断的几个小问题
  6. php折半查找算法,二分查找 [折半查找] 算法 PHP 版
  7. nginx RTMP FFmpeg 视频直播
  8. 标准商业计划书大纲模版
  9. maxon电机/步科电机 CANOpen协议指令速度模式
  10. 运放参数的详细解释和分析
  11. linux 更改sh文件权限不够,linux权限不够,sh不能用
  12. python 相关系数(全)
  13. pta 循环——首字母大写
  14. Unity中单点和多点触控
  15. 在线学习系统源代码_学习系统设计和软件体系结构必看的5门在线免费课程
  16. 最全的软件测试面试题(含答案)
  17. css3倒数两个,:nth-last-child()
  18. 编程中无穷大的设定 很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1 但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相
  19. 斯坦福大学计算机排名多少,斯坦福大学全球排名第几
  20. 为什么说虚拟主机是个人站长的最佳选择

热门文章

  1. 两种excel 去掉公式保留数值的方法
  2. 卖奥特曼卡片年入十亿:赚钱这事,你还得相信光的力量
  3. c语言厘米换算分米程序设计,厘米和分米换算(米和厘米换算)
  4. 洛谷P2141珠心算测验
  5. linux 目录为空 删不掉,空文件夹删不掉怎么办 空文件夹删不掉解决方法
  6. 基于zookeeper实现统一配置管理
  7. 2021年中国太阳能热发电行业发展现状、发展机遇及发展方向分析[图]
  8. 计算机课件制作总结,多媒体课件制作的学习心得
  9. 盘点阿里巴巴 34 个牛逼 GitHub 项目
  10. 新西兰梅西大学有计算机专业吗,新西兰梅西大学世界排名|怎么样|入学条件_海外院校库-柳橙网...