跳到主要內容

StyleX 簡介

StyleX 是一種簡單、易於使用的 JavaScript 語法和編譯器,可用於設定網頁應用程式樣式。

StyleX 結合了內嵌樣式和靜態 CSS 的優點,並避免兩者的缺點。定義和使用樣式只須元件內的局部知識,且能避免特殊性問題,同時保留媒體查詢等功能。StyleX 使用防衝突的原子 CSS 建立最佳化樣式,優於手動編寫和維護的樣式。

特性一覽

可擴充

  • 使用原子 CSS 將 CSS 輸出品最小化。
  • 即使元件數量增長,CSS 大小也能維持在低點。
  • 樣式在不斷增長的程式碼庫中仍然清晰可讀、易於維護。

可預測

  • 元素上的類別名稱只能直接設定該元素的樣式。
  • 沒有特殊性問題。
  • 「最後套用的樣式一定獲勝!」

可組成

  • 有條件地套用樣式。
  • 跨元件和檔案邊界合併和組成自訂樣式。
  • 使用局部常數和表示式讓樣式保持簡潔。或者重複樣式而不必擔心效能。

快速

  • 沒有執行時期樣式注入。
  • 所有樣式都在編譯時打包於靜態 CSS 檔案中。
  • 最佳化的執行時期用於合併類別名稱。

類型安全

  • 類型安全的 API。
  • 類型安全的樣式。
  • 類型安全的佈景主題。

使用 StyleX

設定編譯器

import plugin from '@stylexjs/rollup-plugin';

const config = () => ({
plugins: [
plugin({ ...options })
]
})

export default config;

定義樣式

樣式使用物件語法和 create() API 定義。

import * as stylex from '@stylexjs/stylex';

const styles = stylex.create({
root: {
width: '100%',
maxWidth: 800,
minHeight: 40,
},
});

使用其他金鑰和進一步呼叫 create() 可以建立任意數量的規則。

import * as stylex from '@stylexjs/stylex';

const styles = stylex.create({
root: {
width: '100%',
maxWidth: 800,
minHeight: 40,
},
child: {
backgroundColor: 'black',
marginBlock: '1rem',
},
});

const colorStyles = stylex.create({
red: {
backgroundColor: 'red',
borderColor: 'darkred',
},
green: {
backgroundColor: 'lightgreen',
borderColor: 'darkgreen',
},
});

function ReactDiv({ color, isActive, style }) { /* ... */ }

使用樣式

若要使用樣式,必須傳遞給 props() 函數。可以使用標準 JavaScript 表達式,來組合樣式,以及有條件地套用。

import * as React from 'react';
import * as stylex from '@stylexjs/stylex';

const styles = stylex.create({ ... });
const colorStyles = stylex.create({ ... });

function ReactDiv({ color, isActive, style }) {
return <div {...stylex.props(
styles.main,
// apply styles conditionally
isActive && styles.active,
// choose a style variant based on a prop
colorStyles[color],
// styles passed as props
style,
)} />;
}

上面的範例使用 JSX。StyleX 本身屬於架構中立。相同的程式碼可用於接受 className 字串,以及 style 物件的其它架構上,例如 SolidJSPreactQwik

理想的使用案例

StyleX 可良好運用於各種專案中。然而,它被設計出來,是為了應付特定使用案例中的挑戰。

JavaScript 中的 UI 編寫

StyleX 是一個 CSS-in-JS 函式庫,表示它在應用程式的 UI 是以 JavaScript 編寫時,最為好用。如果一個應用程式使用 React、Preact、Solid、lit-html 或 Angular 等架構,那麼使用 StyleX 應該是相當合適的。

有些架構(例如 Svelte 及 Vue)使用自訂的檔案格式,這些檔案會在編譯時編譯成 JavaScript。StyleX 仍然可以在這些架構中使用,但可能需要一些自訂的設定。

大型或仍在成長中的專案

雖然 StyleX 可順利運作於各種規模的專案上,它在大型應用程式中更能大放光彩。

由於 StyleX 編譯成原子的類別名稱,因此當專案擴大時,CSS 繫結的規模會達到停滯狀態,這是其最大的效能優勢。

可重複使用的元件

當 StyleX 與可重複使用的 UI 元件並用時,好處最為顯著。

多年來,我們必須在以下兩者中做出選擇:具備內建樣式但難以自訂的「設計系統」元件,或者完全沒有樣式的「無頭」元件。

StyleX 賦予開發人員建立 UI 元件的能力,這些元件既能擁有預設樣式,又能自訂。

此外,此一致性讓這些元件能透過發佈到 NPM 來分享。消費者使用元件時,只要他們也使用 StyleX,那麼這些樣式便會合併,並正確地組合起來,無須任何額外的設定。