LoginSignup
0
0

More than 1 year has passed since last update.

TailwindCSSの任意のバリアントがややこしいなって思った話

Posted at

前提

こんな感じのやつを見てもある程度は理解できる人向け
この時点ですでに頭を抱えていると多分、無理です

<div class="w-6 h-6 bg-blue-700 rounded-full shadow cursor-pointer animate-bounce"></div>

本題

ドキュメントに載ってるHTMLをもとに使っていきます

親要素

[&]が親になります

多分svelte
<ul role="list">
  {#each items as item}
    <li class="[&:nth-child(3)]:underline">{item}</li>
  {/each}
</ul>

どんな感じに出力されるかっていうと

output
<ul role="list">
  <li class="[&:nth-child(3)]:underline">apple</li>
  <li class="[&:nth-child(3)]:underline">strawberry</li>
  <li class="[&:nth-child(3)]:underline">orange</li>
  <li class="[&:nth-child(3)]:underline">kiwi</li>
</ul>

スクリーンショット 2022-11-20 10.31.10.png

つまりは&が自分の要素で、その3番目だったらアンダーラインするよって奴です

これにブレークポイントとhoverを加えると:angel:

<ul role="list">
  {#each items as item}
    <li class="lg:[&:nth-child(3)]:hover:underline">{item}</li>
  {/each}
</ul>

読めるけど、、、読めるけど、、、
もし一箇所に複数出てくるようであれば既に辛いですね...(2-5番目の要素にそれぞれ違うスタイルを与えるとか)

子要素

[&>*]で子要素になります

<div class="[&>*]:mt-4 [&>*]:underline">
  <p>Lorem ipsum...</p>
  <div>Orange</div>
  <p>Lorem ipsum...</p>
  <ul>
    <li>
      <p>Lorem ipsum...</p>
    </li>
    <li>Apple</li>
  </ul>
</div>

スクリーンショット 2022-11-20 11.07.44.png

ulにmt-4がかかってて、liにはかかってないですね。

pタグだけにしたいとかだとこう

<div class="[&>p]:mt-4 [&>p]:text-blue-700">
  <p>Lorem ipsum...</p>
  <div>Orange</div>
  <p>Lorem ipsum...</p>
  <ul>
    <li>
      <p>Lorem ipsum...</p>
    </li>
    <li>Apple</li>
  </ul>
</div>

スクリーンショット 2022-11-20 11.10.16.png

グローバル要素

スペースをアンダースコア(_)に置き換えるようです

<div className="[&_p]:mt-4 [&_p]:underline" id="root">
  <p>Lorem ipsum...</p>
  <div>Orange</div>
  <ul>
    <li>
      <p>Lorem ipsum...</p>
    </li>
    <li>Apple</li>
  </ul>
</div>

スクリーンショット 2022-11-20 10.41.22.png

わからない人向け:CSSに直すと

#root p{
  @apply underline mt-4;
}

上位でネストされるとただただ辛い

まとめ

ハイ、いかがでしたでしょうか。
TailwindCSS自体はCSSとクラス名が紐づいているので割と簡単に書けますが、
任意のバリアントだけは、ややこしさを増すだけの代物になりそうです...

ドキュメントを見るのは結構楽しいので皆さんもいかがでしょうか
擬似クラスは一覧で見ると結構あるなぁと...

お題

Arbitrary peersのところに下記HTMLが記載されていました
これの意味、わかりますか?

<div>
  <input type="text" class="peer" />
  <div class="hidden peer-[:nth-of-type(3)_&]:block">
    <!-- ... -->
  </div>
</div>
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