由于react的样式管理是比较弱的,官方是建议把style直接写到jsx标签里

当然这种处理的方式显然不是特别适合,这样就造成了样式与标签耦合在一起了,我们知道在VUE中的利用scoped做到了样式私有化,react的样式私有化有以下几种处理方法:

1.利用css module来解决

这里有一篇关于css modoule的文章

1.1 在create-react-app中使用css modules的方法

import React from 'react';
//注意App.module.css中多了一个module关键字
import style from './App.module.css';export default () => {return (<h1 className={style.title}>Hello World</h1>);
};

而在css的命名必须为: App.module.css

.title {font-szie: 50px;
}

这样就可以在代码中使用了,编辑结果形式如下图:


而css module的做法就是:

产生局部作用域的唯一方法,就是使用一个独一无二的class的名字,不会与其他选择器重名。这就是 CSS Modules 的做法。

1.2 构建的webpack实现css Module

此时在react中的引入是一样的,但是css样式文件名不需要再加上module关键字了,但是需要webpack配合:

// App.css: .title {font-szie: 50px;
}

webpack代码:

上面代码中,关键的一行是style-loader!css-loader?modules,它在css-loader后面加了一个查询参数modules,表示打开 CSS Modules 功能。而

localIdentName=[path][name]---[local]---[hash:base64:5]

这句的含义是定制hash后样式类名的名字,这样就不会出现很难理解的类名了,具有一定的语义性

module.exports = {entry: __dirname + '/index.js',output: {publicPath: '/',filename: './bundle.js'},module: {loaders: [{test: /\.jsx?$/,exclude: /node_modules/,loader: 'babel',query: {presets: ['es2015', 'stage-0', 'react']}},{test: /\.css$/,loader: "style-loader!css-loader?modules&localIdentName=[path][name]---[local]---[hash:base64:5]"},]}
};

2. 在外层套上自己的类名

套上自己的类名,做到隔离实现css私有化

index.css
.a .c {//.......
}.b .c {//........
}
app.js
<div><div className='a'><div className='c'></div></div><div className='b'><div className='c'></div></div>
</div>

3. VUE中的私有样式处理

<style scoped>
.example {color: red;
}
</style>
<template><div class="example">hi</div>
</template>

编译之后为:

<style>
.example[data-v-5558831a] {color: red;
}
</style>
<template><div class="example" data-v-5558831a>hi</div>
</template>

scoped属性做了如下操作:

  1. 给HTML的DOM节点加一个不重复属性data-v-469af010标志唯一性
  2. 在添加scoped属性的组件的每个样式选择器后添加一个等同与“不重复属性”相同的字段,实现类似于“作用域”的作用,不影响全局
  3. 如果组件内部还有组件,只会给最外层的组件里的标签加上唯一属性字段,不影响组件内部引用的组件( 注意 )

4 vue中样式穿透

有时需要在scoped标签里,修改第三方组件的样式,如下处理:

<style>
.example >>> element-ui {color: red;
}
//或则
.example::v-deep element-ui {color: red;
}
</style>

react样式的私有化方法相关推荐

  1. vue动态切换css文件_vue实现样式之间的切换及vue动态样式的实现方法

    编程之家收集整理的这篇文章主要介绍了vue实现样式之间的切换及vue动态样式的实现方法,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考. 前言 既然我们选择了vue,那么在做东西时就不要想 ...

  2. [react] 在react中遍历的方法有哪些?它们有什么区别呢?

    [react] 在react中遍历的方法有哪些?它们有什么区别呢? 有React.Children.map和 React.Children.forEach这两个方法,他们的参数都是在组件中接受prop ...

  3. 通过反射创建私有化构造的类,并为私有化属性复制。调用私有化方法

    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  4. python做一个窗口样式_python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法...

    本文借用HTML的css语法,将样式表应用到窗口部件.这里只是个简单的例子,实际上样式表的语法很丰富. 以下类似于css: StyleSheet = """ QCombo ...

  5. vue v-html 动态内容样式无效解决方法

    vue v-html 动态内容样式无效解决方法 参考文章: (1)vue v-html 动态内容样式无效解决方法 (2)https://www.cnblogs.com/mengfangui/p/122 ...

  6. vue 列表 萌层 鼠标移入移出_vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法...

    鼠标移入添加class样式 HTML HTML绑定事件,加入或者移出class为active 流量套餐 JS 这里除了active这个class需要动态添加或者减去,其他的皆是移入移出都需要的clas ...

  7. JQUERY为元素添加样式的实现方法

    由于jquery支持css3,所有能很好的兼容很多浏览器,所以通过jquery来使用css样式比较好为定义好的css样式可以调用元素的css方法添加样式$("span").css( ...

  8. sketchup边线设置_SketchUp Pro for mac 背景天空边线样式的设置方法

    原标题:SketchUp Pro for mac 背景天空边线样式的设置方法 Sketchup Pro 2019版是一套直接面向设计方案创作过程的设计工具,其创作过程不仅能够充分表达设计师的思想而且完 ...

  9. 思维导图simplemind添加样式预设的方法

    在本篇文章中,我们介绍的是思维导图simplemind添加样式预设的方法.使用simplemind,可以隐藏或显示单个主题或分支 显示分支边框以突出显示分支. 使用复选框,交联和自动编号 搜索包含文本 ...

最新文章

  1. centos7双网卡绑定bond0
  2. 简明深度学习方法概述 Deep Learning:Methods and Application
  3. 服务器远程显示用户忙,服务器远程显示用户忙
  4. mysql innodb 内存_MySQL的innodb和内存
  5. 计算机网络标准体系,计算机网络标准体系结构实验报告.doc
  6. 【转】2.1(译)关于async与await的FAQ
  7. win11菜单怎么添加快捷方式 Windows11开始菜单添加快捷方式的设置方法
  8. centos7 安装node
  9. oracle中游标详细用法
  10. 微信聊天机器人,不使用iChat,可以群聊
  11. Android测试总结
  12. scrapy入门之创建爬虫项目+scrapy常用命令
  13. Python3 文档批量助手
  14. 脑电伪迹降噪方法整理
  15. [硬件基础]开关电源和线性稳压器的优缺点?
  16. omnet++ 4维的立方体网络仿真
  17. 7-3 特立独行的幸福
  18. ARM开发板下Qt实现中文输入法的波折历程
  19. mac os终端设置
  20. 软件cs页面分辨率测试

热门文章

  1. 智能外呼系统 OKCC被盗打后安装防护系统还有用吗?
  2. Docker在Centos7安装、及命令(详细安装教程)
  3. UI设计师需要学习哪些技能?
  4. 清华计算机系开学典礼,清华大学举行2017级本科生新生开学典礼
  5. 2022年河北最新建筑八大员(材料员)模拟题库及答案
  6. 5个时间序列预测的深度学习模型对比总结:从模拟统计模型到可以预训练的无监督模型
  7. 通过钉钉网页上的js学习xss打cookie
  8. 儿童php钢板,儿童尺桡骨双骨折:弹性髓内钉还是钢板?
  9. java代码走读,Kafka代码走读-LogManager
  10. 快乐的强化学习2——DQN及其实现方法