0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Chakra UI と Tailwind を一緒に使ったらクラスが効かない!?

Posted at

はじめに

C2Cマーケットプレイスを開発していたとき、UIライブラリとして Chakra UI を使いつつ、細かいレイアウトは Tailwind CSS で仕上げよう!という作戦を立てました。

ところが実装してみると「Tailwind のクラスが効かない!?」という謎現象に直面…。
初心者さんでもハマりやすいポイントだと思うので、実際に試したこと・解決した方法をまとめます。


トラブル発生

例えばこんなコードを書いたときです。

<ChakraProvider value={defaultSystem}>
  <div className="mx-2 p-4 text-4xl">テキスト</div>
</ChakraProvider>

期待するのは「余白あり」「大きめフォント」な表示。
ところが実際は… margin / padding / text-size が無視 されて全然効かない。

一瞬「Tailwindの設定ミスか?」と思ったのですが、違いました。


なぜ起きたのか?

結論から言うと CSSレイヤーの優先度 が原因でした。

  • Tailwind: @layer theme, base, components, utilities
  • Chakra: @layer reset, base, tokens, recipes

Chakra の reset が強力すぎて、Tailwind のユーティリティクラスを上書きしてしまっていたんです。
つまり、両者が「どっちが先に効くか」でケンカしていた状態。


解決方法

1. Chakra のリセットをオフにする

一番シンプルな方法です。

<ChakraProvider resetCSS={false} theme={defaultSystem}>
  <div className="mx-2 p-4 text-4xl">これで効く!</div>
</ChakraProvider>

Chakra の resetCSS を切ることで、Tailwind のクラスが正常に反映されます。


2. Emotion Cache を先に読み込む

Chakra は Emotion をベースにしているので、CacheProvider を調整して「読み込み順序」を制御します。

import { CacheProvider } from '@emotion/react'
import createCache from '@emotion/cache'
import { ChakraProvider } from '@chakra-ui/react'
import App from './App'

const chakraCache = createCache({ key: 'chakra', prepend: true })

export default function Root() {
  return (
    <CacheProvider value={chakraCache}>
      <ChakraProvider>
        <App />
      </ChakraProvider>
    </CacheProvider>
  )
}

prepend: true で Chakra の CSS を先に流し、Tailwind を優先させます。


3. Provider を分けて使う

Tailwind を全体に使いつつ、Chakra コンポーネントだけ Provider でラップする方法もアリです。

<div className="mx-2 p-4 text-4xl">TailwindでOK</div>

<ChakraProvider theme={defaultSystem}>
  <Button colorScheme="teal">Chakraのボタン</Button>
</ChakraProvider>

これなら「両方のいいとこ取り」ができます。


学んだこと

  • Chakra と Tailwind は設計思想が違う → 併用するときは リセット周りに要注意
  • どちらを「軸」にするか決めておくと管理が楽。
  • 個人的には Tailwind ベース + Chakraは部品だけ が一番スッキリしました。

おわりに

もし「Tailwind と Chakra を併用したい」と思っている方は、ぜひ今回の方法を試してみてください。
快適な UI 開発ライフを 🙌

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?