"http://example.com/#foo
"メソッドでウェブページのある部分を参照したいときは、
<h1><a name="foo"/>Foo Title</h1>
または
<h1 id="foo">Foo Title</h1>
どちらも機能しますが、同等ですか、それとも意味的な違いがありますか?
HTML 5仕様によれば、 5.9.8フラグメント識別子へのナビゲート :
HTML文書(およびtext/html MIMEタイプ)の場合は、文書の指定部分が何であるかを判別するために、次の処理モデルに従う必要があります。
- URLを解析し、fragidをURLの<fragment>コンポーネントにします。
- Fragidが空の文字列の場合、ドキュメントの示されている部分はドキュメントの先頭です。
- DOM内にfragidとまったく同じIDを持つ要素がある場合、ツリー順でそのような最初の要素が文書の指示された部分になります。ここでアルゴリズムを停止してください。
- 値がfragidと正確に等しいname属性を持つa要素がDOMにある場合、ツリー順で最初のそのような要素が文書の指定部分です。ここでアルゴリズムを停止してください。
- それ以外の場合、文書の指示部分はありません。
それで、それはid="foo"
を探し、そして次に続くことになりますname="foo"
編集:@ hsivonenが指摘したように、HTML5ではa
要素はname属性を持ちません。ただし、上記の規則は他の名前付き要素にも適用されます。
XMLの空の要素の構文は<h1><a name="foo"/>Foo Title</h1>
ではサポートされていないため、text/html
として機能するHTMLの種類にtext/html
を使用しないでください。しかし、<h1><a name="foo">Foo Title</a></h1>
はHTML4では問題ありません。現在ドラフトされているHTML5では無効です。
<h1 id="foo">Foo Title</h1>
はHTML4でもHTML5でも問題ありません。これはNetscape 4では機能しませんが、おそらくNetscape 4では機能しない他の機能を12個使用することになります。
Page.html#fooやFoo Titleのように、ページ内のその領域にリンクするのであれば、使用するべきリンクではありません。
<h1 id="foo">Foo Title</h1>
代わりに<a>
参照をその周りに置くと、あなたのヘッドラインはあなたのサイト内の<a>
特有のCSSの影響を受けます。それは単なる追加のマークアップであり、あなたはそれを必要とするべきではありません。見出しの上にidを配置することを強くお勧めします。それが整形式であるだけでなく、それによってJavascriptまたはCSSでそのオブジェクトに対処できるようになります。
ウィキペディアはこのような機能を多用しています:
<a href="#History">[...]</a>
<span class="mw-headline" id="History">History</span>
そしてウィキペディアは皆のために働いているので、私はこのフォームに安全にこだわると感じるでしょう。
また、忘れないでください。これは、スパンだけでなくdivやテーブルセルでも使用できます。そうすれば、要素の:target擬似クラスにアクセスできます。太字のテキストのように、幅が変わらないように気を付けてください。
名前付きアンカー - 私の投票は避けることです:
<h1 id="foo">Foo Title</h1>
使用すべきものです。リンクが必要な場合以外はアンカーを使用しないでください。
JavaScriptユーザーの方へ: すべてのIDはwindow の下のグローバル変数になります。
<h1 id="foo">Foo Title</h1>
JSグローバルを作成したところです。
window.foo
window.foo
の値は、h1
のHTMLElement
になります。
id
属性で使用されるすべての値が安全であることを保証できない限り、name
に固執することをお勧めします。
<h1 name="foo">Foo Title</h1>
IDメソッドは古いブラウザでは動作しません。アンカー名メソッドは新しいHTMLバージョンでは非推奨になるでしょう...私はidを使います。
意味的な違いはありません。規格の傾向はid
ではなくname
の使用に向かっています。しかし、場合によってはname
を好むという違いがあるかもしれません。 HTML 4.01仕様は 以下のヒントを提供します :
id
またはname
を使用しますか?アンカー名にid
とname
のどちらを使用するかを決定する際には、以下の点を考慮してください。
私は、フォーマットが同じでシリアル番号だけが異なる、縦に積み重ねられたdivコンテナからなるWebページを持っています。各divの先頭にアンカーという名前を隠したいので、最も経済的な解決策は、開始divタグ内のidとしてアンカーを含めることです。
<div id="[serial number]" class="topic_wrapper">
マークアップに関する単なる観察以前のバージョンのHTMLのマークアップフォームは、アンカーポイントを提供していました。 id5属性を使用するHTML 5のマークアップフォームは、ほぼ同等ですが、識別するための要素を必要とします。そのほとんどすべてにコンテンツが含まれていると予想されます。
たとえば、空のスパンまたはdivを使用することができますが、この使用法では外観が悪くなり、悪臭がします。
1つの考えはこの目的のためにwbr要素を使うことです。 wbrは空のコンテンツモデルを持ち、単に改行が可能であると宣言します。これはまだマークアップタグのわずかに無礼な使用法ですが、無償のドキュメント部門や空のテキストスパンよりもはるかに少ないです。
2番目のサンプルは、問題の要素に一意のIDを割り当てます。この要素は、DHTMLを使用して操作したりアクセスしたりできます。
一方、最初のものは、しおりに似た、文書内の名前付きの場所を設定します。 「アンカー」に付けられて、それは完全に理にかなっています。
Html 5では、id=""
属性は要素の一意の識別子を定義します。これはフラグメントリンクのアンカーでもあります。以前のHTML標準では、name=""
要素の<a>
属性はフラグメントリンクのアンカーを定義していました。私はこんなものをお勧めします:<a name="foo" id="foo"></a><h1>Foo Title</h1>
id=""
属性のサポートは多少むらがあるので(すべての主要ブラウザの最新リリースではサポートされていますが、数年以内のリリースでは中断しないことをお勧めします)。 ]に正当な理由がない場合は何か)。それは互換性があります、そしてそれはlink'dされた要素の中にあるものは何でもスタイルしません、終わり</a>はまだ要素の外側にありますが、それは現在のすべての規格でまだ有効です。
name=""
要素のid=""
および<a>
属性が同じであることを確認してください。
古いブラウザにはname属性を使用し、新しいブラウザにはid属性を使用します。両方のオプションが使用され、フォールバックメソッドがデフォルトで実装されます。