Menu

インライン CSS: style 属性と HTML に CSS を書く 3 つの方法

インライン CSS は style 属性を使って要素に直接宣言を書きます。書き方、インラインスタイルが適している場面、スタイルシートより優先される理由、内部 CSS や外部 CSS との違いを解説します。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

インライン CSS とは

インライン CSS は、HTML 要素の style 属性に直接書く CSS です。値は property: value; という宣言の並びで、その要素だけに適用されます。

セレクタも波かっこもありません。属性を書いた要素そのものが対象です。宣言はセミコロンで区切ります。最後のセミコロンは省略できますが、残しておくと次の宣言を追加するときに安全です。

書き方

<element style="property: value; property: value;">
部分例補足
属性style="..."グローバル属性なので、すべての HTML 要素で使えます
宣言color: #2563eb;スタイルシートのルール内と同じ書き方です
複数の宣言padding: 8px; border: 1px solid #e5e7eb;; で区切ります
中に引用符を書くstyle="font-family: 'Courier New', monospace;"ダブルクォートの属性の中ではシングルクォートを使います

宣言以外は書けません。:hover、::before、@media、セレクタは style 属性には入りません。

HTML に CSS を書く 3 つの方法

CSS をページに適用する方法は 3 つあります。このページでは 1 つ目を扱います。外部 CSS と内部 CSS は別のページで解説しています。

方法CSS を書く場所適用範囲主な用途
インライン1 つの要素の style 属性その要素一度きりの値、JavaScript が設定する値
内部ページ内の <style> 要素そのページ1 ページのデモ、メールテンプレート、クリティカル CSS
外部<link> で読み込む .css ファイル読み込んだすべてのページサイト全体のスタイル

同じ段落を 3 つの方法でスタイルした例です (プレビューでは 2 つ目のファイルを読み込めないため、外部ファイルはコメントで示しています):

3 つ目の段落は .note ルールの padding と角丸を残し、背景だけを置き換えています。インラインスタイルがその 1 つのプロパティだけを設定しているからです。

インラインスタイルが優先される理由

スタイルシートのルールとインラインスタイルが同じプロパティを設定すると、インラインスタイルが勝ちます。セレクタの詳細度は関係なく、ID セレクタでも負けます。

例外は !important だけです。スタイルシートで !important を付けた宣言は通常のインライン宣言に勝ち、インラインの !important はその両方に勝ちます。インラインスタイルがサイトの保守を難しくするのはこのためです。スタイルシートから変更するには !important が必要になり、!important の付け合いが始まります。優先順位の全体は !important のページ で解説しています。

インライン CSS が適している場面

インラインスタイルが向いているのは、値がデザインではなくデータの場合です。つまり要素ごとに変わり、テンプレートや JavaScript が書き込む値です。

見た目 (色、高さ、角丸) はスタイルシートに書き、バーごとに異なる幅だけをインラインにしています。JavaScript は element.style を通じて同じ属性を書き込みます:

クリック後、段落の HTML は style="color: rgb(245, 158, 11); font-weight: bold;" になります。ハイフンを含むプロパティ名は JavaScript ではキャメルケースになります (font-weight は fontWeight)。

多くの場合、CSS 変数を使うのがいちばんすっきりします。インラインでは変数だけを style="--progress: 35%" のように設定し、スタイルシート側でそれを使います。CSS 変数 を参照してください。

インライン CSS でできないこと

  • 状態や疑似要素が書けない。 style 属性に :hover、:focus、::before は書けません。
  • メディアクエリが使えない。 インラインの幅をスマートフォンで変えることはできません。
  • 繰り返しになる。 同じインラインスタイルのボタンが 10 個あれば、修正箇所も 10 か所です。
  • 上書きしにくい。 スタイルシートから勝てるのは !important だけです。
  • Content Security Policy。 style-src に 'unsafe-inline' がない厳しい CSP では、HTML に書いた style 属性がブロックされます。

よくある間違い

  • style の中にセレクタや波かっこを書く。 style="p { color: red }" は無視されます。書けるのは宣言だけです。
  • : の代わりに = を使う。 color=red ではなく color: red です。
  • ダブルクォートを入れ子にする。 style="font-family: "Arial"" は属性がそこで終わってしまいます。中ではシングルクォートを使います。
  • 単位を忘れる。 style="width: 200" は無視されます。200px と書きましょう。単位を省略できるのは長さが 0 のときだけです。
  • サイト全体をインラインでスタイルする。 繰り返すスタイルはスタイルシートのクラスに移し、インラインスタイルは要素ごとの値だけに使いましょう。

よくある質問

インライン CSS とは何ですか?

インライン CSS は要素の style 属性に書く CSS です。例: <p style="color: red;">。セレクタは使わず、宣言はその 1 つの要素だけに適用されます。

HTML に CSS を書く 3 つの方法は何ですか?

インライン (要素の style 属性)、内部 (ページ内の <style> 要素)、外部 (<head> 内の <link rel="stylesheet" href="styles.css"> で読み込む別の .css ファイル) の 3 つです。サイト全体には外部ファイルを使うのが一般的です。

インライン CSS は外部 CSS より優先されますか?

ほとんどの場合、優先されます。style 属性の宣言は、詳細度に関係なくスタイルシートのどのセレクタにも勝ちます。スタイルシートが勝てるのは !important を付けたときだけで、インラインの !important はそれにも勝ちます。

インライン CSS は使わないほうがよいですか?

サイト全体のスタイルには向いていません。同じ記述の繰り返しになり、:hover やメディアクエリが使えず、上書きもしにくいからです。プログレスバーの幅やユーザーが選んだ色のように、JavaScript やテンプレートが要素ごとに設定する値には問題なく使えます。

インライン CSS で hover は使えますか?

使えません。style 属性に書けるのは宣言だけなので、:hover などの疑似クラス、::before などの疑似要素、@media ルールは書けません。<style> 要素かスタイルシートに書きましょう。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める