微前端架構 之 應用之間樣式隔離 (四)

1. 使用 CSS Modules 進行樣式隔離

1. 安裝必要的依賴
如果你使用 webpack 作為構建工具,你可能需要安裝 css-loader 和 style-loader。如果你的項目使用 Create React App 或其他現代前端框架,這些可能已經內置了。

npm install --save-dev css-loader style-loader

2. 編寫 CSS Modules 樣式
在微前端應用的MyComponent.module.css文件中:

/* MyComponent.module.css */  
.root {  display: flex;  align-items: center;  justify-content: center;  height: 100px;  background-color: #f0f0f0;  
}  .button {  padding: 10px 20px;  background-color: #007bff;  color: white;  border: none;  border-radius: 4px;  cursor: pointer;  
}

3. 在 React 組件中使用 CSS Modules
使用 styles.root 和 styles.button 而不是直接使用字符串 ‘root’ 和 ‘button’ 作為類名。CSS Modules 會自動為這些類名添加唯一的哈希值,以確保它們在每個微前端應用中都是唯一的。

// MyComponent.js  
import React from 'react';  
import styles from './MyComponent.module.css'; // 導入 CSS Modules  const MyComponent = () => (  <div className={styles.root}>  <button className={styles.button}>Click Me</button>  </div>  
);  export default MyComponent;

4. 配置 webpack(如果需要)

// webpack.config.js  
module.exports = {  // ...  module: {  rules: [  // ...  {  test: /\.css$/,  use: [  'style-loader',  {  loader: 'css-loader',  options: {  modules: true, // 啟用 CSS Modules  // 可以添加其他選項,如 localIdentName、camelCase 等  },  },  ],  },  // ...  ],  },  // ...  
};

在主應用中,你可以像平常一樣加載微前端應用。由于每個微前端應用都使用 CSS Modules 進行樣式隔離,因此它們之間的樣式不會相互干擾。

2. 使用 CSS 命名空間進行樣式隔離

為每個應用定義一個唯一的命名空間。這可以通過在 CSS 選擇器前添加特定的前綴來實現。
app-a 的 CSS

/* app-a.css */  
.app-a-root {  /* 應用 A 的根樣式 */  
}  .app-a-root .button {  /* 應用 A 的按鈕樣式 */  
}

app-b 的 CSS

/* app-b.css */  
.app-b-root {  /* 應用 B 的根樣式 */  
}  .app-b-root .button {  /* 應用 B 的按鈕樣式 */  
}

在應用中應用命名空間
app-a 的 HTML

//在實際應用中,你可能不需要在類名中重復根命名空間(如 .app-a-root-button)
<div class="app-a-root">  <button class="app-a-root-button">點擊我(應用 A</button>  
</div>

加載和隔離 CSS

最后,確保每個應用的 CSS 只在其自己的作用域內加載和應用。這可以通過在微前端框架中實現特定的加載和卸載邏輯來實現,或者通過使用
Webpack 的 css-loader 和 style-loader(或類似的工具)的 modules 選項來實現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15902.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15902.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot結合baomidou dynamic-datasource組件實現多數據源

dynamic-datasource組件實現多數據源 一、背景介紹二、 思路方案三、過程四、總結五、升華 一、背景介紹 博主最近研發的項目中由于業務需要&#xff0c;在項目中使用到多個數據源。使用到了baomidou的dynamic-datasource組件來實現訪問不同的數據源。覺得挺有意思的也是進行了…

Redis事務(1)

什么是事務&#xff1f; Redis 的事務和 MySQL 的事務概念上是類似的. 都是把?系列操作綁定成?組. 讓這?組能夠批量執行。 但是注意體會 Redis 的事務和 MySQL 事務的區別: 弱化的原?性: redis 沒有 “回滾機制”. 只能做到這些操作 “批量執?”. 不能做到 “?個失敗就…

海外鏈游地鐵跑酷全自動搬磚掛機掘金變現項目,號稱單窗口一天收益30+(教程+工具)

一、項目概述 地鐵跑酷海外版國外版自動搬磚掛機掘金項目是一款結合了地鐵跑酷元素的在線游戲&#xff0c;為玩家提供一個全新的游戲體驗&#xff0c;使得玩家可以輕松地進行游戲&#xff0c;無需手動操作&#xff0c;節省時間和精力。 二、游戲特點 1. 自動化操作&#xff1…

AI應用案例:影像報告智能輔助編輯系統

今天給大家介紹一個醫療行業的案例“影像報告智能輔助編輯系統”&#xff01;該案例已經在某三甲醫院落地&#xff0c;模型準確度超過80%。 該項目上線后&#xff0c;保守估計&#xff0c;能為每位醫生的每一張報告至少省下1分鐘時間和2分鐘的精力&#xff0c;20位初級醫生&…

Django Web:搭建Websocket服務器(入門篇)

Django Web架構 搭建Websocket服務器&#xff08;1&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

如何在Windows 10上對硬盤進行碎片整理?這里提供步驟

隨著時間的推移&#xff0c;由于文件系統中的碎片&#xff0c;硬盤驅動器可能會開始以較低的效率運行。為了加快驅動器的速度&#xff0c;你可以使用內置工具在Windows 10中對其進行碎片整理和優化。方法如下。 什么是碎片整理 隨著時間的推移&#xff0c;組成文件的數據塊&a…

Incremental Task and Motion Planning: A Constraint-Based Approach(翻譯)

摘要——我們提出了一種新的任務和運動算法規劃&#xff08;TMP&#xff09;&#xff0c;并討論獲得TMP的健壯解決方案所必需的需求和抽象。我們的迭代深化任務和運動規劃&#xff08;IDTMP&#xff09;與類似的、最先進的、概率完全的規劃器相比&#xff0c;該方法是概率完全的…

LeetCode熱題100——矩陣

73.矩陣清零 題目 給定一個 *m* x *n* 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 輸出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 示例…

【Linux】端口映射

外部訪問http://127.0.0.1&#xff08;默認端口80&#xff09; 實際訪問http://127.0.0.1:8080 //添加規則 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 //移除規則 iptables -t nat -L -nv --line-numbers iptables -t nat -D PREROUT…

HTML+CSS 玻璃按鈕

效果演示 Code <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>玻璃按鈕</title><li…

期權課程之第二節【買方和賣方的誤區和區別】

期權和股票不一樣&#xff0c;我們玩股票大部分情況我們只會做買方&#xff0c; 看漲多買點&#xff0c;看跌了減倉&#xff0c;或者直接離場&#xff0c;就算不看好的公司&#xff0c;一般也不會嘗試賣空股票的操作&#xff0c;但是期權不一樣&#xff0c;我們不僅能做買方還可…

設計模式 17 組合模式 Composite Pattern

設計模式 17 組合模式 Composite Pattern 1.定義 組合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又叫部分整體模式&#xff0c;是用于把一組相似的對象當作一個單一的對象。組合模式依據樹形結構來組合對象&#xff0c;用來表示部分以及整體層次。這種類型的設…

window好用的網速工具

這是一個用于顯示當前網速、CPU及內存利用率的桌面懸浮窗軟件&#xff0c;并支持任務欄顯示&#xff0c;支持更換皮膚。 github鏈接如下 https://github.com/zhongyang219/TrafficMonitor?tabreadme-ov-file

無人機飛手:ASFC無人機和航模愛好者證書詳解

ASFC無人機和航模愛好者證書是由中國航空運動協會&#xff08;ASFC&#xff09;頒發的一種無人機操作資格認證。這種證書在無人機和航模愛好者群體中享有廣泛的認可度&#xff0c;并被視為操作無人機的一種重要資質。 ASFC證書的定義和用途十分明確。它是民航局頒發的民用無人駕…

springboot3微服務下結合springsecurity的認證授權實現

1. 簡介 在微服務架構中&#xff0c;系統被拆分成許多小型、獨立的服務&#xff0c;每個服務負責一個功能模塊。這種架構風格帶來了一系列的優勢&#xff0c;如服務的獨立性、彈性、可伸縮性等。然而&#xff0c;它也帶來了一些挑戰&#xff0c;特別是在安全性方面。這時候就體…

【前端筆記】Vue項目報錯Error: Cannot find module ‘webpack/lib/RuleSet‘

網上搜了下發現原因不止一種&#xff0c;這里僅記錄本人遇到的原因和解決辦法&#xff0c;僅供參考 原因&#xff1a;因為某種原因導致本地package.json中vue/cli與全局vue/cli版本不同導致沖突。再次提示&#xff0c;這是本人遇到的&#xff0c;可能和大家有所不同&#xff0c…

一張圖片中有多個一樣的目標物體,分別進行識別定位分割(Python實現)

需求&#xff1a; 一張圖片中有多個目標物體&#xff0c;將多個目標物體進行識別分割定位 import cv2 import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img_path r"test3.png" img cv2.imread(img…

關于微信小程序低功耗藍牙ECharts實時刷新

最近搞了這方面的東西&#xff0c;是剛剛開始接觸微信小程序&#xff0c;因為是剛剛開始接觸藍牙設備&#xff0c;所以這篇文章適合既不熟悉小程序&#xff0c;又不熟悉藍牙的新手看。 項目要求是獲取到藍牙傳輸過來的數據&#xff0c;并顯示成圖表實時顯示&#xff1b; 我看了…

轉運機器人負載最高可達 1000kg,重復精度高達±5mm

轉運機器人&#xff0c;內部搭載ICD系列核心控制器&#xff0c;擁有不同的移載平臺&#xff0c;負載最高可達 1000kg;重復精度高達5mm;支持 Wi-Fi漫游&#xff0c;實現更穩健的網絡數據交互;無軌化激光 SLAM 導航&#xff0c;配合 3D 避障相機等多傳感器進行安全防護。轉運器人…

java中使用jedis連接redis

4.java中使用jedis連接redis