Radix Themesによるスタイリングへのアプローチ方法。
Radix Themesには、組み込みのスタイリングシステムがありません。css
プロパティやsx
プロパティはなく、内部的にスタイリングライブラリを使用していません。内部的には、標準のCSSで構築されています。
アプリケーションのスタイリング技術を選択する際に、オーバーヘッドはありません。
Radix Themesのコンポーネントは比較的閉じられており、常に簡単に上書きできるわけではないスタイルセットが付属しています。それらは、プロパティとテーマの設定で許可されている範囲内でカスタマイズ可能です。
ただし、Radix Themesコンポーネントを動かすのと同じCSS変数にもアクセスできます。これらのトークンを使用して、元のテーマに自然に溶け込むカスタムコンポーネントを作成できます。トークンシステムへの変更は、破壊的な変更として扱われます。
特定のトークンに関する詳細については、テーマセクションの対応するガイドを参照してください。
単純なスタイルの上書きを超えて、コンポーネントをそのまま使用するか、同じビルディングブロックを使用して独自のバージョンを作成することをお勧めします。
ほとんどのコンポーネントにはclassName
とstyle
のプロパティがありますが、多くのスタイルを上書きする必要がある場合は、次のいずれかを行うべきであるという良い兆候です。
Tailwindは素晴らしいです。しかし、Radix ThemesをTailwindと共に使用する予定がある場合は、その人間工学がどのようにして即座に複雑なスタイルを作成するように促し、摩擦なくコンポーネントの内部にアクセスする可能性があるかに注意してください。
Tailwindは異なるスタイリングパラダイムであり、プロパティ、トークン、共有ビルディングブロックセットの上に新しいコンポーネントを作成することでカスタマイズを実現するクローズドコンポーネントシステムのアイデアと上手く混ざらない可能性があります。
カスタムコンポーネントを作成する必要がある場合は、Radix Themesで使用されているのと同じビルディングブロックを使用してください。
Radix Themesのソースコードを調べて、それがどのように構築されているかを確認してください。
すぐに使用できる状態で、ポータルされたRadix Themesコンポーネントは、競合することなく任意の順序で入れ子にしたり積み重ねたりできます。たとえば、ダイアログを開くポータルを開き、さらに別のポータルを開くことができます。これらはすべて、開かれた順序で互いに積み重ねられます。
独自のコンポーネントを構築する際には、z-indexの競合を回避するために次のルールを使用してください。
z-index
値には、まれなケースを除いてauto
、0
、または-1
以外の値を使用しないでください。メインコンテンツとポータルされたコンテンツは、ルート<Theme>
コンポーネントのスタイルによって作成されたスタッキングコンテキストによって区切られています。これにより、z-indexを気にすることなく、メインコンテンツの上にポータルされたコンテンツを積み重ねることができます。
Next.js 13.0から14.1では、app/**/layout.tsx
内のCSSファイルのインポート順序は保証されません。そのため、正しく記述していても、Radix Themesが独自のスタイルを上書きすることがあります。
このNext.jsの問題は、断続的に発生したり、開発時または本番時でのみ発生したりすることがあります。
回避策として、まずpostcss-importを使用してすべてのCSSを単一のファイルにマージし、それをレイアウトにインポートすることができます。あるいは、page.tsx
ファイルでスタイルを直接インポートする方法もあります。
Tailwind v3以降、@tailwind
ディレクティブによって生成されるスタイルは、元のインポート順序に関係なく、通常はインポートされたCSSの後に追加されます。特に、TailwindのボタンのリセットスタイルはRadix Themesのボタンと干渉し、特定のボタンが背景色なしでレンダリングされる可能性があります。
回避策
@tailwind base
を使用しないでください。@import tailwindcss/base
を使用して Tailwind のベーススタイルを手動でインポートします。設定例Radix Themes プロジェクトでカスタムポータルをレンダリングすると、ルートの<Theme>
コンポーネントの外側に表示されるため、ほとんどのテーマトークンとスタイルにアクセスできません。これを解決するには、ポータルコンテンツを別の<Theme>
でラップします。
Radix Themes の Dialog や Popover などのコンポーネントは既にこれを処理しているので、これは独自のポータル化されたコンポーネントを作成する場合にのみ必要です。
通常、カスタムCSSでRadix Themesのスタイルを上書きすることを望みますが、逆を期待するのが自然な場合もあります。
ブラウザのデフォルトの余白をリセットするだけの単純な段落スタイルを考えてみましょう。
Box
の margin プロパティを asChild
を介してカスタム段落に適用する場合があります。
しかし、これは直感的に機能しません。カスタムスタイルはRadix Themesのスタイルの後にインポートされるため、marginプロパティを上書きします。回避策として、Radix Themes は、元の styles.css
が基づいている個別の tokens.css
、components.css
、および utilities.css
ファイルを提供します。
カスタムスタイルの後に utilities.css
をインポートして、レイアウトプロパティがカスタムスタイルで期待どおりに機能するようにすることができます。ただし、Next.js を使用している場合は、上記のインポート順序の問題に注意してください。
スタンドアロンレイアウトコンポーネントを使用する場合は、それらにも分割されたCSSファイルが用意されています。