偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何像導入 JS 模塊一樣導入 CSS?

安全
剛剛發(fā)布的 Chrome 93 版本中更新了一項令人興奮的新特性:CSS Module Script,使用它你可以像導入一個 JavaScript 模塊一樣加載 CSS 樣式。

剛剛發(fā)布的 Chrome 93 版本中更新了一項令人興奮的新特性:CSS Module Script,使用它你可以像導入一個 JavaScript 模塊一樣加載 CSS 樣式。

然后,你可以將 CSS 樣式與可構(gòu)造樣式表(Constructable Stylesheet) 相同的方式作用于 document 和 shadow dom,這比其他加載 CSS 的方式更方便、更高效。

什么是可構(gòu)造樣式表?

在了解 CSS Module Script 之前,我們先來了解下啥是可構(gòu)造樣式表(Constructable Stylesheet)。和表面意思一樣,它是為了 CssStyleSheet 可直接構(gòu)造而設計的,在 document 和 shadow dom 下都可以使用。

使用可構(gòu)造樣式表:

  • 通過 new CSSStyleSheet() 構(gòu)造一個樣式表
  • 改變可構(gòu)造樣式表
  • 通過 adoptedStyleSheets 使用可構(gòu)造樣式表

改變可構(gòu)造樣式表有如下API:

  • insertRule(rule,index) 往 cssRules 屬性里插入 rule
  • deleteRule(rule,index) 從 cssRules 屬性里刪除 rule
  • replace(text) 異步替換 cssRules
  • replaceSync(text) 同步的 replace
  1. // Construct the CSSStyleSheet 
  2. const stylesheet = new CSSStyleSheet(); 
  3.   
  4. // Add some CSS 
  5. stylesheet.replaceSync('body { background: #000 !important; }') 
  6. // OR stylesheet.replace, which returns a Promise instead 
  7.   
  8. // Tell the document to adopt your new stylesheet. 
  9. // Note that this also works with Shadow Roots. 
  10. document.adoptedStyleSheets = [...document.adoptedStyleSheets, stylesheet]; 

使用 CSS Module Script

引入 CSS Module Script 將作用于 document 和 shadow dom,如下:

  1. import sheet from './styles.css' assert { type: 'css' }; 
  2. document.adoptedStyleSheets = [sheet]; 
  3. shadowRoot.adoptedStyleSheets = [sheet]; 

CSS Module Script 默認導出的是一個 可構(gòu)造樣式表 ,與任何其他 可構(gòu)造樣式表 一樣,它使用 adoptedstylesheet 作用于 document 和 shadow dom。

和其他使用 JavaScript 引入 CSS 的方式不同,你無需創(chuàng)建一個<script>標簽,也不需要把 CSS 插入混淆后的 JavaScript 中。

CSS Module 也有像 JavaScript Module 一樣的優(yōu)點:

  • 重復數(shù)據(jù)刪除:如果從應用的多個位置導入相同的 CSS 文件,它仍然只會被提取、實例化和解析一次。
  • 一致的順序:如果導入一個 JavaScript 運行時,它可以依賴于已經(jīng)解析過的樣式表。
  • 安全性:模塊使用 CORS 加載,并且使用嚴格的 MIME 類型檢查。

導入斷言(assert)是什么?

import 語句的 assert {type: 'css'} 部分是一個 import 斷言,這是必需要聲明的的;如果沒有它,CSS 將被認為是一個普通的 JavaScript 模塊,如果導入的文件具有非 JavaScript MIME 類型,則會導入失敗。

  1. import sheet from './styles.css'; // Failed to load module script: 
  2.                                   // Expected a JavaScript module 
  3.                                   // script but the server responded 
  4.                                   // with a MIME type of "text/css". 

樣式表的動態(tài)導入類似于 JavaScript 模塊的動態(tài)導入,你還可以用 dynamic import 導入 CSS 模塊:

  1. const cssModule = await import('./style.css', { 
  2.   assert: { type: 'css' } 
  3. }); 
  4. document.adoptedStyleSheets = [cssModule.default]; 

這里有個坑需要注意,被添加到 adoptedstylesheet 的并不是 cssModule本身,而是 cssModule.default。

@import 的規(guī)則尚未支持

目前,CSS@import 的規(guī)則不適用 于可構(gòu)造樣式表,包括 CSS Module Script。如果 CSS 模塊中含有@import 規(guī)則,則這些規(guī)則將被忽略。

  1. /* atImported.css */ 
  2. div { 
  3.     background-color: blue; 
  1. /* styles.css */ 
  2. @import url('./atImported.css'); /* Ignored in CSS module */ 
  3. div { 
  4.     border: 1em solid green; 
  1. <!-- index.html --> 
  2. <script type="module"> 
  3.     import styles from './styles.css' assert { type: "css" }; 
  4.     document.adoptedStyleSheets = [styles]; 
  5. </script> 
  6. <div>This div will have a green border but no background color.</div> 

目前 Firefox 和 Safari 瀏覽器尚未支持,不過未來可期~

 

責任編輯:趙寧寧 來源: code秘密花園
相關(guān)推薦

2023-11-01 08:36:07

CSSTailwind

2015-03-16 12:50:44

2013-08-22 10:17:51

Google大數(shù)據(jù)業(yè)務價值

2021-08-12 06:08:15

CSS 技巧組件狀態(tài)

2023-04-05 14:19:07

FlinkRedisNoSQL

2017-05-22 10:33:14

PythonJuliaCython

2022-10-21 13:52:56

JS 報錯調(diào)試本地源碼

2022-12-13 07:41:43

CSSCSS Houdi

2022-12-21 15:56:23

代碼文檔工具

2013-12-31 09:19:23

Python調(diào)試

2023-05-23 13:59:41

RustPython程序

2013-12-17 09:02:03

Python調(diào)試

2013-07-26 10:15:29

云計算大數(shù)據(jù)Hadoop

2016-10-08 00:24:53

httptcp實時

2020-09-30 17:12:09

人工智能技術(shù)數(shù)據(jù)

2017-11-06 14:18:03

2020-08-25 08:56:55

Pythonawk字符串

2021-06-30 08:00:31

ECMAScriptimport 模塊JavaScript

2021-05-20 08:37:32

multiprocesPython線程
點贊
收藏

51CTO技術(shù)棧公眾號