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

解决react使用css module无法重写bootstrap样式的问题

react使用css module虽然能够解决样式污染,但是同时也失去了写css样式的灵活性,特别是:在.module.css文件中当子元素是非变量的静态class类(比如bootstrap), 此时使用css选择器对该子元素的样式不会起作用的

比如下面这样:

// xx组件.module.css

.className变量     .bootstrap类名(比如:Button)      {

 font-size: 20px

}

 此时这个样式是没法生效的!

 解决办法: 

第一步:安装sass-loader, style-loader, node-sass

这里需要注意node-sass跟node版本的对应关系:node-sass - npm

 react-app/react-eject创建的项目,在安装node-sass时可能存在依赖冲突,可能无法安装较新版本的node-sass, 此时有两种选择:

   a.  降低node-sass的安装版本

   b. 安装Dart-sass, Dart Sass 是 Sass 的现代实现,被广泛用于前端开发中,特别是在构建和维护复杂的样式表时,它可以提高效率和可维护性, 并且拥有更好的兼容性。

      yarn add -D sass

 第二步、在webpack.config.js配置.scss文件的匹配规则:

webpack.config.js文件的module.rules部分增加以下配置:

module:  {

  rules:  [

    ...

             { test: /\.scss$/, // 匹配SCSS文件

                    use: [

                   "style-loader",// 将样式插入到HTML中

                    "css-loader",  // 解析CSS

                    "sass-loader" // 编译SCSS

                  ],      

             },

           ]

   }

 react-app/react-eject创建的项目, 不需要做配置,因为已内置sass支持:

第三步: 讲css module的后缀从.module.css改成.module.scss, 并使用:global关键字将bootstrap样式用{}包裹起来:

.formFont { //  通过sass解决css模块选择子元素的问题

  :global { // :global关键字必须要有,否则子元素样式不会生效

    .control-label {

        font-size: 20px;

      }

  }

}

:global关键字的作用:

被:global修饰的类名,比如, :global(.myClass),它不会被sass编译为哈希字符串,而会保留原始类名 "myClass",这样就能在css模块的环境下使用全局样式(比如bootstrap这种)。

http://www.lryc.cn/news/191242.html

相关文章:

  • 自动驾驶软件和人工智能
  • 堆叠、集群技术
  • SpringCould微服务保护01——Sentinel组件下载并使用
  • 可扩展性对物联网管理系统有哪些影响?
  • 洗地机哪个品牌最耐用质量好?2023年最好用的洗地机
  • 计算机视觉(Computer Vision, CV)是什么?
  • 【【萌新的SOC学习之自定义IP核 AXI4接口】】
  • 设计模式-创建型模式
  • golang中的RSA算法,加密解密,签名校验,导出公钥密钥,导入公钥密钥
  • 修炼k8s+flink+hdfs+dlink(四:k8s(二)组件)
  • Android约束布局ConstraintLayout流式Flow
  • Android JNI代码语法解释
  • 小程序和前台开发软件定制的相关信息|APP网站搭建
  • JVM监控及诊断工具-GUI篇
  • 【C++STL基础入门】list基本使用
  • WSL+vscode配置miniob环境
  • Flutter SliverAppBar 吸顶效果
  • Java Spring Boot 自动装配:简化配置和提高开发效率
  • 对象转换之modelmapper
  • Ant Design+react 路由跳转
  • 提高爬虫效率的秘诀之一:合理配置库池数量
  • 初学者必看,前端 Debugger 调试学习
  • Dubbo—Admin 整体架构与安装步骤
  • C++11打断线程的几种方式
  • 如何提升网站排名和用户体验:优化网站速度
  • 【Redis】Hash 哈希内部编码方式
  • JUC第二十八讲:JUC工具类: Semaphore详解
  • vue3组合式API实现父组件触发子组件中的方法 | vue3中ref的用法 | defineExpose的使用场景
  • 【Qt之QTableWidget和QTreeWidget】树悬停、选择样式及表格表头和首行间隔线
  • 使用余弦算法计算向量相似性