カスタムデータ属性data-*
data-*属性を使って、カスタムデータを要素に直接保存します。
「カスタムデータ属性data-*」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。
data-*属性とは
カスタムデータ属性を使うと、HTML要素に追加情報を直接保存できます:
<button data-user-id="42" data-action="delete">Delete User</button>
<li data-category="frontend" data-level="beginner">HTML</li>
<!-- Format: data-[name]="value" -->
<!-- Any alphanumeric name after data- is valid -->
<!-- Values are always strings -->data-*がある理由
data-*が登場する前は、開発者は追加データを次のような場所に保存していました:
- 非表示の入力欄(扱いにくい)
- CSSクラス名(壊れやすい)
relやtitleのような標準外の属性(無効なHTML)
HTML5では、意味や表示に影響を与えずにカスタムデータを埋め込む公式の方法としてdata-*が標準化されました。
命名規則
data-*属性の命名規則:
data-で始める必要があります- 名前には小文字、数字、ハイフン、アンダースコア、ピリオドを使用できます
- 名前に大文字は使用できません(HTML仕様によって小文字に変換されます)
- 名前を
xmlで始めることはできません
<div data-user-id="1">OK</div>
<div data-product-category="tools">OK</div>
<!-- <div data-XML-thing="1">BAD: starts with xml -->
<!-- <div data-MyProp="1">BAD: uppercase in name -->JavaScriptでdata-*を読み取る
datasetプロパティを使ってカスタムデータにアクセスします:
<button id="btn"
data-user-id="42"
data-action="delete"
data-confirm-message="Are you sure?"
>
Delete
</button>
<script>
const btn = document.getElementById('btn');
console.log(btn.dataset.userId); // '42'
console.log(btn.dataset.action); // 'delete'
console.log(btn.dataset.confirmMessage); // 'Are you sure?'
// Note: data-user-id → dataset.userId (camelCase conversion)
</script>datasetでdata-*を書き込む
datasetを使ってデータ属性を設定・削除します:
const card = document.querySelector('.card');
// Set:
card.dataset.status = 'active';
// Now: <div class="card" data-status="active">
// Delete:
delete card.dataset.status;
// Now: data-status is removed
// Alternatively with setAttribute:
card.setAttribute('data-status', 'inactive');
card.removeAttribute('data-status');ハイフンからcamelCaseへの変換
dataset APIは、ハイフンで区切られた名前をcamelCaseに変換します:
<!-- HTML attribute JavaScript dataset property -->
data-user-id → dataset.userId
data-product-category → dataset.productCategory
data-max-retries → dataset.maxRetries
data-is-active → dataset.isActiveCSS属性セレクター
CSSセレクターでデータ属性を使用します:
[data-status="active"] {
color: green;
}
[data-status="inactive"] {
color: gray;
text-decoration: line-through;
}
/* Present but any value: */
[data-featured] {
border: 2px solid gold;
}ツールチップパターン
データ属性を使ってCSSだけでツールチップを作成します:
<span data-tooltip="This is a tooltip">Hover me</span>
/* CSS: */
/*
[data-tooltip] {
position: relative;
}
[data-tooltip]::after {
content: attr(data-tooltip); /* attr() reads the attribute value */
position: absolute;
background: #333;
color: white;
padding: 0.25rem 0.5rem;
border-radius: 4px;
white-space: nowrap;
opacity: 0;
pointer-events: none;
transition: opacity 0.2s;
}
[data-tooltip]:hover::after { opacity: 1; }
*/状態追跡パターン
データ属性を使ってコンポーネントの状態を追跡します:
<button data-state="off" id="toggle">Toggle</button>
<script>
document.getElementById('toggle').addEventListener('click', function() {
const state = this.dataset.state;
this.dataset.state = state === 'off' ? 'on' : 'off';
this.textContent = this.dataset.state === 'on' ? 'Active' : 'Toggle';
});
</script>
/* CSS: */
/* [data-state="on"] { background: green; color: white; } */data-*とJavaScript変数の違い
data-*とJavaScriptへのデータ保存を使い分ける場面:
- DOM要素に直接対応し、CSSから読み取る可能性がある値にはdata-*を使用します
- 特定の要素に結び付かない複雑なデータ構造には、JavaScriptの変数やオブジェクトを使用します
- 大きなデータや機密データをdata-*に保存しないでください。DevToolsから見えてしまいます
data-*は表示用ではない
避けるべきよくある間違い:
<!-- BAD: storing presentation data in data-* -->
<div data-color="red" data-font-size="18">Text</div>
<!-- Use CSS classes instead: -->
<div class="text-danger text-lg">Text</div>
<!-- BAD: storing sensitive data -->
<div data-api-key="sk-123...">Content</div>
<!-- NEVER store secrets in HTML attributes -->確認問題
dataset APIでは、data-product-id属性にどのようにアクセスしますか?
まとめ:data-*属性
カスタムデータ属性の要点:
data-name="value"— 要素にカスタムメタデータを保存しますelement.dataset.camelCaseを使ってアクセスします- dataset APIではハイフンがcamelCaseに変換されます
[data-name="value"]セレクターを使ってCSSで利用できます- 機密データ(キーやパスワード)をデータ属性に保存しないでください
AI チューターと学ぶ HTML — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 40
- レッスン
- 159
よくある質問
「カスタムデータ属性data-*」レッスンは無料ですか?
はい。「カスタムデータ属性data-*」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。
「カスタムデータ属性data-*」で何を学びますか?
data-*属性を使って、カスタムデータを要素に直接保存します。 ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
HTML Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「カスタムデータ属性data-*」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このHTML Academyレッスンでコードを書いて実行できますか?
はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- id、class、style、title
- hidden属性
- tabindexとaccesskey
- カスタムデータ属性data-*