首頁 web前端 css教學 Web組件庫上的一點

Web組件庫上的一點

Apr 03, 2025 am 09:42 AM

A Bit on Web Component Libraries

近期湧現了不少關於Web Components的新聞,我將它們整理在此。

我認為Web Components最棒的應用場景之一是模式庫。與其像Bootstrap那樣使用<div>,或像Bulma那樣使用<code><div>,不如使用自定義元素,例如<code><designsystem-tabs></designsystem-tabs>。新的Shoelace庫使用sl命名空間來定義其組件。它是一個完全基於Web Components的模式庫,其中的標籤是<sl-tab-group></sl-tab-group>元素。

這樣做有什麼好處呢?首先,它引入了組件模型。這意味著,如果您正在處理一個組件,它將擁有一個模板和一個與其位置相關的樣式表。查看Shoelace的內部實現,您可以看到這一切都基於Stencil。

另一個好處是,組件可以使用(並且確實使用了)Shadow DOM。這提供了一種直接來自Web平台的隔離機制。對於我們這些CSS開發者來說,這意味著標籤組件中標籤的樣式是使用.tab類完成的(哇,太酷了!),但它在該組件中是隔離的。即使使用這麼通用的名稱,我也不會意外地影響頁面上使用該通用類的其他組件,也不會有一些外部CSS來干擾這裡的內部結構。 Shadow DOM就像一道安全牆,防止樣式洩漏或滲入。

我還看到了FAST框架¹,它也是一組組件。它的標籤被定義為<fast-tabs></fast-tabs>。這讓我想到Web Components作為模式庫方法的另一個優點:它感覺像是API驅動的,甚至從組件本身的名稱開始,這實際上就是你在HTML中使用的。該元素上的屬性可以完全自定義。新興的標準似乎是,您甚至不必為自定義的屬性添加data-前綴。因此,如果我要製作一個標籤組件,它可能是<chris-tabs active-tab="lunch" variation="rounded"></chris-tabs>

也許使用Web Components作為模式庫的最大參與者是Ionic。它們的標籤是<ion-tabs></ion-tabs>,您可以使用它們而無需涉及任何其他框架(儘管它們除了自己的Stencil之外,還支持Angular、React和Vue)。 Ionic在Web Components方面取得了很大的進步,最近支持了Shadow Parts。以下是Brandy Carney再次解釋封裝的說明:

Shadow DOM有助於防止樣式從組件中洩漏並意外應用於其他元素。例如,我們將.buttonclass分配給我們的<ion-button></ion-button>組件。如果Ionic Framework用戶在其自己的元素之一上設置.button類,則在框架的早期版本中,它將繼承Ionic按鈕樣式。由於<ion-button></ion-button>現在是一個Shadow Web Component,所以這個問題不再存在。

但是,由於這種封裝,樣式也無法滲透到Shadow組件的內部元素中。這意味著,如果Shadow組件在其shadow tree中呈現元素,用戶就無法使用他們的CSS來定位內部元素。

封裝是一件好事,但它確實使樣式變得“更難”(故意如此)。有一個重要的CSS概念需要了解: CSS自定義屬性可以穿透Shadow DOM 。但是,人們決定——我認為這是正確的——在一個設計系統中將每一件事都“變量化”並不是一個明智的做法。相反,他們為Shadow DOM內的每個HTML片段賦予一個部分,例如<div part="icon">,這使我們能夠使用CSS“從外部訪問”,例如<code>custom-component::part(icon) { } 。我認為基於部分的樣式鉤子大部分是不錯的,並且對於這樣的模式庫來說是一種明智的方案,但我承認它的一部分讓我感到困擾。選擇器的工作方式與您預期的不一樣。例如,您無法有條件地選擇內容。您也不能選擇子元素或使用級聯。換句話說,它只是一個一次性的,或者就像您用手直接穿過薄膜一樣。您可以向前伸出手抓住東西或不抓住,但您什麼也做不了。

說到讓人生氣的事情,Andrea Giammarchi對Web Components的現狀有一個很好的觀點:

每個開始使用的庫,包括我的庫,都建議我們應該導入該庫來定義所謂的“可移植的自定義元素”。

Google總是建議使用LitElement。 Microsoft希望您使用FASTElement。 Stencil有自己的組件。 hyperHTML有自己的組件。沒有人只使用“原始”的Web Components。這很奇怪!我認為最糟糕的部分是,Web Components應該是一個“原生平台”的東西,這意味著我們不應該需要依賴某種特定技術才能使用它們。當我們這樣做時,我們就像使用React或其他任何東西一樣被鎖定到它上面。

Andrea在文章中提出了一些想法,包括使用一些新的更小的庫。我認為我想看到的是一個根本不使用任何庫的模式庫。

  1. FAST在首頁的連續句子中將自己稱為“界面系統”,然後是“UI框架”。 Shoelaces稱自己為“庫”,但我稱之為“模式庫”。我認為“設計系統”是描述這個概念最常用的術語,但通常比特定技術更廣泛。 FAST在代碼本身中使用該術語來表示控制主題的包裝器元素。我認為圍繞所有這些東西的術語遠未確定。

以上是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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++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教學
1668
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
靜態表單提供商的比較 靜態表單提供商的比較 Apr 16, 2025 am 11:20 AM

讓我們嘗試在這裡造成一個術語:“靜態表單提供商”。你帶上html

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

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

每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom 每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom Apr 17, 2025 am 10:55 AM

在本週的平台新聞綜述中,Chrome引入了一個用於加載的新屬性,Web開發人員的可訪問性規範以及BBC Move

帶有HTML對話框元素的一些動手 帶有HTML對話框元素的一些動手 Apr 16, 2025 am 11:33 AM

這是我第一次查看HTML元素。我已經意識到了一段時間,但是尚未將其旋轉。它很酷,

紙張形式 紙張形式 Apr 16, 2025 am 11:24 AM

購買或建造是技術的經典辯論。自己構建東西可能會感覺更便宜,因為您的信用卡賬單上沒有訂單項,但是

'訂閱播客”鏈接應在哪裡? '訂閱播客”鏈接應在哪裡? Apr 16, 2025 pm 12:04 PM

有一段時間,iTunes是播客中的大狗,因此,如果您將“訂閱播客”鏈接到喜歡:

它全部都在頭上:管理帶有React頭盔的React Power Site的文檔頭 它全部都在頭上:管理帶有React頭盔的React Power Site的文檔頭 Apr 15, 2025 am 11:01 AM

該文檔負責人可能不是網站上最迷人的部分,但是其中所處的內容對於您的網站的成功也一樣重要

See all articles