成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在Shadow DOM/Web組件中覆蓋CSS

開發(fā) 前端
本文介紹了使用CSS自定義屬性穿透Shadow DOM并使你的Web組件可自定義的基礎知識。

Web組件(Web Components)的主要目的之一是提供封裝——能夠隱藏HTML標記結構和CSS樣式,并與頁面上的其他代碼分離,這樣不同的部分就不會沖突,通過這種方式,這樣代碼就可以保持漂亮和干凈。

影子DOM(Shadow DOM)為我們提供了范圍限定的樣式封裝,并提供了一種讓我們隨意選擇進入(盡可能少)外界的方法。

但是,如果我想使我的組件可自定義某些樣式屬性,該怎么辦?

本文介紹了使用CSS自定義屬性穿透Shadow DOM并使你的Web組件可自定義的基礎知識。

創(chuàng)建一個HTML元素

我們將使用擴展基本HTML Element的JavaScript類創(chuàng)建自定義HTML元素。然后,我們將使用要創(chuàng)建的標簽名稱和剛剛創(chuàng)建的類調(diào)用 customElements.define()。

  1. class AppCard extends HTMLElement {...} 
  2. window.customElements.define('app-card', AppCard); 

在此示例中,我們將創(chuàng)建此簡單的Material Design卡片,當我們在HTML上添加此元素時將顯示該元素:<app-card></ app-card>

如何在Shadow DOM/Web組件中覆蓋CSS

首先,我們創(chuàng)建Shadow DOM root,然后將HTML和CSS字符串分配給Shadow DOM root 的 innerHTML,如下所示。

  1. class AppCard extends HTMLElement { 
  2.   constructor() { 
  3.     super(); 
  4.     const shadowRoot = this.attachShadow({mode: 'open'}); 
  5.         shadowRoot.innerHTML = ` 
  6.       <style> 
  7.         .card { 
  8.           background-color: #fff; 
  9.           ... 
  10.         } 
  11.       </style> 
  12.       <div class="card"> 
  13.         <div>Card title</div> 
  14.       </div> 
  15.     `; 
  16.   }}window.customElements.define('app-card', AppCard); 

覆蓋嘗試

在此示例中,我們要修改卡的背景顏色。如果它是HTML中的簡單 div 元素,則可以覆蓋 card 類或通過CSS選擇器訪問 div 元素。但是,以下嘗試將無效:

  1. // access the div  
  2. app-card > div { 
  3.   background-color: #2196F3; 
  4. // override card class 
  5. app-card > .card { 
  6.   background-color: #2196F3; 

使用CSS自定義屬性

為了解決這個問題,我們可以使用CSS自定義屬性(CSS變量)。可以使用CSS中定義的CSS自定義屬性來更改自定義元素中的某些CSS屬性。

按照我們的例子,我們將使用屬性 background-color 上的變量 card-bg 來獲取誰在使用自定義元素所定義的顏色。

  1. class AppCard extends HTMLElement { 
  2.   constructor() { 
  3.     super(); 
  4.     const shadowRoot = this.attachShadow({mode: 'open'}); 
  5.         shadowRoot.innerHTML = ` 
  6.       <style> 
  7.         .card { 
  8.           background-color: var(--card-bg, #fff); 
  9.           ... 
  10.         } 
  11.       </style> 
  12.       <div class="card"> 
  13.         <div>Card title</div> 
  14.       </div> 
  15.     `; 
  16.   }}window.customElements.define('app-card', AppCard); 

現(xiàn)在,我們將使用 app-card 自定義元素,并在Body元素的CSS中創(chuàng)建 card-bg 變量,我們將十六進制顏色 #2196F3 分配給變量。

  1. <html> 
  2.   <head> 
  3.     <style> 
  4.       body { 
  5.         --card-bg: #2196F3; 
  6.       } 
  7.     </style> 
  8.   </head> 
  9.   <body> 
  10.     <app-card></app-card> 
  11.   </body> 
  12. </html> 
如何在Shadow DOM/Web組件中覆蓋CSS

總結

使用這種策略,我們可以在你的文檔中擁有一個封裝的CSS元素,同時我們可以允許使用CSS對一些屬性進行自定義。你可以在這里訪問一個完整的例子。

 

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2014-05-26 16:29:12

Shadow DomWeb Compone

2022-02-10 22:24:05

DOM結構工具

2014-05-26 16:16:59

Shadow DomWeb Compone

2021-04-09 18:01:03

前端ReactDOM

2021-02-26 15:10:00

前端React組件交互

2022-05-13 21:20:23

組件庫樣式選擇器

2011-08-19 15:53:01

Windows7Windows日歷組件

2009-01-30 09:12:11

SpringApplicationJavaWeb

2020-07-14 08:31:42

CSS網(wǎng)格布局項目

2022-11-08 11:39:34

Web瀏覽器深色模式

2022-06-09 13:52:35

Vue協(xié)作開發(fā)項目

2021-07-07 08:01:48

CSS DOM解析

2009-04-15 10:08:00

Wi-Fi無線網(wǎng)絡優(yōu)化

2015-08-27 13:23:42

CoreOSKubernetesKubelet

2016-01-25 12:25:58

UbuntuFedoraGitLab

2010-09-08 16:50:11

JavaScriptDOM操作

2021-01-11 07:51:16

DOM對象節(jié)點樹

2010-07-08 16:14:14

UML組件圖

2010-05-18 14:25:11

IIS服務器

2011-12-29 15:35:39

Web
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级欧美日韩 | 欧美日韩国产免费 | 国产区在线免费观看 | 午夜免费精品视频 | 欧美精品久久久 | 81精品国产乱码久久久久久 | 婷婷综合 | 亚洲一区二区三区四区五区午夜 | 午夜激情视频在线 | 在线视频成人 | 中文字幕日韩欧美一区二区三区 | 亚洲人在线播放 | 中文在线a在线 | 中文字幕av高清 | 女人毛片a毛片久久人人 | 亚洲精品国产成人 | 欧美在线日韩 | 国产一二区免费视频 | 一区二区三区久久久 | 一区二区三区回区在观看免费视频 | 特黄小视频| 国产91网址 | 欧美一区二区三区在线观看 | 日韩精品在线免费观看视频 | 国产精品视频免费看 | 色综合一区 | 日韩av中文 | 皇色视频在线 | 欧洲毛片| 久草免费在线视频 | 超碰在线免费公开 | 久久久久久免费精品一区二区三区 | 日韩一区二区成人 | 久久综合香蕉 | 久久精品国产一区 | 精品久久久久久久 | 三级欧美 | 国产色视频网站 | 大陆一级毛片免费视频观看 | 波多野吉衣久久 | 国产精品久久久久久久久久久久冷 |