要素の属性
概要
ウェブページ要素の属性(attribute)は要素の動作をカスタマイズでき、異なる属性によって要素が異なる動作を示します。要素の属性はHTMLタグの内部に「キーと値のペア」として記述されます。
<html lang="en">
上記のコードでは、<html>
タグの内部にlang="en"
というキーと値のペアがあり、これがhtml
要素の属性と呼ばれます。属性名はlang
で、属性値はen
です。
属性名はタグ名と同様に、大文字小文字を区別しないため、lang
とLANG
は同じ属性です。
属性名と属性値は等号=
で結ばれます。属性値はシングルクォートまたはダブルクォートで囲むことができ、統一してダブルクォートを使うことが推奨されます。一部の属性値はクォートを使用せずに記述できますが、そうしない方が良いです。
一部の属性はブール属性であり、属性値は「オン」と「オフ」の2つの状態しかありません。この場合、属性値を省略することができ、属性名を追加するだけでその属性が有効になります。
<input type="text" required>
上記のコードでは、required
は<input>
タグのブール属性です。この属性が追加されると有効になり、追加されない場合は無効となります。
全体属性
全体属性(global attributes)はすべての要素で使用できる属性です。つまり、次の属性を任意のウェブページ要素に追加できますが、特定の要素に対しては意味を持たない場合もあります。
以下は一般的な全体属性の一覧です。
id
id
属性は、ウェブページ内の要素の一意識別子です。例えば、ページには複数の<p>
タグが含まれることがありますが、id
属性によって各<p>
タグにユニークな識別子を指定できます。
<p id="p1"></p>
<p id="p2"></p>
<p id="p3"></p>
上記のコードでは、3つの<p>
タグが異なるid
属性を持っているため、それぞれを区別できます。
id
属性の値はページ全体でユニークでなければなりません。同じページ内に同一のid
を持つ要素が2つ存在してはいけません。また、id
属性の値には空白を含めることはできません。
さらに、id
属性の値はURLの先頭に#
を追加して、ページ内リンクのアンカーとして使用できます。例えば、ユーザーがhttps://foo.com/index.html#bar
というURLにアクセスすると、ブラウザは自動的にbar
というIDを持つ要素にページをスクロールし、その部分を最初に表示します。
class
class
属性は、ウェブページ要素を分類するために使用されます。異なる要素のclass
属性の値が同じであれば、それらは同じカテゴリに属していることを意味します。
<p class="para"></p>
<p></p>
<p class="para"></p>
上記のコードでは、最初の<p>
タグと3つ目の<p>
タグは同じカテゴリに属しているため、class
属性が同じです。
要素は複数のclass
を同時に持つことができ、それらは空白で区切られます。
<p class="p1 p2 p3"></p>
上記の<p>
要素は、p1
、p2
、p3
の3つのclass
を同時に持っています。
title
title
属性は要素に追加の説明を付与するために使用されます。多くのブラウザでは、要素の上にマウスをホバーするとtitle
属性の値がツールチップとして表示されます。
<div title="著作権の説明">
<p>当サイトのコンテンツはクリエイティブ・コモンズライセンスのもとで使用できます。</p>
</div>
上記のコードでは、title
属性がこのコンテンツの目的を説明しています。マウスをホバーすると、ブラウザは浮動ツールチップを表示し、マウスを離すとツールチップは消えます。
tabindex
ウェブページは通常マウスで操作しますが、特定の状況ではキーボードを使いたい、あるいはキーボードしか使えない場合があります。ブラウザはTabキーを使用して、ウェブページ要素を移動する機能を提供しています。つまり、Tabキーを押し続けることで、ページのフォーカスがある要素から別の要素に移動し、フォーカスが当たった要素に対して次のアクションを行えます(例えば、リンクをクリックしたり、テキストボックスに文字を入力したりします)。
ここで問題となるのが、Tabキーを押したときに、ブラウザがどの要素にフォーカスを移すべきかです。HTMLでは、これを解決するためにtabindex
属性が提供されています。この属性の名前が示すように、Tabの順序(index)を指定するものです。
tabindex
属性の値は整数で、Tabキーを押した際にページフォーカスが移動する順序を表します。異なる値は異なる意味を持ちます。
- 負の整数:要素はフォーカスを受け取ることができます(例えば、JavaScriptの
focus()
メソッドを使用)ただし、Tabキーによるフォーカス移動には含まれません。通常、この値は-1
です。 0
:要素はTabキーの移動に参加し、その順序はブラウザによって決定され、通常はページ内の出現順に従います。- 正の整数:要素はTabキーの移動に参加し、小さい値から順に移動します。複数の要素が同じ
tabindex
値を持つ場合は、HTMLソース内の出現順に従います。
<p tabindex="0">この段落はフォーカスを受け取ることができます。</p>
上記のコードでは、<p>
タグのtabindex
が0
に設定されており、この要素はフォーカスを受け取ることができ、Tabキーで移動する際の順序はソース内の位置に基づいて決まります。
一般的に、tabindex
属性は0
に設定して自然な順序で移動する方が、ユーザーの予想に合致します。特殊なレイアウトがある場合を除き、Tabキーによる移動順序はページ内の自然な順序が理想的です。もし、ページ内のすべての要素にtabindex
が設定されていない場合、デフォルトで移動できる要素(リンクやテキストボックスなど)のみがTabキーの移動に参加し、その順序はソース内の位置に基づいて決まります。したがって、フォーカスを受け取る必要がある要素にのみtabindex
を設定することが推奨されます。
accesskey
accesskey
属性は、ウェブページ要素にフォーカスを与えるショートカットキーを指定します。この属性の値は1つの印刷可能な文字でなければなりません。ショートカットキーを押すと、その要素がフォーカスを受け取ります。
<button accesskey="s">送信</button>
上記のコードでは、<button>
のショートカットキーはs
であり、ショートカットキーを押すとその要素がフォーカスを受け取ります。
accesskey
属性の文字キーは、機能キーと組み合わせて押す必要があります。つまり、ショートカットキーは「機能キー + 文字キー」の組み合わせです。ブラウザやオペレーティングシステムによって、機能キーは異なります。例えば、WindowsやLinux上のChromeブラウザではAlt + 文字キー
がショートカットキーとなり、MacではCtrl + Alt + 文字キー
が使用されます。
注意:accesskey
がオペレーティングシステムやブラウザのショートカットキーと衝突する場合、そのショートカットキーは機能しません。
style
style
属性は、現在の要素にCSSスタイルを指定するために使用されます。具体的な設定方法については、CSSのチュートリアルを参照してください。
<p style="color: red;">こんにちは</p>
上記のコードでは、テキストの色が赤に指定されています。
hidden
hidden
はブール属性であり、現在の要素がページに関連しないことを示します。そのため、ブラウザはこの要素をレンダリングせず、ページ上に表示されません。
<p hidden>この段落はページに表示されません。</p>
上記のコードでは、このp
要素はページ上には表示されません。
注意:CSSの可視性設定は、hidden
属性よりも優先されます。もしCSSで要素が可視に設定されている場合、hidden
属性は無効になります。
lang, dir
lang
属性は要素が使用する言語を指定します。
<p lang="en">hello</p>
<p lang="zh">你好</p>
上記のコードでは、最初の<p>
タグのlang
属性は英語を指定し、2つ目の<p>
タグは中国語を指定しています。
lang
属性の値は、BCP47標準に準拠する必要があります。以下は一般的な言語コードです。
- zh:中国語
- zh-Hans:簡体中国語
- zh-Hant:繁体中国語
- en:英語
- en-US:アメリカ英語
- en-GB:イギリス英語
- es:スペイン語
- fr:フランス語
dir
属性はテキストの読み取り方向を指定します。値には以下の3つの選択肢があります。
ltr
:左から右に読む言語(例:英語)。rtl
:右から左に読む言語(例:アラビア語、ペルシャ語、ヘブライ語)。auto
:ブラウザが内容を解析し、適切な読み取り方向を自動的に決定します。
translate
translate
属性はテキスト要素にのみ使用され、翻訳ソフトウェアがそのテキストを翻訳しないように指示します。
<p>
<span translate="no">Wien<span>
named world's most liveable city (again)!
</p>
上記の例では、translate="no"
は翻訳ソフトウェアに対して、<span>
要素内のテキストを翻訳しないように指示しています。
もしtranslate
がyes
に設定されている場合は、そのテキストを翻訳するよう指示しています。
contenteditable
HTMLページの内容はデフォルトではユーザーが編集できませんが、contenteditable
属性を使用すると、ユーザーがその内容を変更できるようになります。この属性には次の2つの値があります。
true
または空の文字列:内容を編集可能にします。false
:内容は編集できません。
<p contenteditable="true">
マウスをクリックして、この文章を編集できます。
</p>
上記のコードでは、マウスでクリックすることで、この文章が編集可能になります。ただし、サーバーに送信しない限り、ページをリフレッシュすると元の内容に戻ります。
この属性は列挙属性であり、ブール属性ではありませんので、値を指定することが推奨されます。
spellcheck
多くのブラウザはデフォルトでスペルチェック機能を持っており、入力時に誤った単語の下に赤い波線が表示されます。spellcheck
属性は、スペルチェック機能をオンにするかオフにするかを指定します。
この属性には2つの可能な値があります。
true
:スペルチェック機能をオンにします。false
:スペルチェック機能をオフにします。
<p contenteditable="true" spellcheck="true">
英単語 "separate" は "seperate" と間違えやすい。
</p>
上記のコードでは、誤ったスペル "seperate" の下に波線が表示され、誤りを示します。
この属性は編集時にのみ有効なので、contenteditable
属性も設定する必要があります。マウスでクリックして編集状態にした場合にのみ、スペルチェックが有効になります。編集不可の要素では、この属性は無効です。
この属性はブール属性のように見えますが、実際には列挙属性ですので、値を省略せずに指定することが推奨されます。もしこの属性が指定されていない場合、ブラウザは自動的にスペルチェックのオン・オフを決定します。
data-
属性
data-
属性はカスタムデータを保存するために使用されます。他の属性や要素にデータを保存する場所がない場合、data-
属性を使うことができます。
<a href="#" class="tooltip" data-tip="this is the tip!">リンク</a>
上記のコードでは、data-tip
属性がリンクのヒント文字を保存しています。
data-
属性はCSSやJavaScriptを使用して操作するため、ここでは詳細は扱いません。以下にCSSの例を示します。
/* HTML のコード
<div data-role="mobile">
モバイル専用のコンテンツ
</div>
*/
div[data-role="mobile"] {
display:none;
}
/* HTML のコード
<div class="test" data-content="This is the div content">test</div>
*/
.test {
display: inline-block;
}
.test:after {
content: attr(data-content);
}
イベントハンドラ属性
上記の全ての属性に加え、グローバル属性にはイベントハンドラ属性(event handler)が含まれています。これらはユーザーのアクションに応答するための属性です。これらの属性の値は全てJavaScriptコードです。JavaScriptのチュートリアルを参照してください。ここでは、これらの属性のリストを示します。
onabort, onautocomplete, onautocompleteerror, onblur, oncancel, oncanplay, oncanplaythrough, onchange, onclick, onclose, oncontextmenu, oncuechange, ondblclick, ondrag, ondragend, ondragenter, ondragexit, ondragleave, ondragover, ondragstart, ondrop, ondurationchange, onemptied, onended, onerror, onfocus, oninput, oninvalid, onkeydown, onkeypress, onkeyup, onload, onloadeddata, onloadedmetadata, onloadstart, onmousedown, onmouseenter, onmouseleave, onmousemove, onmouseout, onmouseover, onmouseup, onmousewheel, onpause, onplay, onplaying, onprogress, onratechange, onreset, onresize, onscroll, onseeked, onseeking, onselect, onshow, onsort, onstalled, onsubmit, onsuspend, ontimeupdate, ontoggle, onvolumechange, onwaiting
作者: wangdoc
アドレス: https://wangdoc.com/
ライセンス: クリエイティブ・コモンズ 3.0