精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

CSS在DevTools 中架構演變?

開發 前端
本文主要解釋 CSS 在歷史上如何在 DevTools 中工作,以及如何在 DevTools 中現代化我們的 CSS,以準備(最終)遷移到用于在 JavaScript 文件中加載 CSS 的 Web 標準解決方案。

[[425667]]

你好,我是小弋。

這片文章描述了DevTools 架構在CSS層面所做的更改。

本文主要解釋 CSS 在歷史上如何在 DevTools 中工作,以及如何在 DevTools 中現代化我們的 CSS,以準備(最終)遷移到用于在 JavaScript 文件中加載 CSS 的 Web 標準解決方案。

DevTools 中 CSS 的先前狀態

DevTools 以兩種不同的方式實現 CSS:

  • 一種用于DevTools遺留部分中使用的 CSS 文件
  • 另一種用于 DevTools 中使用的現代 Web 組件。

對于第一種遺留部分的來說,我們翻開Chromium源碼,可以大致猜想它的實現:

Chromium源碼

DevTools 中的 CSS 實現是多年前定義的,現在已經過時了。DevTools 一直堅持使用該module.json模式,

那么我們來看下這個文件具體形式是如何的:

module.json

這些CSS文件會被放在同一個目錄下,為了將添加到 DevTools,您需要registerRequiredCSS使用要加載的文件的確切路徑進行調用。

那么它的調用如下:

  1. constructor() { 
  2.   … 
  3.   this.registerRequiredCSS('ui/legacy/components/quick_open/filteredListWidget.css'); 
  4.   … 

通過檢索CSS文件的內容后,通過appendStyle函數將內容插入到 <style>標簽中,

  1. const content = Root.Runtime.cachedResources.get(cssFile) || ''
  2.  
  3. if (!content) { 
  4.   console.error(cssFile + ' not preloaded. Check module.json'); 
  5.   
  6. const styleElement = document.createElement('style'); 
  7. styleElement.textContent = content; 
  8. node.appendChild(styleElement); 

但是,假設我們引入現代 Web 組件(使用自定義元素)時,我們最初決定在組件文件中通過內聯style>使用CSS。這帶來了自己的挑戰:

  • 缺少語法高亮支持:為內聯CSS提供語法高亮的插件往往不如為寫在.css文件中的CSS提供的語法高亮和自動完成功能好。
  • 建立性能開銷:內聯CSS也意味著需要進行兩次檢查:一次針對CSS文件,一次針對內聯CSS。如果所有的CSS都寫在獨立的CSS文件中,我們就可以消除這種性能開銷。
  • 減化體積的挑戰。內聯 CSS 不容易縮小,因此沒有任何 CSS 被縮小。DevTools 發布版本的文件大小也因同一 Web 組件的多個實例引入的重復 CSS 而增加。

基于以上的問題,那有哪些可以解決的方案呢?

研究潛在的解決方案

問題可以分為兩個不同的部分:

  • 弄清楚構建系統如何處理 CSS 文件。
  • 弄清楚 DevTools 如何導入和使用 CSS 文件。

接下來我們看下,他們是如何為每個部分研究了不同的潛在解決方案,下面概述了這些解決方案。

導入 CSS 文件

在TypeScript文件中導入和利用CSS的目的是為了盡可能地貼近標準,在整個DevTools中執行一致性,并避免在我們的HTML中重復CSS。我們還希望能夠選擇一個解決方案,使我們的變化能夠遷移到新的網絡平臺標準,如CSS模塊腳本。

由于這些原因,@import語句和標簽似乎并不適合DevTools。它們與DevTools其他部分的導入不一致,會導致Flash Of Unstyled Content(FOUC)的出現。遷移到CSS模塊腳本會更難,因為導入必須明確地添加,并且與標簽的處理方式不同。

  1. const output = LitHtml.html` 
  2. <style> @import "css/styles.css"; </style> 
  3. <button> Hello world </button>` 
  1. const output = LitHtml.html` 
  2. <link rel="stylesheet" href="styles.css"
  3. <button> Hello World </button>` 

總結的話,潛在的解決方案是使用@import或。

相反,我們選擇找到一種方法,將CSS文件作為CSSStyleSheet對象導入,這樣我們就可以使用其adoptedStyleSheets屬性將其添加到Shadow Dom(DevTools使用Shadow DOM已經有幾年了)。

至于Shadow DOM 不清楚的,可以參考:https://developers.google.com/web/fundamentals/web-components/shadowdom

使用 CSS 的新基礎架構

我們需要一種將 CSS 文件轉換為CSSStyleSheet對象的方法,以便我們可以輕松地在 TypeScript 文件中對其進行操作。最后選擇放棄Rollup和webpack做轉化,可能考慮的原因在于,構建過程中,將任何一個bundler 添加到生產構建中都可能存在潛在的性能問題。

我們與Chromium的GN構建系統的整合使得捆綁更加困難,因此捆綁器往往不能很好地與當前的Chromium構建系統整合。

相反,我們探索了使用當前 GN 構建系統為我們進行這種轉換的選項。

新的解決方案涉及到使用adoptedStyleSheets向特定的Shadow DOM添加樣式,同時使用GN構建系統來生成可被文檔或ShadowRoot采用的CSSStyleSheet對象。

  1. // CustomButton.ts 
  2.  
  3. // Import the CSS style sheet contents from a JS file generated from CSS 
  4. import customButtonStyles from './customButton.css.js'
  5. import otherStyles from './otherStyles.css.js'
  6.  
  7. export class CustomButton extends HTMLElement{ 
  8.   …  
  9.   connectedCallback(): void { 
  10.     // Add the styles to the shadow root scope 
  11.     this.shadow.adoptedStyleSheets = [customButtonStyles, otherStyles]; 
  12.   } 

使用adoptedStyleSheets有多種好處,包括:

  • 它正在成為一個現代的標準。
  • 防止重復的CSS。
  • 只對Shadow DOM應用樣式,這就避免了CSS文件中重復的類名或ID選擇器引起的問題。
  • 易于遷移到未來的網絡標準,如CSS模塊腳本和導入斷言。

該解決方案的唯一注意事項是,導入語句需要導入.css.js文件。為了讓GN在構建過程中生成一個CSS文件,我們編寫了generate_css_js_files.js腳本。構建系統現在處理每一個CSS文件,并將其轉換為一個JavaScript文件,該文件默認導出一個CSSStyleSheet對象。因為我們可以導入CSS文件并輕松地采用它。此外,我們現在還可以輕松地對生產構建進行最小化,節省文件大小。

iconButton.css.js 生成的例子:

  1. const styles = new CSSStyleSheet(); 
  2. styles.replaceSync( 
  3.   // In production, we also minify our CSS styles 
  4.   /`${isDebug ? output : cleanCSS.minify(output).styles} 
  5.   /*# sourceURL=${fileName} */`/ 
  6. ); 
  7.  
  8. export default styles; 

后續計劃

到目前為止,Chromium DevTools 中的所有 Web 組件都已遷移到使用新的 CSS 基礎架構,而不是使用內聯樣式。大多數遺留用法registerRequiredCSS也已遷移到使用新系統。剩下的就是刪除盡可能多的module.json文件,然后遷移當前的基礎架構以在未來實現 CSS 模塊腳本!

參考

[1]https://developer.chrome.com/blog/modernising-css-infra-in-devtools/

[2]https://source.chromium.org/chromium/chromium/src/+/main:third_party/devtools-frontend/src/front_end/ui/legacy/Treeoutline.ts

[3] https://developer.chrome.com/blog/migrating-to-web-components

 

責任編輯:姜華 來源: 天天Up
相關推薦

2022-01-11 20:42:28

CSS Chrome瀏覽器

2019-07-04 13:05:18

MySQL設計數據庫

2014-06-17 14:01:34

Mysql網站架構

2015-03-02 10:02:56

云端DevOpsSOA云管理工具

2016-08-08 13:59:02

MySQL架構數據庫

2022-07-04 08:14:24

架構演變Tomcat容器架構

2021-04-20 14:57:20

架構運維技術

2022-11-15 17:31:35

邊緣計算架構人工智能

2023-10-26 11:13:31

2020-08-05 08:23:19

架構Java微服務

2010-09-08 15:16:46

clearCSS

2010-09-09 16:54:05

CSSclear

2022-01-10 14:09:47

供應鏈安全分析技術網絡安全

2009-08-26 18:20:42

三層架構

2020-10-28 09:12:48

React架構Hooks

2024-05-10 09:36:36

架構消息隊列

2022-09-02 09:01:36

ChromeWeb調試

2022-11-14 08:32:51

CSS組件Box

2021-11-09 14:33:12

人工智能AI深度學習

2012-07-09 09:08:57

傳統商業模式
點贊
收藏

51CTO技術棧公眾號

欧美日韩亚洲一区三区| 国产成人免费视频网站视频社区| 国产色产综合色产在线视频| 国产日韩精品视频| 久久久夜色精品| 西野翔中文久久精品国产| 在线观看日韩国产| 黄色成人在线免费观看| 免费成人av电影| 国产美女娇喘av呻吟久久| 51色欧美片视频在线观看| 貂蝉被到爽流白浆在线观看| 国产亚洲成av人片在线观黄桃| 91成人免费网站| 人妻激情另类乱人伦人妻| 精品亚洲综合| 成人av在线资源| 国产三级精品网站| 日韩在线视频不卡| 国产精品99免费看| 日韩在线一区二区三区免费视频| 中文成人无字幕乱码精品区| **精品中文字幕一区二区三区| 欧美性xxxxx极品娇小| 中文字幕乱码免费| 91se在线| 国产日韩精品久久久| 精品乱码一区二区三区| 国产免费黄色大片| 美女尤物国产一区| 日本久久久久久久久| 久久一级黄色片| 91精品啪在线观看国产81旧版 | 美女喷白浆视频| 麻豆蜜桃在线| 伊人开心综合网| 在线丝袜欧美日韩制服| 国产视频精选在线| 久久久另类综合| 久久精彩视频| 五月婷婷六月激情| 成人美女在线视频| 99re在线视频观看| 国产乱人乱偷精品视频| 蜜桃av一区二区三区电影| 人人澡人人澡人人看欧美| 日韩美女黄色片| 亚洲经典三级| 久久久爽爽爽美女图片| 美女视频黄免费| 欧美精品偷拍| 欧美国产视频日韩| 久久国产免费观看| 韩国欧美一区| 97视频免费观看| 九九精品免费视频| 欧美亚洲视频| 国产成人久久久精品一区| 天堂中文在线网| 久久这里只有| 国产精品久久久av| 最新在线中文字幕| 美女在线一区二区| 91嫩草在线视频| www.五月激情| 波波电影院一区二区三区| 国产一区二区三区奇米久涩| 四虎国产精品永远| 国产亚洲人成网站| 亚洲图片欧洲图片日韩av| 日本高清中文字幕在线| 亚洲三级视频在线观看| www.成年人视频| 老色鬼在线视频| 一本色道**综合亚洲精品蜜桃冫| 男女曰b免费视频| 亚洲精品aaa| 日韩欧美一区二区三区在线| 国产极品一区二区| 国产成人一区| 日韩视频在线观看免费| 久久成人在线观看| 石原莉奈在线亚洲二区| 国产又爽又黄的激情精品视频| 国产伦精品一区二区三区视频痴汉 | 成人欧美一区二区三区黑人麻豆| 国产一二三四区在线观看| 欧美男男video| 色综合一区二区| 欧美一级特黄aaa| 蜜臀av一区| 自拍偷拍亚洲区| 黄网站免费在线| 青青国产91久久久久久| 97碰碰视频| 欧美日韩免费做爰大片| 日韩久久一区二区| 国产精品50p| 色综合视频一区二区三区44| 亚洲国产精品va| 99精品中文字幕| 一本色道久久综合亚洲精品不卡| 国产日韩专区在线| 婷婷婷国产在线视频| 成人欧美一区二区三区小说 | 性爽视频在线| 日韩一区二区免费在线电影| 无码人妻精品一区二区中文| 国产精品激情| 91精品免费久久久久久久久| 三级国产在线观看| 一区二区三区日韩精品| 日本www.色| 五月天亚洲一区| 欧美—级高清免费播放| 91影院在线播放| 久久久电影一区二区三区| 亚洲精品蜜桃久久久久久| 国产福利亚洲| 国产午夜精品一区理论片飘花 | www.av天天| 99香蕉国产精品偷在线观看| 91色琪琪电影亚洲精品久久| 国产中文字幕在线播放| 五月激情综合婷婷| 免费国偷自产拍精品视频| 欧美视频网址| 国产91在线播放| 性xxxx视频播放免费| 亚洲黄色性网站| 91插插插影院| 亚洲成av人片乱码色午夜| 国产精品极品美女在线观看免费| 欧美视频免费一区二区三区| 亚洲v日本v欧美v久久精品| 超碰成人在线播放| 成人一区二区| 国产精品视频永久免费播放| 韩国免费在线视频| 欧美性生交xxxxxdddd| 污污免费在线观看| 国产精品大片免费观看| 99国产超薄丝袜足j在线观看 | 日韩一区二区在线| 国产精品精品视频一区二区三区| 天堂√在线中文官网在线| 亚洲不卡在线观看| 亚洲av无码成人精品国产| 9国产精品视频| 精品日本一区二区三区| 日韩伦理在线一区| 日韩乱码在线视频| 久久99国产综合精品免费| 久久女同性恋中文字幕| 日本精品久久久久中文字幕| 国产区精品区| 国产精品网红福利| 日本在线视频网| 欧美一区二区三区小说| 国产在线观看你懂的| 成人av在线一区二区| 欧美在线观看成人| 国产日产精品_国产精品毛片| 国产精品电影网| 日本视频不卡| 精品盗摄一区二区三区| 国产尤物在线视频| 国产蜜臀97一区二区三区| 亚洲精品视频三区| 国内精品久久久久久久97牛牛| 国产一区二区不卡视频在线观看| 黄色成人免费网| 中文字幕亚洲二区| 性中国xxx极品hd| 精品久久久久国产| 天天操天天干天天操天天干| 国产最新精品免费| 少妇高潮毛片色欲ava片| 久久99蜜桃| 91亚洲精品视频| av中文资源在线资源免费观看| 亚洲码在线观看| 99热精品在线播放| 亚洲不卡一区二区三区| 在线观看免费小视频| 国产精品69久久久久水密桃| www国产黄色| 最新欧美人z0oozo0| 久久精品日产第一区二区三区| 成人全视频在线观看在线播放高清 | 日本少妇xxxxx| 国产精品18久久久| 成人羞羞国产免费网站| 午夜精品毛片| 欧美男人的天堂| 日韩成人在线观看视频| 国产成人一区二区| 毛片网站在线看| 日韩在线观看免费网站| 四虎电影院在线观看| 日韩欧美国产综合在线一区二区三区| 特级西西444www大精品视频免费看| 亚洲欧洲精品一区二区三区| 亚洲欧美在线不卡| 国产一区二区影院| 日av中文字幕| 精品91在线| 三年中国中文在线观看免费播放| 牲欧美videos精品| 成人动漫视频在线观看免费| 国外成人福利视频| 欧美中文在线观看国产| 欧美日韩在线视频免费观看| 日韩一区二区在线视频| 黄色在线播放| 亚洲精品电影在线观看| 99在线观看免费| 欧美剧情电影在线观看完整版免费励志电影 | 下面一进一出好爽视频| 蜜臀av一区二区在线免费观看 | 自拍偷拍亚洲色图欧美| 亚洲69av| 蜜桃视频日韩| 久久精品66| 国产精品二区在线观看| 国产午夜亚洲精品一级在线| 国产精品视频网址| abab456成人免费网址| 欧洲成人在线观看| 交100部在线观看| 久久久久久久成人| 女人黄色免费在线观看| 欧美另类交人妖| 在线观看小视频| 久久91亚洲精品中文字幕奶水| 国产在线更新| 久久综合久中文字幕青草| 毛片av在线| 久久av红桃一区二区小说| 麻豆系列在线观看| www日韩欧美| 黄色成年人视频在线观看| 中文字幕精品视频| seseavlu视频在线| 中文字幕日韩在线播放| 在线观看二区| yw.139尤物在线精品视频| 欧美极品视频| 久久精品国产96久久久香蕉| 浪潮av一区| 精品自在线视频| xxx.xxx欧美| 欧美亚洲激情视频| 欧美大电影免费观看| 国产成人久久久精品一区| 国产香蕉久久| 亚洲自拍偷拍在线| 99re8这里有精品热视频免费 | 日韩欧美综合| 中国一级黄色录像| 国产精品jizz在线观看美国| 妞干网在线观看视频| 老鸭窝亚洲一区二区三区| av在线无限看| 国产一区二区h| 岛国精品一区二区三区| 99re在线视频这里只有精品| 欧美特黄一区二区三区| 亚洲国产精品t66y| 中文字幕五月天| 亚洲第一av色| 免费污污视频在线观看| 69堂精品视频| 亚洲精品一区二区口爆| 亚洲色图第一页| 国产cdts系列另类在线观看| 久久久久亚洲精品| 国产免费不卡| 91在线|亚洲| 色婷婷精品视频| 国产盗摄视频在线观看| 性高湖久久久久久久久| 911福利视频| 91一区一区三区| 国产尤物在线播放| 精品毛片三在线观看| 92久久精品一区二区| 亚洲护士老师的毛茸茸最新章节| 搞黄视频在线观看| 欧美国产乱视频| 99久久伊人| 精品国产一区二区三区麻豆免费观看完整版 | 奇门遁甲1982国语版免费观看高清| 99热播精品免费| 国产日韩欧美一区二区| 91久久夜色精品国产按摩| 日本a在线免费观看| 九一九一国产精品| 国产ts丝袜人妖系列视频| 亚洲女爱视频在线| 国产污视频网站| 精品国产123| 国产在线一区二区视频| 国产成人高清激情视频在线观看| 少妇精品在线| 亚洲图片欧洲图片日韩av| 午夜在线一区| 成年女人免费视频| 亚洲欧美偷拍另类a∨色屁股| 亚洲大片免费观看| 亚洲成人网在线| 色呦呦在线资源| 91免费看片在线| 99热国内精品永久免费观看| 欧美牲交a欧美牲交aⅴ免费真| 粉嫩av一区二区三区粉嫩| 久久久久久久久久97| 欧洲精品在线观看| 青青草娱乐在线| 国内精品久久久久| 77成人影视| 欧美大片免费播放| 久久99精品久久久| 一二三四国产精品| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 免费亚洲精品视频| 精品成人久久| 国产大尺度视频| 亚洲精品大片www| 国产又大又黄又爽| 日韩在线视频导航| 亚洲国产91视频| 在线免费观看成人| 麻豆精品精品国产自在97香蕉| 国产午夜福利一区| 在线欧美日韩精品| 国产精品免费播放| 国产精品久久久久久久久男| 国产亚洲电影| 国产精品天天av精麻传媒| 国产亲近乱来精品视频| 日本三级一区二区三区| 国产一区二区三区视频在线观看| 澳门av一区二区三区| 视频一区视频二区视频三区视频四区国产 | 欧美日韩免费观看一区=区三区| 黄色片免费网址| 亚洲日本一区二区| 精品欧美一区二区精品少妇| 九九九久久国产免费| 国产+成+人+亚洲欧洲在线| 男女日批视频在线观看| av激情亚洲男人天堂| 麻豆久久久久久久久久| 亚洲精品在线观看www| 欧美中文字幕精在线不卡| 日韩欧美亚洲区| 捆绑调教美女网站视频一区| 杨钰莹一级淫片aaaaaa播放| 日韩一级高清毛片| 国产丝袜在线观看视频| 久久国产精品-国产精品| 久久久精品性| 2014亚洲天堂| 欧美成人猛片aaaaaaa| 三级在线观看视频| 三区精品视频| 韩国精品一区二区| 日本少妇毛茸茸高潮| 亚洲欧美国产视频| av一级久久| 好吊妞无缓冲视频观看| 国产欧美一区二区三区沐欲 | 全球最大av网站久久| 日本精品免费视频| 99久免费精品视频在线观看| 在线观看一二三区| 欧美高清在线观看| 夜色77av精品影院| 亚洲天堂一区二区在线观看| 亚洲h精品动漫在线观看| 国产原创av在线| 高清av免费一区中文字幕| 久久在线91| 久久久久久久久久91| 亚洲欧洲日韩国产| 麻豆精品久久| 国产又大又硬又粗| 亚洲日本在线视频观看| 欧美一区二区视频| 97夜夜澡人人双人人人喊| 久久精品官网| 欧美日韩一级在线观看| 亚洲天天在线日亚洲洲精| 香港久久久电影| 国产一二三四在线视频| 亚洲成人午夜电影| 日本天堂在线观看| 欧美日本国产精品| 成人综合婷婷国产精品久久免费|