9.

CSS 入門 — セレクタ・ボックスモデル・Flexbox / Grid・レスポンシブ・SCSS / Tailwind

編集
この記事の要点
  • CSS(Cascading Style Sheets)は HTML の見た目(レイアウト・色・タイポグラフィ)を制御するスタイルシート言語
  • セレクタ: 要素(p)/ クラス(.btn)/ ID(#main)/ 属性([type=text])/ 疑似クラス(:hover)/ 子孫・子・兄弟
  • レイアウト: 古い float から Flexbox(1 次元)/ Grid(2 次元)へ移行。両者ともすべての主要ブラウザで利用可
  • レスポンシブデザイン: メディアクエリ(@media)+ rem/em/% + vw/vh + コンテナクエリ
  • エコシステム: Sass / SCSS(プリプロセッサ)/ Tailwind CSS(ユーティリティファースト)/ CSS-in-JS(styled-components 等)

CSS とは

CSS(Cascading Style Sheets)は、HTML 要素の見た目・レイアウトを指定するためのスタイルシート言語です。1996 年に W3C で最初の仕様 CSS1 が勧告されました。

「Cascading」はカスケード(連鎖適用)の意味。複数のスタイル指定があるとき、詳細度・記述順・継承のルールで優先順位が決まります。

適用方法








赤いテキスト

セレクタ

種類記法意味
要素pすべての

クラス.btnclass="btn" を持つ要素
ID#mainid="main" を持つ要素(ページ内一意)
属性[type="text"]属性で絞り込み
子孫nav anav 配下のすべての a
ul > liul の直接の子の li
隣接兄弟h2 + ph2 の直後の p
疑似クラスa:hoverマウスホバー時
疑似要素p::before要素の前後に擬似的にコンテンツ追加
論理演算:is() :where() :not() :has()柔軟な条件指定(モダン)

ボックスモデル

すべての要素は content → padding → border → margin の 4 層の箱で構成されます:

.box {
    width: 300px;
    height: 200px;
    padding: 20px;        /* 内側の余白 */
    border: 2px solid #333;
    margin: 16px auto;    /* 外側の余白、中央寄せ */

    /* box-sizing で計算方法を変更(推奨) */
    box-sizing: border-box;  /* width に padding+border 含む */
}

/* グローバルに border-box を適用するのが現代の定番 */
*, *::before, *::after {
    box-sizing: border-box;
}

Flexbox(1 次元レイアウト)

.container {
    display: flex;
    flex-direction: row;          /* row / column */
    justify-content: space-between; /* 主軸方向の配置 */
    align-items: center;           /* 交差軸方向の配置 */
    gap: 16px;                     /* 子要素間の余白 */
    flex-wrap: wrap;               /* 折り返し */
}

.item {
    flex: 1;              /* 等分で伸縮 */
    flex: 0 0 200px;      /* 固定幅 200px */
    flex: 1 1 300px;      /* 最低 300px、可能なら伸縮 */
}

Grid(2 次元レイアウト)

.grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);  /* 3 等分 */
    grid-template-columns: 200px 1fr 100px; /* 固定 + 可変 + 固定 */
    grid-template-rows: auto;
    gap: 20px;
}

/* レスポンシブグリッド(minmax + auto-fit) */
.responsive {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 16px;
}

/* 領域指定 */
.layout {
    display: grid;
    grid-template-areas:
        "header header"
        "sidebar main"
        "footer footer";
    grid-template-columns: 200px 1fr;
}
header { grid-area: header; }
main { grid-area: main; }

レスポンシブデザイン(メディアクエリ)

/* モバイルファースト(デフォルトはモバイル) */
.container {
    padding: 16px;
}

/* タブレット以上 */
@media (min-width: 768px) {
    .container { padding: 24px; }
}

/* デスクトップ以上 */
@media (min-width: 1200px) {
    .container { padding: 32px; max-width: 1200px; margin: 0 auto; }
}

/* ダークモード対応 */
@media (prefers-color-scheme: dark) {
    body { background: #1a1a1a; color: #eee; }
}

/* モーション減らす */
@media (prefers-reduced-motion: reduce) {
    * { animation: none !important; transition: none !important; }
}

CSS 変数(カスタムプロパティ)

:root {
    --primary: #3b82f6;
    --primary-dark: #1e40af;
    --text: #1f2937;
    --bg: #ffffff;
    --radius: 8px;
    --shadow: 0 4px 6px rgba(0,0,0,0.1);
}

.btn {
    background: var(--primary);
    color: white;
    border-radius: var(--radius);
    box-shadow: var(--shadow);
}

.btn:hover {
    background: var(--primary-dark);
}

/* ダークモードで上書き */
[data-theme="dark"] {
    --text: #f3f4f6;
    --bg: #111827;
}

CSS 関連エコシステム

カテゴリ代表ツール特徴
プリプロセッサSass / SCSS、Less、Stylus変数、ネスト、ミックスイン、関数
ユーティリティTailwind CSSHTML 内でクラス指定、PurgeCSS でビルド時除去
CSS フレームワークBootstrap、Bulma、FoundationUI コンポーネント・グリッド済
CSS-in-JSstyled-components、EmotionJS で書く、React と相性◎
後処理PostCSS、Autoprefixerベンダープレフィックス自動付与

CSS3 の主な新機能

  • Flexbox / Grid: モダンレイアウト
  • カスタムプロパティ: --var による動的変数
  • アニメーション: @keyframestransitiontransform
  • angle / 単位: remvwvhvminch%
  • 角丸 / 影: border-radiusbox-shadowfilter: drop-shadow()
  • グラデーション: linear-gradient()radial-gradient()
  • コンテナクエリ: @container で親サイズに応じたスタイル(2023〜)
  • ネスト: SCSS のようなネスト記法をネイティブ対応(2023〜)

ブラウザ対応の確認: caniuse.com

新しい CSS 機能を使うときは https://caniuse.com/ でブラウザ対応状況を確認します。例: 「container query」「has selector」と検索すると、各ブラウザのバージョン別対応表が出ます。

FAQ

Q: Flexbox と Grid どちらを使う?
A: 1 次元の整列(ナビ、カード横並び)は Flexbox、2 次元のレイアウト(ページ全体の格子)は Grid。組み合わせて使うのが普通です。

Q: !important は使うべき?
A: 原則避ける。詳細度の戦いになり保守困難に。ユーティリティクラス(Tailwind 等)や、サードパーティ CSS の上書きが必要なときだけ。

Q: Tailwind は CSS の知識なしで使える?
A: 内部はただの CSS(flex justify-between p-4)なので、CSS の概念(フレックス、パディング)の理解は必要。むしろ Tailwind を学ぶ過程で CSS も身に付きます。

Q: モバイルファーストとデスクトップファーストどちら?
A: モバイルファースト推奨min-width を使い、デフォルトをモバイル用に書き、画面が大きくなるにつれて拡張するのが今の主流です。

編集
Post Share
子ページ
  1. 文法、規則
  2. セレクタ
  3. プロパティ
  4. 色の指定方法
  5. アニメーション
  6. ライブラリ
  7. 「display: flex」を用いて要素を横並びにする方法
  8. スクロールの際のサイドバー固定方法「position: sticky」
  9. 縦の中央寄せ
  10. CSSの変更が反映されない
  11. 画面サイズもしくはスマホの場合のCSS切り替え方法
  12. 一行で左、真ん中、右にそれぞれ要素を寄せる方法
  13. 左右の端にそれぞれ要素を寄せる方法
  14. Bootstrapで両サイドを固定して広告を表示させる方法
同階層のページ
  1. Java
  2. PHP
  3. Python
  4. C#
  5. C++
  6. Ruby
  7. Go
  8. HTML
  9. CSS
  10. JavaScript
  11. TypeScript
  12. VBA
  13. Google Apps Script
  14. Julia
  15. Swift
  16. オブジェクト指向言語共通
  17. Gen