HTML学習初心者のつまずきポイント第1位がname
, id
, class
属性の使い分けと言われています(どこで)。
というわけで、これらの属性の違いと使い方をわかりやすく解説したいと思います。
HTMLの歴史から見るname, id, class属性
いきなり歴史のお勉強です。退屈そうですね〜。でも、name
,id
,class
属性の使い分けの分かりにくさの理由を知るには、HTMLの歴史を知る必要があるのです。
昔はname属性しかなかった
1993年にいわゆるHTML 1.0がリリースされました。このときすでにname
属性は存在していました。そしてname
属性は要素に名前をつける唯一の方法でした。
主に、form
の要素に名前をつけるときや、ページ内リンク<a>
のターゲットに名前をつけるときに使われていました。
JavaScriptの誕生が1995年、CSSの誕生が1996年です。それより前に誕生していたname
属性は、JavaScriptやCSSから要素を参照するための属性としては不十分な仕様でした。そして、より柔軟な要素の識別方法が求められるようになります。
id, class属性の登場
1999年、HTML 4.01でid
およびclass
属性が導入されます。
この時点から、name
属性は主にform
の要素に名前をつけるときに使用され、それ以外はid
またはclass
属性の使用が推奨されるようになりました。
ただし、name
属性の使用が禁止されたわけではありません。昔と同じように使うことも可能です。ただ非推奨となっただけです。
以上のような経緯があるので、 id
, class
属性と比べてname
属性の使い方はぼんやりしているのです。
name, id, class属性の違い
属性 | 特徴 | 主な用途 | |
---|---|---|---|
一意性 | 複数指定 | ||
name | form関連要素の名前 meta要素の名前 | ||
id | CSSやJavaScriptからの参照名 ページ内リンクのターゲット名 | ||
class | CSSやJavaScriptからの参照名 |
一意性とは、1つのページ内で複数の要素に同じ名前をつけることができるかどうかです。id
はできません(一意性あり)。name
とclass
はできます(一意性なし)。
複数指定とは、1つの要素に複数の名前をつけることができるかどうかです。name
とid
はできません。class
はできます。
name属性
name
はHTMLの要素に名前をつけるための昔からある属性です。
現在は、form
の要素に名前をつけるときとmeta
要素に名前をつけるときに使われます。
form要素での利用
name
属性はform
の要素(input
,textarea
,select
など)に名前をつけるときに使います。
<form action="submit.php" method="post">
<input type="text" name="username">
<textarea name="body"></textarea>
<input type="submit" value="送信">
</form>
上記のフォームを送信すると、サーバにusername=値, body=値
という形でデータが送信されます。つまり、name
属性はフォームの入力欄の項目名を指定するために使われます。
meta要素での利用
<meta>
タグはHTML文書のメタデータを設定するときに使われます。
例えば、HTMLヘッダに次のように記述します。
<head>
<meta name="author" content="勘解由小路まさを">
<meta name="description" content="「WAKUWAKUネット」は人を幸せにするサイトです。">
<meta name="keywords" content="壺, 印鑑, お布施, 合同結婚式, 開運セミナー">
</head>
id属性
id
はHTMLの要素に一意な名前をつけるための属性です。
1つのページ内で異なる要素に同じid名を設定することはできません。また、1つの要素には1つのid名のみを設定することができます。
CSSやJavaScriptから要素を参照するときの識別名やページ内リンクのターゲット名を指定するときに使われます。
CSSでの利用
id
属性で名前をつけた要素をCSSでスタイリングするには次のようにします。
<p id="myElement">このテキストにスタイルを適用します</p>
<style>
#myElement {
color: red;
font-weight: bold;
}
</style>
JavaScriptでの利用
id
属性で名前をつけた要素をJavaScriptで操作するには次のようにします。
<p id="myElement">このテキストを変更します</p>
<button onclick="changeText()">テキストを変更</button>
<script>
function changeText() {
const element = document.getElementById('myElement');
element.innerHTML = '新しいテキスト';
}
</script>
ページ内リンクでの利用
id
属性で名前をつけた要素にページ内リンクで移動するには次のようにします。
<h1 id="section1">セクション1</h1>
<p>あ〜あ、大金持ちの家に生まれたかったなぁ。</p>
<a href="#section1">セクション1に移動</a>
class属性
class
は複数のHTMLの要素に名前をつけてグループ化するための属性です。別の言い方をすると、同じ性質を持っている要素にタグをつけるような感じで使います。
1つのページ内で異なる要素に同じclass名を設定することができます。また、1つの要素に複数のclass名を設定することもできます。
CSSやJavaScriptから要素を参照するときの識別名を指定するときに使われます。
CSSでの利用
class
属性で名前をつけた要素をCSSでスタイリングするには次のようにします。
<p>
<span class="highlight">スタイルが適用されます。</span>
適用されません。
<span class="highlight">適用されます。</span>
</p>
<style>
.highlight {
background-color: yellow;
}
</style>
JavaScriptでの利用
class
属性で名前をつけた要素をJavaScriptで操作するには次のようにします。
<p class="myElement">このテキストを変更します</p>
<button onclick="changeText()">テキストを変更</button>
<script>
function changeText() {
const element = document.getElementsByClassName('myElement')[0];
element.innerHTML = '新しいテキスト';
}
</script>
複数のclass名の指定
1つの要素に複数のclass名を指定する場合は、スペースで区切ります。
<p><span class="highlight important">このテキストにスタイルを適用します。</span></p>
<style>
.highlight {
background-color: yellow;
}
.important {
color: red;
}
</style>
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
name, id, class属性の使い分け
以上を踏まえて、用途別の使用すべき属性は次のとおりになります。
用途 | 使用する属性 | 説明 |
---|---|---|
form関連要素の名前 | name | nameしか使えません。 |
meta要素の名前 | name | nameしか使えません。 |
ページ内リンクのターゲット名 | id | nameも使えますが非推奨です。 |
CSSからの参照名 | id ,class | どちらかというとclassのほうがよく使われます。 nameも使えますが非推奨です。 |
JavaScriptからの参照名 | id ,class | どちらかというとidのほうがよく使われます。 nameも使えますが非推奨です。 |
まず、form
関連要素とmeta
要素の名前をつけるときはname
属性一択です。迷う必要はありません。逆にこれ以外の用途でname
属性を使うことはありません。
ページ内リンクのターゲット名を指定するときはid
属性一択です。昔はname
属性が使われていましたが、今は非推奨です。
CSSからの参照名をつけるときはid
またはclass
属性を使いますが、class
属性を使うことのほうが多いです。なぜなら、複数の要素に対してまとめてスタイルを適用するのが効率的なコードだからです。
JavaScriptからの参照名をつけるときはid
またはclass
属性を使いますが、id
属性を使うことのほうが多いです。なぜなら、JavaScriptで要素を操作するときは特定の1つの要素を扱うことが多いからです。
1つの要素にid
属性とclass
属性の両方を指定することもできます。また、id名をつけた要素の子孫要素にclass名をつけるというように、id
とclass
を組み合わせて使うこともあります。
さいごに
なんだかんだと言ってきましたが、
- ページ内に1つしかないものには
id
属性を使う - 複数あるものには
class
属性を使う
でいいと思います。
でわでわ
コメント