react-32-样式隔离-引入css方式-vue对比

简介: 样式污染是开发常遇到的问题解决办法其实就是让class名不重复,针对这个不重复有很多方法1.1 class命名不重复:工具实现命名唯一1.2 CSS Modules模块化1.3 Styled-component在之前文章代码基础上进行修改react-路由传参

1.前言


样式污染是开发常遇到的问题

解决办法其实就是让class名不重复,针对这个不重复有很多方法

1.1 class命名不重复:工具实现命名唯一

1.2 CSS  Modules模块化

1.3  Styled-component

在之前文章代码基础上进行修改react-路由传参


2. 问题表现


比如城市界面 设置一个   h1 标签字体红色

2.1 index.css


h1{
     color: red;
}


2.2 城市组件引用 样式文件

需要通过 import 导入


import React, { Component } from 'react'
import { Link } from "react-router-dom";
import "./index.css"


2.3 效果

YW{NE0LCCF_%E5TLVZ9(3ZR.png

2.gif

每个界面的 h1标签都变红色了


3. sass 安装


后续的写法准备用sass,所以先安装下

注意版本问题 我是装的"sass": "^1.36.0"


npm i sass -D

Tips

安装sass node-sass的时候千万注意自己npm版本问题

如果报了很多恶心的错误,非常难解决,还是老老实实降低自己的npm版本吧

或者装多个版本的npm ,但切换使用


4.react脚手架自带模块化  .module.css 解决方案


4.1 原理

css文件作为一个模块引入,这个模块中的所有css,只作用于当前组件。不会影响当前组件的后代组件

4.2 步骤

1.把样式文件改为xx.module.css就行 用less或者sass也一样

我这里使用 sass来演示

将原来的 index.css 改为index.module.scss文件

  1. 一般只用class来写样式


.testColor{
   color: red;
}
.test-bg{
  background-color: orange;
}

注意 sass的样式 后缀是scss

4.3 引用样式文件


import styles from "./index.module.scss"
console.log("样式对象:",styles)


4.4 样式书写

  1. 命名的样式名注意用法 ,这个- 横杠的写法在js里面不合法所以用["a-b"]的形式使用


render() {
        return (
            <div className={styles.testColor}>
                <h1 className={styles["test-bg"]}>城市列表</h1>
            </div>
        )
    }


4.5  多个类样式的写法


<p className={`${styles.testColor} ${styles["test-bg"]}`}> 多个类样式</p>


4.6 效果

}OKY_4X5`VFO[06[KI1ZE%O.png

1.png

回顾我们前言 的内容 ,其实 这些工具,都是帮我们起个不会重复的名字,来保证不会样式污染

4.7 缺点

1.引用的类名,不能使用连接符(.xxx-xx),在JavaScript中是不识别的

2.所有的 className都必须使用 {style.className} 的形式来编写

3.不方便动态来修改某些样式,依然需要使用内联样式的方式;


5.编写css的规则


1.可以编写局部css,不会随意污染其他组件内的原生;

2.可以编写动态的css,可以获取当前组件的一些状态,根据状态的

变化生成不同的css样式;

3.支持所有的css特性:伪类、动画、媒体查询等;

4.编写起来简洁方便、最好符合一贯的css风格特点


6. 对比vue中使用css的方式


6.1 vue

1.通过style标签编写样式

2.scoped属性进行样式隔离

3.lang属性设置预处理器

4.内联样式风格的方式来根据最新状态设置和改变css

6.2 react

1.在组件内直接使用

2.组件中引入 .css文件

3.组件中引入 .module.css文件

4.CSS in JS

下面分别对这几种方式进行分析

其中   引入 cssmodule.css文件上面已经讲过


7. react组件内直接使用


直接在组件中书写css样式,通过style属性直接引入

7.1 样式编写


import React, { Component } from "react";
const card ={
    color: "#303133",
    backgroundColor: "#fff",
    border:"1px solid #DCDFE6",
    borderRadius:"5px",
    width:"182px",
    padding:"10px",
    margin:"0 auto",
    boxShadow:"0 2px 12px 0 rgb(0 0 0 / 10%)"
}


7.2 样式使用


export default class MyComponent extends Component {
    render() {
        console.log("我的界面:",this.props)
        return (
            <div>
                <h1>关于我的传说</h1>
                <p style={card}>
                    天行健,君子以自强不息;地势坤,君子以厚德载物;
                </p>
            </div>
        )
    }
}


7.3 style  直接绑定


<p style={{background:"red",color:"#FFF"}}>样式对象变量</p>


7.4 效果

SQCG5H~4YE[%{QYS17{0I4K.png

1.png

7.5 总结

注意

css属性需要转换成驼峰写法

这种方式优点

1.内联样式, 样式之间不会有冲突

2.可以动态获取当前state中的状态

缺点

1.写法上都需要使用驼峰标识

2.某些样式没有提示

3.大量的样式, 代码混乱

4.某些样式无法编写(比如伪类/伪元素)


8.组件中引入css文件


单独写个css ,然后组件中引入,刚开始学css分离的时候就这样哈哈

test.css


.title {
  color: orange;
  font-size: 66px;
}

组件引入


import React, { PureComponent } from 'react';
import './test.css';
export default class App extends PureComponent {
  render() {
    return (
      <div className="app">
        <h2 className="title">单独的css文件</h2>
      </div>
    )
  }
}

PureComponent这里作为一个引子


9.CSS in JS


CSS-in-JS, 是指一种模式,其中CSSJavaScript生成而不是在外部文件中定义

需要注意的是, 这个功能需要安装第三方库,常用的如下

1.styled-components

2.emotion

3.glamorous


10.styled-components的基本使用


本质是通过函数的调用,最终创建出一个组件:

1.这个组件会被自动添加上一个不重复的class

2.styled-components会给该class添加相关的样式

安装


npm install --save styled-components

简易用法

创建了一个Box样式组件,组件渲染之后是一个div标签

Box组件跟使用react的组件一样,只不过现在他们有了自己的样式


const Box= styled.div`
    color: blue;
  `;
  render(
    <Box>
        Hello  styled-components!
    </Box>
  );


类名


const Box = styled.div`
    color: red;
    h3 {
    color: yellow
    }
    .o2{
    color: orange
    }
  `
  render(
    <Box>
      <p>红色 p 标签 </p>
      <h3>黄色 h3 标签</h3> 
      <p className="o2" >橘色 p 标签</p>
    </Box>
  )



11. 组件使用


style.js

首字母必须大写


export const Mytitle= styled.div`
  height: 66px;
  border: 1px solid greenyellow;
  color: orange;
`;


引入


import React, { Component } from "react";
import { Mytitle } from "./style";
class TestStyle extends Component {
  constructor(props, context) {
    super(props);
  }  
  render() {
    return (
     <div>
       <Mytitle title="有幸生在华夏">建党100年</Mytitle>
     </div>
    );
  }
}
export default TestStyle;




相关文章
|
7天前
|
前端开发 开发者
React 中如何安装与使用 Tailwind CSS
本文介绍如何在React项目中安装与使用Tailwind CSS,涵盖环境配置、依赖安装、文件设置及实际应用示例,帮助开发者快速上手这一高效、灵活的实用类优先CSS框架。
94 1
|
19天前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
82 1
|
19天前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
47 3
|
3月前
|
JavaScript 前端开发 API
对比Vue框架与React库的主要区别
在选择Vue还是React时,考虑项目的需求、团队的熟悉程度和个人偏好至关重要。如果项目需要快速原型开发和较小的学习曲线,Vue可能是更好的选择。相反,如果项目需要更大的灵活性,或者项目团队已经有React的经验,那么React可能是更合适的选择。
189 13
|
6月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
404 83
|
6月前
|
前端开发
|
7月前
|
JavaScript 前端开发 算法
vue和react 哪个更强大
vue和react 哪个更强大
196 3
|
11月前
|
存储 缓存 JavaScript
如何优化React或Vue应用的性能
需要注意的是,性能优化是一个持续的过程,需要根据具体的应用场景和性能问题进行针对性的优化。同时,不同的项目和团队可能有不同的优化重点和方法,要结合实际情况灵活运用这些优化策略,以达到最佳的性能效果。
372 61
|
11月前
|
JavaScript 前端开发 测试技术
React和Vue的性能对比如何?
需要注意的是,性能不仅仅取决于框架本身,还与开发者的代码质量、架构设计以及项目的优化程度等密切相关。因此,在评估性能时,应该综合考虑多个因素,而不是仅仅局限于框架之间的比较。
608 58
|
11月前
|
JavaScript 前端开发 开发者
React和Vue有什么区别?
React 和 Vue 都有各自的优势和特点,开发者可以根据项目的需求、团队的技术背景以及个人的喜好来选择使用。无论是 React 还是 Vue,它们都在不断发展和完善,为前端开发提供了强大的支持。
973 58

热门文章

最新文章