Menu

HTML 属性とは: 書き方、class、id、data-*、真偽属性

属性は HTML 要素に情報を追加します。リンクの行き先、画像の内容、適用する CSS クラスなどです。書き方、すべての要素で使えるグローバル属性、class と id、真偽属性、data-* 属性を解説します。

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

HTML の属性とは

属性は要素に情報を追加します。開始タグの中に、名前、イコール記号、引用符で囲んだ値の順で name="value" と書きます。1 つの要素にいくつでも属性を付けられ、スペースで区切ります。

href はリンクの行き先、src と alt は画像の説明、type、placeholder、required は入力欄の設定です。要素ごとに使える属性が決まっていて、一部の属性 (下で紹介するグローバル属性) はどの要素でも使えます。

書き方のルール

<input type="text" name="city" value="Paris" disabled>
  • 名前、イコール記号、引用符で囲んだ値。 ダブルクォートが一般的ですが、シングルクォートも使えます (値の中にダブルクォートを入れるには title='Say "hi"' と書きます)。
  • 名前は大文字と小文字を区別しない。 CLASS と class は同じ属性です。値は区別されます。class="Box" と class="box" は別のクラスです。
  • スペースがなければ引用符は省略できるが、付けておく。 class=big box と書くと、要素にはクラス big と、意味のない box という 2 つ目の属性が付きます。
  • 順番は関係ない。 <img alt="" src="a.png"> は <img src="a.png" alt=""> と同じです。
  • 1 つの要素に同じ名前は 1 回だけ。 同じ属性が 2 回あると、ブラウザは最初のものを残し、2 つ目は何も言わずに捨てます。

真偽属性

オンかオフかだけを表す属性があります。これらは属性があれば true で、値は無視されます。disabled、checked、required、readonly、hidden、multiple、autofocus、open がこの仕組みです。

3 つ目のボタンは値が false なのに無効になっています。ブラウザは属性があるかどうかしか見ないからです。真偽属性をオフにするには、属性を削除します。JavaScript の button.disabled = false はまさにそれをしています。

class 属性

class は要素に 1 つ以上の名前を付け、CSS や JavaScript がその名前で要素を見つけます。複数の要素で同じクラスを共有でき、1 つの要素にスペース区切りで複数のクラスを付けられます。

クラスを追加するたびに、そのルールが上に重なります。CSS ではドットでクラスを選択し (.card)、JavaScript では element.classList.add('featured') や classList.remove で変更します。スタイルを付けるときは通常クラスを使い、CSS の大半はクラスを対象にします。

id 属性

id は要素にページ内で一意の名前を付けます。リンク先、<label for>、document.getElementById など、ちょうど 1 つの要素が必要なときに使います。

for="email" が id="email" を指しているので、ラベルをクリックすると入力欄にフォーカスが移ります。リンクは href のフラグメントが id と一致するので、#pricing までスクロールします。

classid
共有できる要素の数いくつでも1 つ (一意)
1 つの要素に付けられる値複数 (スペース区切り)1 つ
CSS セレクタ.name#name
主な用途要素のグループにスタイルを付けるリンク先、ラベル、JavaScript で扱う特定の要素

id にスペースは使えません。CSS で扱いやすいように英字で始めましょう。#2col はエスケープしないと有効な CSS セレクタになりません。

グローバル属性

次の属性はどの要素でも使えます。

属性働き
id要素の一意な名前
classスペース区切りのクラス名のリスト
styleインライン CSS (style="color: red" など)
titleマウスを重ねたときに表示されるツールチップ
lang内容の言語 (lang="fr" など)
dir文字の方向: ltr、rtl、auto
hidden要素を非表示にする (真偽属性)
tabindexTab キーでフォーカスできるようにする、または順番を決める
contenteditableユーザーが要素のテキストを編集できるようにする
data-*JavaScript で読み取る独自のデータ

lang 属性 はスクリーンリーダー、翻訳、検索に影響するので専用のページがあります。

data-* 属性

要素に独自の値を持たせたいときは、名前の先頭に data- を付けます。接頭辞の後はどんな名前でも使え、JavaScript からは element.dataset で読み取れます。ハイフンはキャメルケースに変換されます。

data-product-id は dataset.productId になります。値は常に文字列で返るので、計算する前に Number() で変換しましょう。CSS からも選択できます: [data-price="4.50"]。

よくある間違い

  • class を 2 回書く。 <div class="a" class="b"> では a しか残りません。1 つの属性にまとめます: class="a b"。
  • id を使い回す。 同じ id の要素が 2 つあると、#links、ラベル、getElementById (最初の 1 つしか返さない) が正しく動きません。繰り返すものにはクラスを使いましょう。
  • disabled="false" や checked="false"。 属性が残っているので、オンのままです。属性を削除しましょう。
  • スペースを含む値を引用符で囲まない。 alt=My photo では alt が My になります。値はすべて引用符で囲みましょう。
  • data- なしで属性を作る。 <div price="4"> は無効な HTML で、将来の標準の属性と衝突するおそれがあります。data-price を使いましょう。

よくある質問

HTML の属性とは何ですか?

属性は開始タグの中に name="value" の形で書く追加情報です。要素の設定を決めます。href はリンクの行き先、src と alt は画像の説明、class と id は CSS や JavaScript が要素を見つけるための名前です。

HTML の class と id の違いは何ですか?

id はページ内で一意でなければならず、1 つの要素を特定します。#fragment リンク、<label for>、getElementById で使います。class は複数の要素で共有でき、1 つの要素にスペース区切りで複数のクラスを付けられます。スタイルにはクラスを使いましょう。

HTML 要素に複数の class を付けるには?

1 つの class 属性にスペースで区切って書きます: <div class="card featured dark">。class を 2 回書いても効きません。ブラウザは最初の 1 つだけを残します。

HTML の属性値に引用符は必要ですか?

値にスペースや特殊文字がなければ省略できますが、常に引用符で囲むのが安全です。class=big box と書くと、要素にはクラス big と、box という別の属性が付きます。

disabled="false" と書いてもボタンが無効のままなのはなぜですか?

disabled は真偽属性で、値に関係なく属性があるだけで true になります。要素を有効にするには属性を削除するか、JavaScript で button.disabled = false とします。これで属性が削除されます。

HTML の属性を自分で作れますか?

data- を先頭に付けます。data-price="12" や data-user-id="7" はどの要素でも有効で、JavaScript から element.dataset で読み取れます。接頭辞のない独自の名前は無効な HTML です。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める