react使用css module無法重寫bootstrap樣式問題及解決
使用css module無法重寫bootstrap樣式問題
react使用css module雖然能夠解決樣式污染,但是同時也失去了寫css樣式的靈活性,特別是:
在.module.css文件中當子元素是非變量的靜態(tài)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創(chuàng)建的項目,在安裝node-sass時可能存在依賴沖突,可能無法安裝較新版本的node-sass, 此時有兩種選擇:
- a. 降低node-sass的安裝版本
- b. 安裝Dart-sass, Dart Sass 是 Sass 的現(xiàn)代實現(xiàn),被廣泛用于前端開發(fā)中,特別是在構建和維護復雜的樣式表時,它可以提高效率和可維護性, 并且擁有更好的兼容性。
yarn add -D sass
第二步、在webpack.config.js配置.scss文件的匹配規(guī)則:
在webpack.config.js文件的module.rules部分增加以下配置:
module: { rules: [ ... { test: /\.scss$/, // 匹配SCSS文件 use: [ "style-loader",// 將樣式插入到HTML中 "css-loader", // 解析CSS "sass-loader" // 編譯SCSS ], }, ] }
react-app/react-eject創(chuàng)建的項目, 不需要做配置,因為已內置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模塊的環(huán)境下使用全局樣式(比如bootstrap這種)。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- React找不到模塊“./index.module.scss”或其相應的類型聲明及解決方法
- react 報錯Module build failed: BrowserslistError: Unknown browser query `dead`問題的解決方法
- 在?React?Native?中使用?CSS?Modules的配置方法
- 關于React Native報Cannot initialize a parameter of type''NSArray<id<RCTBridgeModule>>錯誤(解決方案)
- 在Create React App中使用CSS Modules的方法示例
- 在create-react-app中使用css modules的示例代碼
- 詳解使用create-react-app添加css modules、sasss和antd
相關文章
React Native中ScrollView組件輪播圖與ListView渲染列表組件用法實例分析
這篇文章主要介紹了React Native中ScrollView組件輪播圖與ListView渲染列表組件用法,結合實例形式詳細分析了ScrollView組件輪播圖與ListView渲染列表組件具體功能、使用方法與操作注意事項,需要的朋友可以參考下2020-01-01React-Native之TextInput組件的設置以及如何獲取輸入框的內容
這篇文章主要介紹了React-Native之TextInput組件的設置以及如何獲取輸入框的內容問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05