Meta(原 Facebook)開(kāi)源了全新的 CSS-in-JS 庫(kù) StyleX。
官方介紹道,StyleX 是一個(gè)富有表現(xiàn)力、具有確定性、可靠且可擴(kuò)展的樣式系統(tǒng)。它通過(guò)使用編譯時(shí) (compile-time) 工具融合了靜態(tài) CSS 的性能和可擴(kuò)展性。 此外,StyleX 不僅僅是一個(gè)基于編譯器的 CSS-in-JS 庫(kù),它經(jīng)過(guò)精心設(shè)計(jì),可以滿足大型應(yīng)用程序、可復(fù)用組件庫(kù)和靜態(tài)類型代碼庫(kù)的要求。Meta 旗下多款產(chǎn)品如 Facebook、WhatsApp、Instagram、Workplace、Threads 等都在使用 StyleX 作為其 CSS 樣式解決方案。 StyleX 主要特性
快速:StyleX 在編譯時(shí)和運(yùn)行時(shí)都具備高效的性能。Babel 轉(zhuǎn)換不會(huì)對(duì)構(gòu)建過(guò)程產(chǎn)生顯著影響。在運(yùn)行時(shí),StyleX 避免了使用 JavaScript 插入樣式的開(kāi)銷,并僅在必要時(shí)高效地組合類名字符串。生成的 CSS 經(jīng)過(guò)優(yōu)化,確保即使是大型網(wǎng)站的樣式也能被瀏覽器快速解析。
可擴(kuò)展:StyleX 旨在適應(yīng)像 Meta 這樣的超大型代碼庫(kù)。通過(guò)原子構(gòu)建和文件級(jí)緩存,Babel 插件能夠處理數(shù)萬(wàn)個(gè)組件在編譯時(shí)的樣式處理。由于 StyleX 設(shè)計(jì)為封裝樣式,它允許在隔離環(huán)境中開(kāi)發(fā)新組件,并期望一旦在其他組件中使用時(shí)能夠可預(yù)測(cè)地呈現(xiàn)。
可預(yù)測(cè)性:StyleX 會(huì)自動(dòng)管理 CSS 選擇器的特異性,以確保生成的規(guī)則之間不會(huì)發(fā)生沖突。它為開(kāi)發(fā)人員提供了一個(gè)可靠地應(yīng)用樣式的系統(tǒng),并確保 “最后應(yīng)用的樣式始終生效”。
類型安全:使用 TypeScript 或 Flow 類型來(lái)約束組件接受的樣式,每個(gè)樣式屬性和變量都具有完全的類型定義。這有助于提高代碼的可讀性和可維護(hù)性,同時(shí)減少潛在的錯(cuò)誤和沖突。
樣式去重:StyleX 鼓勵(lì)在同一文件中編寫樣式和組件。這種方法有助于使樣式在長(zhǎng)期內(nèi)更具可讀性和可維護(hù)性。StyleX 能夠利用靜態(tài)分析和構(gòu)建時(shí)工具來(lái)跨組件去重樣式,并刪除未使用的樣式。
可測(cè)試性:StyleX 可以配置為輸出調(diào)試類名,而不是功能性的原子類名。這可以用于生成快照,以便在對(duì)設(shè)計(jì)進(jìn)行輕微更改時(shí)不會(huì)經(jīng)常變化。通過(guò)這種方式,開(kāi)發(fā)人員可以更輕松地測(cè)試和驗(yàn)證樣式的正確性,從而提高開(kāi)發(fā)效率和產(chǎn)品質(zhì)量。
示例代碼
import stylex from '@stylexjs/stylex';
const styles = stylex.create({
root: {
padding: 10,
},
element: {
backgroundColor: 'red',
},
});
const styleProps = stylex.apply(styles.root, styles.element);
下面是一個(gè)按鈕組件的示例代碼
import * as stylex from "@stylexjs/stylex"; const styles = stylex.create({ base: { appearance: "none", borderWidth: 0, borderStyle: "none", backgroundColor: "blue", color: "white", borderRadius: 4, paddingBlock: 4, paddingInline: 8, }, }); export default function Button({ onClick, children, }: Readonly<{ onClick: () => void; children: React.ReactNode; }>) { return ( ); }
審核編輯:劉清
-
javascript
+關(guān)注
關(guān)注
0文章
525瀏覽量
56268 -
CSS
+關(guān)注
關(guān)注
0文章
110瀏覽量
15476 -
選擇器
+關(guān)注
關(guān)注
0文章
111瀏覽量
15122 -
靜態(tài)分析
+關(guān)注
關(guān)注
1文章
45瀏覽量
4200
原文標(biāo)題:Facebook開(kāi)源StyleX , 在JavaScript中寫CSS
文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何在Zephyr RTOS中實(shí)現(xiàn)延時(shí)和計(jì)時(shí)函數(shù)
開(kāi)放原子開(kāi)源基金會(huì)發(fā)布2025中國(guó)高校開(kāi)源育人案例集
如何在VS code中配置Zephyr集成開(kāi)發(fā)環(huán)境
開(kāi)源鴻蒙(金華)應(yīng)用創(chuàng)新示范中心”在浦江揭牌,浦江打造開(kāi)源鴻蒙生態(tài)城市新標(biāo)桿!
如何在柵極驅(qū)動(dòng)板中,將隔離側(cè)的-15v電源轉(zhuǎn)為可調(diào)的-15至-4v輸出呢
Arm正式取消Cortex命名!CPU向著高算力進(jìn)發(fā),Lumex CSS平臺(tái)加持!
Arm Zena CSS加速軟件和芯片開(kāi)發(fā)進(jìn)程
如何在下載程序時(shí)保護(hù)flash中的用戶數(shù)據(jù)不被覆蓋?
CSS6404L 在物聯(lián)網(wǎng)設(shè)備中的應(yīng)用優(yōu)勢(shì):低功耗高可靠的存儲(chǔ)革新與競(jìng)品對(duì)比
CSS6404L 在物聯(lián)網(wǎng)設(shè)備中的應(yīng)用優(yōu)勢(shì)
CSS6404LS-LI PSRAM:高清語(yǔ)音識(shí)別設(shè)備的理想存儲(chǔ)器解決方案
Facebook開(kāi)源StyleX如何在JavaScript中寫CSS呢?
評(píng)論