セレクタ (Selectors)
HTML要素を選択するためのパターンです。
セレクタは、どのHTML要素にスタイルを適用するかを指定するために使用されます。基本的なものから複雑な組み合わせまで様々です。
| 種類 | セレクタ | 説明 | 例 |
|---|---|---|---|
| 要素セレクタ | element | 指定されたHTML要素(例: p, div)をすべて選択します。 | p { color: black; } |
| クラスセレクタ | .classname | 指定されたクラス名を持つすべての要素を選択します。 | .important { font-weight: bold; } |
| IDセレクタ | #idname | 指定されたIDを持つ要素を選択します(IDはページ内で一意であるべきです)。 | #header { background-color: lightblue; } |
| 属性セレクタ | [attribute][attribute=value][attribute~=value][attribute|=value][attribute^=value][attribute$=value][attribute*=value] | 特定の属性を持つ、または属性値が特定の値に一致する要素を選択します。~=: スペース区切りのリストに値を含む|=: 値そのものか、ハイフンで始まる^=: 値で始まる$=: 値で終わる*=: 値を含む | a[target="_blank"] { color: green; }input[type="text"] { border: 1px solid gray; } |
| ユニバーサルセレクタ | * | すべての要素を選択します。 | * { margin: 0; padding: 0; box-sizing: border-box; } |
| 子孫セレクタ | A B | 要素Aの子孫である要素Bを選択します。 | div p { color: gray; } |
| 子セレクタ | A > B | 要素Aの直接の子である要素Bを選択します。 | ul > li { list-style-type: square; } |
| 隣接兄弟セレクタ | A + B | 要素Aの直後にある兄弟要素Bを選択します。 | h2 + p { margin-top: 0; } |
| 一般兄弟セレクタ | A ~ B | 要素Aの後にあるすべての兄弟要素Bを選択します。 | h1 ~ p { font-style: italic; } |
| グループ化セレクタ | A, B | 要素Aと要素Bの両方を選択します。 | h1, h2, h3 { font-family: sans-serif; } |
| 擬似クラス (状態) | :hover:active:focus:visited:link:checked:disabled:enabled:required:optional | 特定の状態にある要素を選択します。:hover: マウスカーソルが上にある:active: アクティブ(クリック中など):focus: フォーカスが当たっている:visited: 訪問済みのリンク:link: 未訪問のリンク:checked: チェックされたチェックボックスやラジオボタン:disabled: 無効化されたフォーム要素:enabled: 有効なフォーム要素:required: 必須のフォーム要素:optional: 任意のフォーム要素 | a:hover { text-decoration: underline; }input:focus { border-color: blue; }input:checked + label { color: green; } |
| 擬似クラス (構造) | :first-child:last-child:nth-child(n):nth-last-child(n):first-of-type:last-of-type:nth-of-type(n):nth-last-of-type(n):only-child:only-of-type:empty:root | 親要素内の位置や種類に基づいて要素を選択します。:first-child: 最初の要素:last-child: 最後の要素:nth-child(n): n番目の要素 (例: 2n, odd, 3n+1):nth-last-child(n): 最後からn番目の要素:first-of-type: その種類の最初の要素:last-of-type: その種類の最後の要素:nth-of-type(n): その種類のn番目の要素:nth-last-of-type(n): その種類の最後からn番目の要素:only-child: 兄弟がいない要素:only-of-type: 同じ種類の兄弟がいない要素:empty: 子要素(テキストノード含む)を持たない要素:root: ドキュメントのルート要素 (通常は <html>) | li:first-child { font-weight: bold; }tr:nth-child(even) { background-color: #f2f2f2; }p:only-of-type { color: red; }div:empty { border: 1px dashed red; } |
| 擬似クラス (否定) | :not(selector) | 指定されたセレクタに一致しない要素を選択します。 | p:not(.special) { color: gray; }input:not([type="submit"]) { padding: 5px; } |
| 擬似要素 | ::before::after::first-letter::first-line::selection::placeholder | 要素の特定の部分を選択してスタイルを適用します。::before: 要素の内容の前にコンテンツを挿入::after: 要素の内容の後にコンテンツを挿入::first-letter: ブロックレベル要素の最初の文字::first-line: ブロックレベル要素の最初の行::selection: ユーザーが選択した部分::placeholder: フォーム要素のプレースホルダーテキスト | p::before { content: "Note: "; font-weight: bold; }h1::first-letter { font-size: 2em; color: red; }::selection { background: yellow; color: black; }input::placeholder { color: lightgray; } |
ボックスモデル (Box Model)
要素のサイズと要素間のスペースを制御します。
すべてのHTML要素は、長方形のボックスとして描画されます。ボックスモデルは、これらのボックスの寸法(コンテンツ、パディング、ボーダー、マージン)を定義します。
| プロパティ | 説明 | 値の例 | デフォルト値 |
|---|---|---|---|
width | 要素のコンテンツ領域の幅を設定します。 | 100px, 50%, auto, max-content, min-content, fit-content(percentage|length) | auto |
height | 要素のコンテンツ領域の高さを設定します。 | 100px, 50%, auto, max-content, min-content, fit-content(percentage|length) | auto |
padding | コンテンツ領域とボーダーの間のスペース(内側の余白)を設定します。padding-top, padding-right, padding-bottom, padding-left のショートハンド。 | 10px (全方向)10px 20px (上下、左右)10px 20px 30px (上、左右、下)10px 20px 30px 40px (上、右、下、左) | 0 |
border | ボーダーの幅、スタイル、色をまとめて設定します。border-width, border-style, border-color のショートハンド。 | 1px solid black2px dashed #cccmedium dotted red | 各個別プロパティに依存 |
border-width | ボーダーの幅を設定します。thin, medium, thick または長さ (px, em) を指定できます。 | medium, 2px, 1px 2px 3px 4px (上右下左) | medium |
border-style | ボーダーの線のスタイルを設定します。 | none, hidden, dotted, dashed, solid, double, groove, ridge, inset, outset | none |
border-color | ボーダーの色を設定します。 | black, #ff0000, rgba(0,0,255,0.5), transparent | currentcolor |
border-radius | ボックスの角を丸めます。 | 5px (全角)10px 20px (左上/右下、右上/左下)10px 20px 30px 40px (左上、右上、右下、左下)50% (楕円/円) | 0 |
margin | ボーダーの外側のスペース(外側の余白)を設定します。margin-top, margin-right, margin-bottom, margin-left のショートハンド。auto は中央揃えに使われることがあります。 | 10px (全方向)10px auto (上下10px、左右自動=中央揃え)10px 20px 30px (上、左右、下)10px 20px 30px 40px (上、右、下、左) | 0 |
box-sizing | 要素の幅と高さの計算方法を定義します。content-box: width/height はコンテンツ領域のみ (デフォルト)border-box: width/height に padding と border を含める | content-box, border-box | content-box |
overflow | 要素のボックス内にコンテンツが収まらない場合の表示方法を指定します。overflow-x と overflow-y で水平・垂直方向を個別に指定可能。 | visible (はみ出す), hidden (隠す), scroll (常にスクロールバー), auto (必要な場合のみスクロールバー), clip (隠す、スクロール不可) | visible |
min-width / max-width | 要素の最小幅 / 最大幅を設定します。レスポンシブデザインでよく使用されます。 | 100px, 50%, none (max-widthのみ) | 0 (min-width), none (max-width) |
min-height / max-height | 要素の最小高さ / 最大高さを設定します。 | 100px, 50%, none (max-heightのみ) | 0 (min-height), none (max-height) |
レイアウト (Layout)
要素をページ上に配置する方法です。
要素の表示形式や配置方法を制御し、ページの構造を作り上げます。主要なレイアウト手法には、displayプロパティ、positionプロパティ、float、そしてモダンなFlexboxとGridがあります。
基本 (display, position, float)
| プロパティ | 値 | 説明 |
|---|---|---|
display | block | ブロックレベル要素として表示。前後に改行が入り、幅と高さを指定可能。デフォルトで親要素の幅いっぱいに広がる。例: <div>, <p>, <h1> |
inline | インライン要素として表示。前後に改行が入らず、テキストのように流れる。幅と高さは指定できず、内容はコンテンツに応じて決まる。例: <span>, <a>, <strong> | |
inline-block | インライン要素のように配置されるが、ブロックレベル要素のように幅と高さを指定できる。 | |
none | 要素を表示せず、レイアウト上も存在しないものとして扱う。 | |
flex | 要素をブロックレベルのフレックスコンテナとして定義する。 (Flexbox参照) | |
grid | 要素をブロックレベルのグリッドコンテナとして定義する。 (Grid参照) | |
position | static | デフォルト値。通常のフローに従って配置される。top, right, bottom, left プロパティは影響しない。 |
relative | 通常のフローに従って配置されるが、top, right, bottom, left で相対的な位置調整が可能。元の位置にはスペースが残る。 | |
absolute | 通常のフローから外れ、最も近い position: static 以外の祖先要素を基準に配置される。祖先がなければビューポート基準。top, right, bottom, left で位置を指定。 | |
fixed | 通常のフローから外れ、ビューポート(ブラウザウィンドウ)を基準に固定位置に配置される。スクロールしても位置が変わらない。top, right, bottom, left で位置を指定。 | |
sticky | 通常のフローに従うが、スクロール位置が指定された閾値(top などで指定)に達すると、fixed のように振る舞う。最も近いスクロール可能な祖先要素内で固定される。 | |
top, right, bottom, left | 長さ (px, %, em), auto | position が static 以外の要素の位置を指定する。基準点は position の値による。 |
z-index | 整数, auto | position が static 以外の要素の重なり順(スタッキングコンテキスト)を指定する。数値が大きいほど手前に表示される。 |
float | left, right, none | 要素を左または右に寄せて、後続のコンテンツを回り込ませる。主に画像とテキストの回り込みなどに使われたが、レイアウト目的ではFlexboxやGridが推奨される。 |
clear | left, right, both, none | 先行する float 要素の回り込みを解除する。指定した側の浮動要素の下に配置されるようにする。 |
Flexbox (Flexible Box Layout)
一次元のレイアウトモデルで、コンテナ内のアイテム間のスペース配分や整列を容易にします。
フレックスコンテナ (親要素) のプロパティ
| プロパティ | 値 | 説明 |
|---|---|---|
display | flex | inline-flex | 要素をフレックスコンテナにする。 |
flex-direction | row | row-reverse | column | column-reverse | 主軸の方向(アイテムが並ぶ方向)を指定。 (デフォルト: row) |
flex-wrap | nowrap | wrap | wrap-reverse | アイテムを一行に収めるか、複数行に折り返すか指定。 (デフォルト: nowrap) |
flex-flow | <flex-direction> || <flex-wrap> | flex-direction と flex-wrap のショートハンド。 |
justify-content | flex-start | flex-end | center | space-between | space-around | space-evenly | 主軸方向のアイテムの揃え方を指定。 (デフォルト: flex-start) |
align-items | stretch | flex-start | flex-end | center | baseline | 交差軸方向のアイテムの揃え方(単一行の場合)を指定。 (デフォルト: stretch) |
align-content | stretch | flex-start | flex-end | center | space-between | space-around | space-evenly | 複数行の場合の行間の揃え方(交差軸方向)を指定。flex-wrap: wrap が必要。(デフォルト: stretch) |
gap, row-gap, column-gap | 長さ (px, %, em) | アイテム間の間隔を指定。gap は行と列の両方、row-gap は行間、column-gap は列間の間隔。 |
フレックスアイテム (子要素) のプロパティ
| プロパティ | 値 | 説明 |
|---|---|---|
order | 整数 | アイテムの表示順序を指定。数値が小さいほど先に表示される。(デフォルト: 0) |
flex-grow | 数値 (非負) | コンテナ内の余剰スペースに対するアイテムの伸長係数を指定。(デフォルト: 0) |
flex-shrink | 数値 (非負) | コンテナ内のスペース不足に対するアイテムの収縮係数を指定。(デフォルト: 1) |
flex-basis | 長さ (px, %, em) | auto | content | スペースが配分される前のアイテムの初期サイズを指定。(デフォルト: auto) |
flex | none | [<flex-grow> <flex-shrink>? || <flex-basis>] | flex-grow, flex-shrink, flex-basis のショートハンド。推奨値: initial(0 1 auto), auto(1 1 auto), none(0 0 auto), <positive-number> (例: 1 は 1 1 0%)。(デフォルト: 0 1 auto) |
align-self | auto | stretch | flex-start | flex-end | center | baseline | 個々のアイテムに対して交差軸方向の揃え方を指定。コンテナの align-items を上書き。(デフォルト: auto) |
Grid Layout
二次元のレイアウトシステムで、行と列の両方で要素を配置できます。複雑なレイアウト構造に適しています。
グリッドコンテナ (親要素) のプロパティ
| プロパティ | 値 | 説明 |
|---|---|---|
display | grid | inline-grid | 要素をグリッドコンテナにする。 |
grid-template-columns | トラックリスト (例: 100px 1fr 2fr, repeat(3, 1fr), minmax(100px, 1fr)) | グリッドの列のサイズと名前を定義。fr 単位は利用可能なスペースの比率。 |
grid-template-rows | トラックリスト (例: auto 1fr minmax(50px, auto)) | グリッドの行のサイズと名前を定義。 |
grid-template-areas | 文字列のリスト (例: "header header" "sidebar main" "footer footer") | グリッドエリアに名前を付け、レイアウト構造を視覚的に定義。各文字列が一行を表し、セル名をスペースで区切る。. は空セル。 |
grid-template | none | [<grid-template-rows> / <grid-template-columns>] | [<grid-template-areas> <grid-template-rows>? / <grid-template-columns>?] | grid-template-rows, grid-template-columns, grid-template-areas のショートハンド。 |
grid-auto-columns | トラックサイズ (例: 100px, minmax(100px, auto)) | 暗黙的に作成されるグリッド列(明示的に定義されていない列)のサイズを指定。 |
grid-auto-rows | トラックサイズ (例: auto, minmax(50px, 100px)) | 暗黙的に作成されるグリッド行(明示的に定義されていない行)のサイズを指定。 |
grid-auto-flow | row | column | dense | row dense | column dense | グリッドアイテムが自動配置される際のアルゴリズム(方向と、空きスペースを埋めるかどうか)を指定。(デフォルト: row) |
justify-items | start | end | center | stretch | グリッドアイテムをそのセル内で水平方向に揃える方法を指定。(デフォルト: stretch) |
align-items | start | end | center | stretch | baseline | グリッドアイテムをそのセル内で垂直方向に揃える方法を指定。(デフォルト: stretch) |
place-items | <align-items> <justify-items>? | align-items と justify-items のショートハンド。 |
justify-content | start | end | center | stretch | space-around | space-between | space-evenly | グリッドコンテナ内のグリッド全体の水平方向の揃え方を指定(グリッドの合計サイズがコンテナより小さい場合)。(デフォルト: start) |
align-content | start | end | center | stretch | space-around | space-between | space-evenly | グリッドコンテナ内のグリッド全体の垂直方向の揃え方を指定(グリッドの合計サイズがコンテナより小さい場合)。(デフォルト: start) |
place-content | <align-content> <justify-content>? | align-content と justify-content のショートハンド。 |
gap, row-gap, column-gap | 長さ (px, %, em) | グリッドトラック(行と列)間の間隔を指定。 |
グリッドアイテム (子要素) のプロパティ
| プロパティ | 値 | 説明 |
|---|---|---|
grid-column-start | ライン番号 | ライン名 | span n | auto | アイテムが開始する垂直グリッドラインを指定。 |
grid-column-end | ライン番号 | ライン名 | span n | auto | アイテムが終了する垂直グリッドラインを指定。 |
grid-row-start | ライン番号 | ライン名 | span n | auto | アイテムが開始する水平グリッドラインを指定。 |
grid-row-end | ライン番号 | ライン名 | span n | auto | アイテムが終了する水平グリッドラインを指定。 |
grid-column | <start-line> / [<end-line> | span <number>] | grid-column-start と grid-column-end のショートハンド。(例: 1 / 3, 2 / span 2) |
grid-row | <start-line> / [<end-line> | span <number>] | grid-row-start と grid-row-end のショートハンド。 |
grid-area | エリア名 | <row-start> / <col-start> / <row-end> / <col-end> | アイテムを名前付きグリッドエリアに配置するか、行/列の開始/終了ラインをまとめて指定するショートハンド。 |
justify-self | start | end | center | stretch | 個々のグリッドアイテムをそのグリッドエリア内で水平方向に揃える方法を指定。コンテナの justify-items を上書き。(デフォルト: stretch) |
align-self | start | end | center | stretch | baseline | 個々のグリッドアイテムをそのグリッドエリア内で垂直方向に揃える方法を指定。コンテナの align-items を上書き。(デフォルト: stretch) |
place-self | auto | <align-self> <justify-self>? | align-self と justify-self のショートハンド。 |
テキストスタイリング (Text Styling)
テキストの外観を制御します。
フォント、色、サイズ、行間、配置など、テキストに関する様々なスタイルを設定します。
| プロパティ | 値の例 | 説明 |
|---|---|---|
color | red, #ff0000, rgb(255,0,0), rgba(255,0,0,0.5), hsl(0, 100%, 50%), currentcolor | テキストの色を設定します。 |
font-family | "Helvetica Neue", Arial, sans-serif, "Times New Roman", Times, serif, monospace | フォントの種類を指定します。複数のフォントをカンマ区切りで指定し、左から順に使用可能なフォントが適用されます。最後に総称フォントファミリー(serif, sans-serif, monospaceなど)を指定するのが一般的です。 |
font-size | 16px, 1.2em, 12pt, 120%, medium, larger, smaller | テキストのサイズを設定します。相対単位 (em, %, rem) は親要素やルート要素のサイズに基づきます。 |
font-weight | normal (400), bold (700), lighter, bolder, 100–900 | フォントの太さを設定します。 |
font-style | normal, italic, oblique | フォントのスタイル(斜体など)を設定します。 |
font-variant | normal, small-caps | 小型大文字などのフォント変形を指定します。 |
font | italic small-caps bold 16px/1.5 "Helvetica", Arial, sans-serif | font-style, font-variant, font-weight, font-size/line-height, font-family をまとめて指定するショートハンド。font-size と font-family は必須です。 |
line-height | normal, 1.5 (単位なし), 24px, 150% | 行の高さを設定します。単位なしの値は font-size に対する倍率となり、継承される際に再計算されるため推奨されます。 |
text-align | left, right, center, justify, start, end | ブロック要素内のインラインコンテンツ(テキストなど)の水平方向の配置を設定します。justify は両端揃え。start/end は書字方向に基づきます。 |
vertical-align | baseline, top, middle, bottom, text-top, text-bottom, sub, super, 長さ, % | インライン要素やテーブルセル要素の垂直方向の配置を設定します。 |
text-decoration | none | [underline || overline || line-through] | [<text-decoration-style> || <text-decoration-color>]</text-decoration-color></text-decoration-style> | テキストの下線、上線、取り消し線とそのスタイル、色を設定します。例: underline dotted red |
text-transform | none, capitalize, uppercase, lowercase | テキストの大文字・小文字を変換します。capitalize は各単語の先頭を大文字に。 |
text-indent | 長さ (px, em), % | ブロック要素の最初の行のインデント(字下げ)を設定します。 |
letter-spacing | normal, 長さ (px, em) | 文字間のスペースを調整します。 |
word-spacing | normal, 長さ (px, em), % | 単語間のスペースを調整します。 |
white-space | normal, nowrap, pre, pre-wrap, pre-line, break-spaces | 要素内の空白文字(スペース、タブ、改行)の扱い方を制御します。normal: 空白をまとめ、行末で折り返すnowrap: 空白をまとめ、折り返さないpre: 空白を保持し、折り返さない (<pre>タグと同様)pre-wrap: 空白を保持し、折り返すpre-line: 空白をまとめるが、改行は保持し、折り返すbreak-spaces: pre-wrap に似ているが、行末のスペースでも改行する |
word-break | normal, break-all, keep-all, break-word (非推奨, overflow-wrap: break-word を使用) | 単語の途中での改行ルールを指定します。主にCJK言語(中国語、日本語、韓国語)や長いURLの扱いに影響します。 |
overflow-wrap (旧名: word-wrap) | normal, break-word, anywhere | ボックスからはみ出ることを防ぐために、通常は分割されない単語(長いURLなど)の途中で改行を許可するかどうかを指定します。break-word は単語の途中で改行します。 |
text-shadow | none | [<offset-x> <offset-y> <blur-radius>? <color>? ,]* [<offset-x> <offset-y> <blur-radius>? <color>?]</color></blur-radius></offset-y></offset-x></color></blur-radius></offset-y></offset-x> | テキストに影を付けます。複数の影をカンマ区切りで指定できます。(例: 1px 1px 2px black, 0 0 1em blue) |
背景とボーダー (Backgrounds & Borders)
要素の背景と境界線のスタイルを設定します。
要素の見た目を豊かにするために、背景色、背景画像、グラデーション、そして境界線のスタイルを細かく設定できます。
背景 (Background)
| プロパティ | 値の例 | 説明 |
|---|---|---|
background-color | transparent, lightblue, #f0f0f0, rgba(0, 128, 0, 0.5) | 要素の背景色を設定します。デフォルトは transparent。 |
background-image | none, url("image.jpg"), linear-gradient(red, yellow), radial-gradient(circle, white, black) | 要素の背景画像またはグラデーションを設定します。複数指定可能(カンマ区切り)。 |
background-repeat | repeat (縦横), repeat-x (横のみ), repeat-y (縦のみ), no-repeat, space (均等配置), round (引き伸ばし/縮小) | 背景画像の繰り返し方法を指定します。複数画像に対してカンマ区切りで指定可能。 |
background-position | left top, center center, right bottom, 50% 50%, 10px 20px | 背景画像の初期位置を指定します。キーワード、パーセンテージ、長さで指定可能。複数画像に対してカンマ区切りで指定可能。 |
background-attachment | scroll (要素と共にスクロール), fixed (ビューポートに固定), local (要素の内容と共にスクロール) | 背景画像を要素のスクロールに追従させるか、ビューポートに固定するかを指定します。 |
background-size | auto, cover (全体を覆う), contain (全体が見えるように収める), 長さ (100px 50px), % (50% auto) | 背景画像のサイズを指定します。複数画像に対してカンマ区切りで指定可能。 |
background-origin | padding-box (パディング領域基準), border-box (ボーダー領域基準), content-box (コンテンツ領域基準) | background-position の基準となる領域を指定します。(デフォルト: padding-box) |
background-clip | border-box (ボーダーまで描画), padding-box (パディングまで描画), content-box (コンテンツ領域のみ描画), text (テキストの形状で切り抜く、ベンダープレフィックスが必要な場合あり) | 背景が描画される領域を指定します。(デフォルト: border-box) |
background | 例: lightblue url("img.png") no-repeat center center / cover scroll padding-box content-box | 背景関連のプロパティをまとめて指定するショートハンド。任意の順序で指定可能ですが、background-size は background-position の後にスラッシュ区切りで指定する必要があります。 |
ボーダー (Border)
基本的なボーダープロパティ (border, border-width, border-style, border-color, border-radius) については、「ボックスモデル」セクションを参照してください。
| プロパティ | 値の例 | 説明 |
|---|---|---|
border-top, border-right, border-bottom, border-left | 1px solid black | 特定の辺のボーダーの幅、スタイル、色をまとめて設定します。 |
border-top-width, etc. | 2px | 特定の辺のボーダーの幅を設定します。 |
border-top-style, etc. | dashed | 特定の辺のボーダーのスタイルを設定します。 |
border-top-color, etc. | red | 特定の辺のボーダーの色を設定します。 |
border-top-left-radius, etc. | 10px, 50% | 特定の角の丸みを設定します。 |
border-image-source | none, url("border.png") | ボーダーとして使用する画像を指定します。 |
border-image-slice | 数値 | % [fill?] | ボーダー画像を9つの領域に分割するための内側のオフセットを指定します。fill を付けると中央部分も背景として描画されます。 |
border-image-width | 数値 | % | auto | 長さ | ボーダー画像の幅を指定します。 |
border-image-outset | 数値 | 長さ | ボーダー画像をボーダーボックスの外側にはみ出させる量を指定します。 |
border-image-repeat | stretch | repeat | round | space | ボーダー画像の辺の部分の繰り返し方法を指定します(水平方向と垂直方向を個別に指定可能)。 |
border-image | 例: url("border.png") 30 round | ボーダー画像関連のプロパティをまとめて指定するショートハンド。 |
box-shadow | none | [inset? <offset-x> <offset-y> <blur-radius>? <spread-radius>? <color>? ,]* [inset? <offset-x> <offset-y> <blur-radius>? <spread-radius>? <color>?]</color></spread-radius></blur-radius></offset-y></offset-x></color></spread-radius></blur-radius></offset-y></offset-x> | 要素のフレーム(ボーダーの外側または内側)に影を付けます。inset で内側の影になります。複数の影をカンマ区切りで指定可能。(例: 5px 5px 10px rgba(0,0,0,0.5), inset 0 0 5px blue) |
変形とトランジション (Transforms & Transitions)
要素を視覚的に変形させたり、スタイルの変化を滑らかにアニメーションさせたりします。
transform で要素を移動、回転、拡大縮小、傾斜させ、transition でこれらの変化や他のスタイルの変更に時間的な効果を加えることができます。
変形 (Transform)
| プロパティ | 値(関数) | 説明 |
|---|---|---|
transform | none | 変形を適用しません。 |
translate(tx [, ty])translateX(tx)translateY(ty)translateZ(tz)translate3d(tx, ty, tz) | 要素を水平方向 (tx)、垂直方向 (ty)、Z軸方向 (tz) に移動します。長さまたはパーセンテージで指定。 | |
scale(sx [, sy])scaleX(sx)scaleY(sy)scaleZ(sz)scale3d(sx, sy, sz) | 要素を水平方向 (sx)、垂直方向 (sy)、Z軸方向 (sz) に拡大縮小します。数値で指定 (1が等倍)。 | |
rotate(angle)rotateX(angle)rotateY(angle)rotateZ(angle)rotate3d(x, y, z, angle) | 要素を2D(Z軸周り)または指定された軸周りに回転します。角度 (deg, rad, turn) で指定。rotate3d は回転軸ベクトル (x, y, z) と角度を指定。 | |
skew(ax [, ay])skewX(ax)skewY(ay) | 要素を水平方向 (ax) および/または垂直方向 (ay) に傾斜させます。角度で指定。 | |
matrix(a, b, c, d, tx, ty) | 2D変形を6つの値で指定する行列。 | |
matrix3d(...) | 3D変形を16個の値で指定する4×4行列。 | |
perspective(length) | 3D変形に遠近感を与えます。通常、親要素の perspective プロパティと組み合わせて使われますが、transform 内で個別要素にも指定可能。 | |
| (複数の関数) | translateX(10px) rotate(45deg) scale(1.2) | 複数の変形関数をスペース区切りで指定できます。適用される順序は右から左です。 |
transform-origin | x-offset y-offset z-offset? (キーワード, 長さ, %) | 変形の基点(中心点)を指定します。デフォルトは 50% 50% 0 (要素の中心)。(例: left top, 0 0, 20px 50%) |
transform-style | flat | preserve-3d | 子要素が3D空間内でどのように配置されるかを指定します。preserve-3d は子要素が親の3D空間を共有することを意味します。 |
perspective | none | 長さ | 子要素の3D変形に遠近感を与えるための視点からの距離を指定します。これは変形される要素の親要素に設定します。 |
perspective-origin | x-offset y-offset? (キーワード, 長さ, %) | perspective の消失点の位置を指定します。親要素に設定します。(デフォルト: 50% 50%) |
backface-visibility | visible | hidden | 要素の裏面(3D変形で裏返った場合)を表示するかどうかを指定します。(デフォルト: visible) |
トランジション (Transition)
| プロパティ | 値の例 | 説明 |
|---|---|---|
transition-property | none | all | プロパティ名 (width, color, transform) [, …] | トランジション効果を適用するCSSプロパティを指定します。all ですべての適用可能なプロパティが対象になります。(デフォルト: all) |
transition-duration | 時間 (0s, 250ms, 1.5s) [, …] | トランジションが完了するまでの時間を指定します。(デフォルト: 0s) |
transition-timing-function | ease, linear, ease-in, ease-out, ease-in-out, steps(n, start|end), cubic-bezier(n,n,n,n) [, …] | トランジションの速度曲線(イージング関数)を指定します。(デフォルト: ease) |
transition-delay | 時間 (0s, 1s, -500ms) [, …] | プロパティが変更されてからトランジションが開始されるまでの遅延時間を指定します。(デフォルト: 0s) |
transition | [property duration timing-function delay] [, …] 例: background-color 0.5s ease-in-out, opacity 0.3s linear 0.1s | 上記4つのトランジション関連プロパティをまとめて指定するショートハンド。複数のプロパティに異なるトランジションを設定する場合はカンマ区切りで記述します。 |
アニメーション (Animation)
キーフレームを使って複雑なアニメーションを作成します。
@keyframes ルールでアニメーションの途中経過を定義し、animation プロパティで要素にそのアニメーションを適用します。
キーフレーム定義 (@keyframes)
@keyframes ルールを使って、アニメーションの名前と、そのアニメーション中の特定の時点(キーフレーム)でのスタイルを定義します。
@keyframes slidein { from { /* 0% と同じ */ transform: translateX(-100%); opacity: 0; } 75% { transform: translateX(10px); opacity: 1; } to { /* 100% と同じ */ transform: translateX(0); opacity: 1; }
}
@keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.1); } 100% { transform: scale(1); }
}アニメーションプロパティ
| プロパティ | 値の例 | 説明 |
|---|---|---|
animation-name | none | キーフレーム名 (例: slidein) [, …] | 適用する @keyframes ルールの名前を指定します。 |
animation-duration | 時間 (0s, 3s, 500ms) [, …] | アニメーション1サイクルの所要時間を指定します。(デフォルト: 0s) |
animation-timing-function | ease, linear, steps(n, start|end), cubic-bezier(...) [, …] | アニメーションの速度曲線を指定します。(デフォルト: ease) |
animation-delay | 時間 (0s, 1s, -0.5s) [, …] | 要素が読み込まれてからアニメーションが開始されるまでの遅延時間を指定します。(デフォルト: 0s) |
animation-iteration-count | 数値 (1, 3) | infinite [, …] | アニメーションを繰り返す回数を指定します。infinite で無限に繰り返します。(デフォルト: 1) |
animation-direction | normal | reverse | alternate | alternate-reverse [, …] | アニメーションを再生する方向を指定します。normal: 順方向reverse: 逆方向alternate: 順方向と逆方向を交互にalternate-reverse: 逆方向と順方向を交互に。(デフォルト: normal) |
animation-fill-mode | none | forwards | backwards | both [, …] | アニメーションが再生されていない時(開始前や終了後)に要素にどのスタイルを適用するかを指定します。none: スタイルを適用しないforwards: 終了時のスタイルを保持backwards: 開始前の遅延中に開始時のスタイルを適用both: forwards と backwards 両方の効果。(デフォルト: none) |
animation-play-state | running | paused [, …] | アニメーションを再生中か一時停止中かを指定します。(デフォルト: running) |
animation | [name duration timing-function delay iteration-count direction fill-mode play-state] [, …] 例: slidein 3s ease-in-out 1s infinite alternate forwards | 上記のアニメーション関連プロパティをまとめて指定するショートハンド。 |
アニメーションはユーザーの注意を引きつけたり、状態変化を分かりやすく伝えたりするのに効果的ですが、過度な使用はパフォーマンスに影響を与えたり、ユーザー体験を損ねたりする可能性があるため注意が必要です。特に transform と opacity を中心にアニメーションさせると、パフォーマンスが良い傾向があります。
レスポンシブデザイン (Responsive Design)
様々なデバイスや画面サイズに適応するレイアウトを作成します。
メディアクエリ (@media) を使用して、特定の条件下(画面幅、画面の向き、解像度など)でのみ適用されるCSSルールを定義します。
メディアクエリ (@media)
@media ルールは、特定のメディアタイプやメディア特性に基づいてスタイルを適用します。
/* 基本的な構文 */
@media media-type and (media-feature) { /* 条件に一致した場合に適用されるCSSルール */ .selector { property: value; }
}
/* 例1: 画面幅が600px以下の場合 */
@media (max-width: 600px) { nav ul { flex-direction: column; /* ナビゲーションを縦並びに */ } .main-content { width: 100%; /* メインコンテンツを全幅に */ } .sidebar { display: none; /* サイドバーを非表示に */ }
}
/* 例2: 画面幅が768px以上の場合 (min-widthは「以上」) */
@media (min-width: 768px) { .container { max-width: 720px; /* コンテナの最大幅を設定 */ margin-left: auto; margin-right: auto; }
}
/* 例3: 画面幅が992px以上、1200px未満の場合 */
@media (min-width: 992px) and (max-width: 1199.98px) { body { font-size: 18px; }
}
/* 例4: 印刷時 (メディアタイプ指定) */
@media print { body { font-family: serif; color: black; } a::after { content: " (" attr(href) ")"; /* リンクのURLを表示 */ } .no-print { display: none; /* 印刷しない要素を非表示 */ }
}
/* 例5: 画面の向きが横向きの場合 */
@media (orientation: landscape) { .photo-gallery { grid-template-columns: repeat(4, 1fr); /* 横向きなら列数を増やす */ }
}
/* 例6: 高解像度ディスプレイ (Retinaなど) */
@media (min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 2) { .logo { background-image: url('logo@2x.png'); background-size: contain; }
}主要なメディア特性 (Media Features)
| 特性 | 値の例 | 説明 |
|---|---|---|
width (min-width, max-width) | 長さ (px, em) | ビューポートの幅。レスポンシブデザインで最もよく使われるブレークポイント設定。 |
height (min-height, max-height) | 長さ (px, em) | ビューポートの高さ。 |
aspect-ratio (min-aspect-ratio, max-aspect-ratio) | 比率 (例: 16/9) | ビューポートの幅と高さの比率。 |
orientation | portrait (縦長) | landscape (横長) | ビューポートの向き。 |
resolution (min-resolution, max-resolution) | 解像度 (dpi, dpcm, dppx) | 出力デバイスの解像度(ピクセル密度)。高解像度ディスプレイ向けスタイル指定に使用。 |
hover | none | hover | プライマリ入力デバイスが要素上にホバーできるか。タッチデバイス (none) とマウス操作デバイス (hover) の区別に利用。 |
pointer | none | coarse | fine | プライマリ入力デバイスのポインティング精度。coarse はタッチなど、fine はマウスなど。 |
prefers-color-scheme | no-preference | light | dark | ユーザーがOSで設定したライトモード/ダークモードの優先設定。ダークモード対応に使用。 |
prefers-reduced-motion | no-preference | reduce | ユーザーがOSでアニメーションやモーションの削減を要求しているか。過度な動きを抑えるアクセシビリティ対応に使用。 |
モバイルファースト vs デスクトップファースト:
– モバイルファースト: まずモバイル向けのスタイルを基本とし、min-width を使って画面幅が広がるにつれてスタイルを追加・変更していくアプローチ。多くの場合推奨されます。
– デスクトップファースト: まずデスクトップ向けのスタイルを基本とし、max-width を使って画面幅が狭まるにつれてスタイルを調整していくアプローチ。
その他 (Miscellaneous)
上記カテゴリに含まれないが、よく使われる便利なプロパティです。
| プロパティ | 値 | 説明 |
|---|---|---|
opacity | 数値 (0.0 – 1.0) | 要素の不透明度を設定します。0.0で完全に透明、1.0で完全に不透明。visibility: hidden と異なり、レイアウト上のスペースは占有したままです。 |
visibility | visible | hidden | collapse | 要素を表示するかどうかを指定します。hidden: 非表示にするが、レイアウト上のスペースは残る。collapse: テーブルの行や列に使われ、hidden に似ているが、スペースも詰める場合がある(ブラウザ依存)。(デフォルト: visible) |
cursor | auto, default, none, pointer, wait, text, move, not-allowed, grab, grabbing, help, crosshair, zoom-in, zoom-out, url(...), … | 要素上にマウスカーソルがある時の形状を指定します。 |
outline | [outline-color || outline-style || outline-width] (例: red solid 2px) | 要素のボーダーの外側に描画される輪郭線。フォーカス表示などによく使われます。border と異なり、レイアウトに影響を与えません。 |
outline-offset | 長さ (px, em) | outline を要素の境界線からどれだけ離して描画するかを指定します。 |
filter | none | 関数リスト (例: blur(5px), brightness(0.8), contrast(200%), grayscale(100%), hue-rotate(90deg), invert(75%), opacity(50%), saturate(4), sepia(60%), drop-shadow(...), url(...)) | 要素(画像や背景など)にぼかし、色調変更、ドロップシャドウなどのグラフィカルな効果を適用します。 |
backdrop-filter | none | 関数リスト (filter と同様) | 要素の背後にある領域にグラフィカルな効果(すりガラス効果など)を適用します。要素自体に背景色や透明度が必要な場合があります。 |
clip-path | none | 基本シェイプ (circle(), ellipse(), polygon(), inset()) | url(...) | 要素の表示領域を指定した形状で切り抜きます(クリッピング)。 |
mask-image, mask-mode, mask-repeat, mask-position, mask-clip, mask-origin, mask-size, mask-composite, mask | (各種) | 要素の表示領域を画像やグラデーションを使ってマスキングします。clip-path より複雑な形状やグラデーションマスクが可能です。mask はショートハンド。 |
user-select | auto | none | text | all | ユーザーが要素内のテキストを選択できるかどうかを制御します。none で選択不可にします。 |
pointer-events | auto | none | その他SVG用 | 要素がマウスイベント(クリック、ホバーなど)のターゲットになるかどうかを制御します。none を指定すると、要素はイベントを無視し、その下にある要素がイベントを受け取ります。 |
scroll-behavior | auto | smooth | ページ内リンク (#hash) や JavaScript によるスクロール操作が、瞬時に移動するかスムーズに行われるかを指定します。通常 <html> 要素に適用します。 |
accent-color | auto | 色 | 一部のフォームコントロール(チェックボックス、ラジオボタン、プログレスバーなど)のアクセントカラー(強調色)を、OSのデフォルトではなく指定した色で簡単に変更できます。 |
object-fit | fill | contain | cover | none | scale-down | 置換要素(<img> や <video> など)の内容が、指定された幅と高さにどのようにフィットするかを指定します。background-size に似ています。(デフォルト: fill) |
object-position | 位置 (50% 50%, left top, 10px 20px) | object-fit でリサイズされた置換要素の内容の位置を指定します。background-position に似ています。(デフォルト: 50% 50%) |
appearance | none | auto | その他特定UI要素 | 要素がプラットフォーム固有のスタイルで表示されるのを無効にし、より自由にスタイルを適用できるようにします。フォーム要素のカスタマイズなどで使われます。(-webkit-appearance, -moz-appearance が必要な場合あり) |
resize | none | both | horizontal | vertical | block | inline | ユーザーが要素のサイズを変更できるかどうか、またどの方向に変更できるかを指定します。通常 textarea などに適用されます。overflow が visible 以外である必要があります。(デフォルト: none) |