ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
class セレクタの基本
CSS で最もよく使うセレクタが class セレクタ。HTML 要素の class 属性で付けた名前にスタイルを適用します。
/* HTML: <p class="note">テキスト</p> */
.note {
background: #fff8e1;
padding: 0.5em;
}
/* 要素 + class(p で class="note" のものだけ) */
p.note {
font-style: italic;
}
/* 子孫セレクタ(.card の中の .title) */
.card .title { font-size: 1.2em; }
/* 直接の子(.card 直下の .title だけ) */
.card > .title { color: red; }
/* 隣接兄弟(.heading の直後の .lead) */
.heading + .lead { margin-top: 0.5em; }
複数の class を組み合わせる
| セレクタ | 意味 | マッチ例 |
|---|---|---|
.a, .b | a または b(OR) | class="a" または class="b" |
.a.b | a かつ b(AND、スペース無し) | class="a b" |
.a .b | a の子孫の b(スペース有り) | <div class="a"><span class="b"> |
.a > .b | a の直接の子の b | 1 階層下のみ |
.a + .b | a の直後の隣接兄弟 b | — |
.a ~ .b | a の同階層後続の b(複数可) | — |
:not(.a) | a クラスを持たない | — |
/* 例: btn-primary かつ btn-large にだけ適用 */
.btn-primary.btn-large {
padding: 1em 2em;
font-size: 1.25em;
}
/* btn か btn-link のどちらかなら hover */
.btn:hover, .btn-link:hover {
opacity: 0.8;
}
/* card の中の title (直下じゃなくてもよい) */
.card .title {
font-weight: bold;
}
class vs id(詳細度の違い)
| セレクタ | 詳細度 (Specificity) | 使用場面 |
|---|---|---|
要素 (p) | 0,0,0,1 | 初期化・全要素に共通 |
class (.cls) | 0,0,1,0 | ★ 通常はこれ |
属性 ([type=text]) | 0,0,1,0 | フォーム要素等 |
擬似クラス (:hover) | 0,0,1,0 | 状態 |
id (#id) | 0,1,0,0 | 1ページに1個。スタイル指定には非推奨 |
インライン (style=...) | 1,0,0,0 | 動的に変更する場合のみ |
| !important | 勝つ | 最終手段 |
id を CSS で使うと詳細度が高すぎてオーバーライドしにくく、再利用もできないため、スタイル用には class を、JS で要素を一意に取りたい時だけ id を使うのが定石です。
BEM 命名規則
BEM (Block, Element, Modifier) は大規模 CSS の衝突回避でデファクトになった命名規則:
<!-- Block: 独立した部品 -->
<div class="card">
<!-- Element: Block の中の部品(Block__Element) -->
<img class="card__image" src="...">
<h2 class="card__title">タイトル</h2>
<p class="card__body">本文</p>
<!-- Modifier: バリエーション(Block--Modifier) -->
<button class="card__btn card__btn--primary">詳細</button>
</div>.card { /* Block */ }
.card__image { /* Element */ }
.card__title { /* Element */ }
.card__btn { /* Element */ }
.card__btn--primary { /* Modifier */
background: blue;
color: white;
}
.card--dark { /* Block Modifier */
background: #222;
color: white;
}
BEM の利点: 詳細度が常に「class 1個分」で揃う / グローバル衝突しにくい / 命名から要素関係が読める。
Tailwind CSS(ユーティリティクラス)
BEM とは逆方向のアプローチ。「意味のあるクラス名を作らず、見た目を class で組み立てる」:
<!-- BEM -->
<button class="btn btn--primary btn--large">送信</button>
<!-- Tailwind(ユーティリティファースト) -->
<button class="px-6 py-3 bg-blue-500 text-white rounded hover:bg-blue-700 text-lg">
送信
</button>
Tailwind の長所: CSS ファイルを書かなくて済む、未使用 CSS をビルド時に削除(PurgeCSS)、デザインシステムが強制される。短所: クラスが冗長、HTML の見通しが悪くなる → @apply や Vue/React のコンポーネント化で緩和。
jQuery と class セレクタ
// jQuery: CSS と同じセレクタが使える
$('.note').css('color', 'red');
$('.btn-primary.btn-large').on('click', handler);
$('.card .title').text('新しいタイトル');
// Vanilla DOM API(同等)
document.querySelectorAll('.note').forEach(el => el.style.color = 'red');
document.querySelector('.btn-primary.btn-large').addEventListener('click', handler);
JS からの class 操作: classList API
const el = document.querySelector('.menu');
// 追加 / 削除 / トグル
el.classList.add('active');
el.classList.remove('hidden');
el.classList.toggle('open'); // ある→無くす、無い→付ける
el.classList.toggle('open', someBool); // 第2引数で強制 true/false
// 存在チェック
if (el.classList.contains('active')) { ... }
// 置換
el.classList.replace('old', 'new');
// 複数同時
el.classList.add('a', 'b', 'c');
el.classList.remove('a', 'b');
// 旧 API(避ける) - 文字列の連結だとミスりやすい
el.className = el.className + ' active'; // ❌
// 配列として全 class を取得
console.log([...el.classList]); // ['menu', 'active']
命名の落とし穴と推奨ルール
- 数字始まりはNG:
.2col❌ →.col-2✅(CSS パーサが解釈できない) - 大文字・小文字を混在させない: BEM は kebab-case、JS は camelCase を分ける
- 状態は
is-/has-プレフィックスを推奨:.is-active,.has-error - JS フック専用は
js-プレフィックス:.js-modal-toggle→ CSS では使わない - マルチバイト文字(
.メニュー)は仕様上可だが避ける - id と同じ名前は避ける: 詳細度の混乱を招く
CSS Modules / CSS-in-JS
近年の React/Vue では、グローバル class 名汚染を防ぐためスコープ付きの仕組みが主流:
// CSS Modules (Next.js 等)
import styles from './Card.module.css';
// → 自動で「Card_card__a1b2c3」のようなユニーク class に
export const Card = () => <div className={styles.card}>...</div>;
// CSS-in-JS (styled-components)
const StyledCard = styled.div`
padding: 1em;
background: white;
`;
// → DOM では .sc-bXY1Z2 のようなランダム class
FAQ
Q: 1 つの要素に class を何個まで付けられる?
A: 仕様上の上限なし。ただし可読性とパフォーマンスのため10 個以内を目安に。Tailwind で 30 個以上は @apply / コンポーネント化を検討。
Q: . はなぜクラスの記号?
A: CSS 仕様で「class 属性のドット記法」として定められたため。HTML 側にドットは含めず class="btn" のように書きます。
Q: class セレクタと属性セレクタ [class="btn"] の違い?
A: .btn は「class に btn を含む」、[class="btn"] は「class が完全一致 btn のみ」。複数 class を持つ要素では後者はマッチしません。[class~="btn"] なら .btn と同義。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- CSS の id セレクタ(#id)と詳細度・代替パターン
- classセレクタ
- 要素セレクタ
- 子孫セレクタ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?