Closed38

「Tailwind CSS実践入門 」を読んで雑にまとめる

りょたりょた

ユーティリティファースト

りょたりょた

メリット

  • クラス名を考える必要がない。
  • HTML/CSSファイルを交互に見る必要がない。
  • 影響範囲が明確。
りょたりょた

カスケーディング

CSS(Cascading Style Sheets)のCascadingとは、「階段状の滝のような」「連鎖的に伝わる」という意味ですが、 様々なレベルで定義されたスタイルは、上流で定義されたものが下流へ引き継がれて文書に適用されます。 このようにスタイル指定が段階的に引き継がれて文書に適用されるのがCSSの大きな特徴です。

https://www.htmq.com/csskihon/006.shtml

りょたりょた

常にセマンティックな方がわかりやすいと思いがちだが、CSSの歴史を見ると苦労も多い。

りょたりょた

ヴァリアントとモディファイア

  • ヴァリアントは画面幅の条件づけなどの時に利用する語
  • モディファイアはそれを表現する修飾子を表す語。(そのものを表す概念??)
りょたりょた

詳細度

Tailwindのクラスを全てimportantをつけられる。

//tailwind.config.js
important: true,
りょたりょた

モディファイア

りょたりょた

focusとfocus-within

focus:はその要素自身がフォーカス中であるかを見るものでしたが、子孫要素がその状態にあることを見たいケースもあります。たとえば中に<input>を含む、入力欄のコンポーネントルートにあたる<div>要素があるとします。ここで、中の<input>がフォーカス中だったら親である<div>のほうの見た目を変えるというふうにしたい場合、focus-within:を用います

りょたりょた

first,last,first-of-type

<div>
          <div id="div-1" className="first:bg-red-500">:first-childである(:first-of-typeでもある)</div>
          <span id="span-1" className="first-of-type:bg-blue-500">:first-of-typeである(:first-childではない)</span>
          <span id="span-2">...</span>
          <span id="span-3">...</span>
          <div id="div-2" className="last-of-type:bg-blue-500">:last-of-typeである(:last-childではない)</div>
          <span id="span-4" className="last:bg-red-500">:last-childである(:last-of-typeでもある)</span>
        </div>
りょたりょた

has

<div className="has-[dialog[open]]:overflow-hidden">
          <dialog open>dialog</dialog>
        </div>
りょたりょた

placeholder:

<div>
        <input type="text" className="placeholder:text-red-500" placeholder="プレイスホルダー" />
        <input type="text" className="placeholder-shown:text-blue-500" placeholder="プレイスホルダー" />
      </div>
りょたりょた

file:

<input
          type="file"
          className="
          file:mr-4 file:py-2 file:px-4
          file:rounded-full file:border-0
          file:text-sm file:font-semibold
          file:bg-violet-50 file:text-violet-700 hover:file:bg-violet-100"
        />
りょたりょた

first-letter: 最初の文字の装飾
first-line: 最初の行の装飾

<p className="first-letter:float-left first-letter:mr-3 first-letter:text-7xl first-letter:font-bold first-line:uppercase first-line:tracking-widest">
りょたりょた

orientation
ビューポートの向きで条件分岐する。
portrait: 縦
landscape: 横

りょたりょた

動的なスタイル


<div className="bg-red-500 h-[200px] lg:h-[var(--parent-height)]" style={{ "--parent-height": el.innerHeight }}>
        伸びる
      </div>

りょたりょた
<div className="bg-red-500 h-[200px] lg:h-[var(--parent-height)]" style={{ ["--parent-height" as string]: "300px" }}>
        伸びる
      </div>
りょたりょた

コンポーネントの責務とインターフェース

りょたりょた

全てのUIがコンポーネントであるわけではない。
Material UIやAtomic desighn は「ページ内の全ての要素はコンポーネントである」という思想

りょたりょた

Tailwind CSSの「ユーティリティファースト」とは、必要に応じてあとから抽象化をする(そうと確信できない箇所はユーティリティで書く)という思想であり、最初からあらゆるUIが「下位のコンポーネント」からできていると決め込まないことです。

やりがち。

りょたりょた

デザインシステムについて

りょたりょた

この[]の使い方はよき。例外かどうか即時にわかる。

タブレット以上の画面では、ガイドラインから外れていることが一発でわかるマークアップ

<!-- NOTICE: 高さの合計を4の倍数にしたいので、タブレット以上では例外的に5pxのpaddingを使う -->
 <div class="leading-none text-12 py-4 tablet:text-14 tablet:py-[5px]">
   タブレット以上の画面では、ガイドラインから外れていることが一発でわかるマークアップ
 </div>
りょたりょた

トークンの命名

色やスペーシングを命名する際の方針には大きく分けて2つあります。たとえば大きさが8pxのスペーシングに対して、そのまま8と名付けるか、あるいはsmallやsのように名付けるかです。本書では、前者を「リテラル」な命名、後者を「セマンティック」な命名と呼びます。

このスクラップは2024/02/10にクローズされました