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

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
@KeyFrames vs CSS過渡:有什麼區別?@KeyFrames vs CSS過渡:有什麼區別?May 14, 2025 am 12:01 AM

@keyframesandCSSTransitionsdifferincomplexity:@keyframesallowsfordetailedanimationsequences,whileCSSTransitionshandlesimplestatechanges.UseCSSTransitionsforhovereffectslikebuttoncolorchanges,and@keyframesforintricateanimationslikerotatingspinners.

使用頁面CMS進行靜態站點內容管理使用頁面CMS進行靜態站點內容管理May 13, 2025 am 09:24 AM

我知道,我知道:有大量的內容管理系統選項可用,而我進行了幾個測試,但實際上沒有一個是一個,y&#039;知道嗎?怪異的定價模型,艱難的自定義,有些甚至最終成為整個&

鏈接HTML中CSS文件的最終指南鏈接HTML中CSS文件的最終指南May 13, 2025 am 12:02 AM

鏈接CSS文件到HTML可以通過在HTML的部分使用元素實現。 1)使用標籤鏈接本地CSS文件。 2)多個CSS文件可通過添加多個標籤實現。 3)外部CSS文件使用絕對URL鏈接,如。 4)確保正確使用文件路徑和CSS文件加載順序,優化性能可使用CSS預處理器合併文件。

CSS Flexbox與網格:全面評論CSS Flexbox與網格:全面評論May 12, 2025 am 12:01 AM

選擇Flexbox還是Grid取決於佈局需求:1)Flexbox適用於一維佈局,如導航欄;2)Grid適合二維佈局,如雜誌式佈局。兩者在項目中可結合使用,提升佈局效果。

如何包括CSS文件:方法和最佳實踐如何包括CSS文件:方法和最佳實踐May 11, 2025 am 12:02 AM

包含CSS文件的最佳方法是使用標籤在HTML的部分引入外部CSS文件。 1.使用標籤引入外部CSS文件,如。 2.對於小型調整,可以使用內聯CSS,但應謹慎使用。 3.大型項目可使用CSS預處理器如Sass或Less,通過@import導入其他CSS文件。 4.為了性能,應合併CSS文件並使用CDN,同時使用工具如CSSNano進行壓縮。

Flexbox vs Grid:我應該學習兩者嗎?Flexbox vs Grid:我應該學習兩者嗎?May 10, 2025 am 12:01 AM

是的,youshouldlearnbothflexboxandgrid.1)flexboxisidealforone-demensional,flexiblelayoutslikenavigationmenus.2)gridexcelstcelsintwo-dimensional,confffferDesignssignssuchasmagagazineLayouts.3)blosebothenHancesSunHanceSlineHancesLayOutflexibilitibilitibilitibilitibilityAnderibilitibilityAndresponScormentilial anderingStruction

軌道力學(或我如何優化CSS KeyFrames動畫)軌道力學(或我如何優化CSS KeyFrames動畫)May 09, 2025 am 09:57 AM

重構自己的代碼看起來是什麼樣的?約翰·瑞亞(John Rhea)挑選了他寫的一個舊的CSS動畫,並介紹了優化它的思維過程。

CSS動畫:很難創建它們嗎?CSS動畫:很難創建它們嗎?May 09, 2025 am 12:03 AM

CSSanimationsarenotinherentlyhardbutrequirepracticeandunderstandingofCSSpropertiesandtimingfunctions.1)Startwithsimpleanimationslikescalingabuttononhoverusingkeyframes.2)Useeasingfunctionslikecubic-bezierfornaturaleffects,suchasabounceanimation.3)For

See all articles

熱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

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

熱門文章

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具