目錄
$ {title}
首頁 web前端 css教學 通過用於Web組件的樣式選項進行思考

通過用於Web組件的樣式選項進行思考

Apr 12, 2025 am 10:02 AM

通過用於Web組件的樣式選項進行思考

您將樣式放在網絡組件中的位置?

我假設我們在這裡使用Shadow dom,因為對我來說,這是Web組件的最大吸引力之一:平台的東西,它是只有平台才能做到的獨特功能。因此,這是關於以一種不散發的方式定義Web組件的樣式,而不是一種使全局樣式洩漏的方法(儘管這也非常有趣,這可以通過自定義屬性來完成,我們將在文章後面查看)。

如果您要在JavaScript內構建模板 - 這很不錯,因為模板文字以及我們如何將數據很好地撒在模板中 - 您需要在JavaScript中訪問這些樣式。

 const模板=`
   $ {styles} 
  <div>
    <h2 id="title"> $ {title} </h2>
    $ {content}
  </div>
`;
登入後複製

該樣式變量從何而來?也許也是一個字面的模板?

 const樣式=`
  :主持人 {
    背景:白色;
  }
  H2 {
    字體:900 1.5REM/1.1 -System-UI,sans-serif;
  }
`;
登入後複製

我想這很好,但是它使您試圖構建此Web組件的班上某個地方的一大凌亂的代碼塊。

另一種方法是模板並製作塊的部分。

 
  
    :主持人 {
      背景:白色;
    }
    H2 {
      字體:900 1.5REM/1.1 -System-UI,sans-serif;
    }
  

  <div>
    <h2> </h2>
    <p> </p>
  </div>
登入後複製

我可以看到這種吸引力,因為它將HTML保持在HTML中。我不喜歡它的是您必須做一堆手動的shadowroot.queryselector(“#title-hook”)。 innerhtml = mydata.title;工作以充實該模板。那感覺不像是方便的模板。我也不喜歡您只需要在HTML中的某個位置將此模板插入。在哪裡?我不知道。只是把它卡在那裡。 chuck。

CSS也被移出JavaScript,但它只是從一個尷尬的位置移到了另一個位置。

如果我們想將CSS保存在CSS文件中,我們可以這樣做:

 
  
    @Import“ /css/components/card.css”;
  

  <div>
    <h2> </h2>
    <p> </p>
  </div>
登入後複製

(顯然,使用顯然是棄用的。)

現在,我們有了@Import,這是一個額外的HTTP請求,並且因表現出色而臭名昭著。史蒂文·蘭伯特(Steven Lambert)的一篇文章說,它的時鐘速度較慢半秒。不理想。我認為這樣做會更好:

類MyComponent擴展了HTMlelemt {
    
  constructor(){
    極好的();
    this.attachshadow({mode:“ open”});

    fetch('/css/組件/card.css')
      。
      。然後(data => {
        令node = document.createelement('style');
        node.innerhtml = data;
        document.body.body.appendchild(node);
      });
  }

  // ...
}
登入後複製

似乎這可能是未建立的WEB組件?我想我應該下車並進行測試。

現在我再次研究了這個問題,好像::部分已經得到了一些蒸汽(解釋器)。所以我可以做...

 const模板=`
  <div part="“" card>
    <h2 id="title"> $ {title} </h2>
    $ {content}
  </div>
`;
登入後複製

…然後在僅適用於陰影DOM內的全局樣式表中編寫樣式,例如:

 my-card :: part(card){
  背景:黑色;
  顏色:白色;
}
登入後複製

…哪個有瀏覽器支持,但也許還不夠?

這些“零件”選擇器只能觸摸其連接到的確切元素。您必須通過將零件名稱應用於每個DOM節點,然後完全單獨造型來完成所有樣式。這並不有趣,尤其是因為陰影DOM的吸引力是我們應該能夠編寫寬鬆的CSS選擇器,而不必擔心我們的H2 {}樣式會洩漏到整個地方。

看起來本機CSS模塊成為一件事情,那將是可能發生的最有用的事情。

從'./styles.css'導入樣式';

類骨髓擴展了htmlelemt {
  constructor(){
    this.attachshadow({mode:open});
    this.shadowroot.AdoptedStyleSheets = [styles];
  }
}
登入後複製

但是,我不確定這是任何形式的提升。似乎這將是這與@Import之間的洗滌。我不得不說我更喜歡天然CSS模塊的清晰度和語法。很高興在使用JavaScript時編寫JavaScript。

可構造的樣式表也有助於在多個組件上共享樣式表。但是CSS模塊的方法看起來也可以做到這一點,因為當時樣式表已經成為變量。

以上是通過用於Web組件的樣式選項進行思考的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

我們如何創建一個在SVG中生成格子呢模式的靜態站點 我們如何創建一個在SVG中生成格子呢模式的靜態站點 Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

如何在WordPress主題中構建VUE組件 如何在WordPress主題中構建VUE組件 Apr 11, 2025 am 11:03 AM

內聯式模板指令使我們能夠將豐富的VUE組件構建為對現有WordPress標記的逐步增強。

php是A-OK用於模板 php是A-OK用於模板 Apr 11, 2025 am 11:04 AM

PHP模板通常會因促進Subpar代碼而變得不良說唱,但這並不是這樣的情況。讓我們看一下PHP項目如何執行基本的

編程SASS創建可訪問的顏色組合 編程SASS創建可訪問的顏色組合 Apr 09, 2025 am 11:30 AM

我們一直在尋求使網絡更容易訪問。顏色對比只是數學,因此Sass可以幫助涵蓋設計師可能錯過的邊緣案例。

See all articles