LoginSignup
0
0

TailwindCSSでbeforeをつかって四角などのシェイプを追加したい

Last updated at Posted at 2023-12-16

この記事では、TailwindCSSでbeforeを使う時の方法について伝えます!

とあるAI検索エンジンでTailwindCSSを使ったbeforeの実装について調べると何故かサポートされていないと結果を返されますが、TailwindCSSでもbeforeやafterを使って実装はできます!

TailwindCSSでbeforeの使い方

TailwindCSSでbeforeを使う場合下記のように記述します

const Component = ({ children }) => {
  return (
    <p className="before:content-[''] before:flex-shrink-0 before:w-4 before:h-4 before:bg-black">
      {children}
    </p>
  )
}

beforeに限らずですが、TailwindCSSを利用している場合classの定義部分が長くなり読みづらくなります…。

改行するだけでも可読性が良くなるので気にかけられると良いと思います!

const Component = ({ children }) => {
  return (
    <p
      className="
        before:content-['']
        before:flex-shrink-0
        before:w-4
        before:h-4
        before:bg-black
      "
    >
      {children}
    </p>
  )
}

【余談】アイコンやシェイプの設置にbeforeafterを利用すべきか?

テキストの横にアイコンやシェイプを設置する時に「beforeやafter」を利用すべきか?と悩む時があります…。

正解はないと思いますが、自分なりに結論を出してみたので新しくサイトを構築する際やコンポーネントを作成する際にお役立ていただけると幸いです。

beforeafterを利用するのが良い

シンプルな四角や円であればbeforeafterを利用し、beforeafterでは表現しにくい複雑なアイコンや郵便マークなど意味のあるアイコンはSVGにするので良いのではと考えています。

負荷の観点

少なからずビルドの負担があるかと思います。
シンプルなシェイプであればCSSで実装してしまうので良いのではと考えました。

管理の観点

コンポーネントとは別に画像として管理することになります。
CSSでの実装であればコンポーネントに閉じられているたコードの見通しが良いですが、SVG等で管理する場合ファイルの場所やその後の修正などのコストは発生する可能性があると考えました。

場合によってはアイコン用のコンポーネントを作成することもあると思います。
classの指定が長くなるデメリットはありますが、beforeafterの方が管理しやすいのではないか?と考えました。

SEOの観点

beforeafterを利用せずに空の要素(divタグなど)にスタイルを当てて実現する方法もあります。
SEOの評価にクリティカルな影響はないとはいえブラウザ上に無意味な要素がレンダリングされるのは避けたいところではあるのでbeforeafterを利用するのが良いかと考えました。

【TailwindCSSでbeforeをつかって四角などのシェイプを追加したい】まとめ

TailwindCSSの実装方法としてカスタムCSSを定義することも可能です。

同じ記述を複数回するより一箇所で定義した方が、可読性やメンテナンス性が向上するのでカスタムCSSとして定義しても良いのではと考えています!

個人的には、極力避けたい実装ではありますが利用回数が多い場合などのケースでも検討しても良いかもしれません。

beforeafterの利用はコンポーネントの複雑度にもよって変わるので適切な方法が選べるようにチームで話し合って決められると良いと思います!

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