どちらが正しいですか:<h1> <a>…</a> </ h1> OR <a> <h1>…</ h1> </a>


166

両方ある<h1><a ...> ... </a></h1><a ...><h1> ... </h1></a>有効なHTML、または一方のみが正しいのですか?両方が正しい場合、意味が異なりますか?

回答:


155

どちらのバージョンも正しいです。それらの間の最大の違い<h1><a>..</a></h1>は、タイトルのテキストのみの場合にクリック可能になるということです。

<a>周りに配置<h1>し、css displayプロパティがblock(デフォルトでは)である場合、ブロック全体(の高さ<h1>およびコンテナが<h1>存在するコンテナの幅の100%)をクリックできます。

従来、インライン要素の内部にブロック要素を配置することはできませんでしたが、これはHTML5には当てはまりません。とは<h1><a>..</a></h1>いえ、このアプローチはもっと慣習的だと思います。

ヘッダーにアンカーを配置<a id="my-anchor"><h1>..</h1></a>する場合は、idまたはname属性を次のように使用するよりも良い方法です:<h1 id="my-anchor">..</h1>または<h1 name="my-anchor">..</h1>


ここではそれ以上の基準:stackoverflow.com/questions/6061869/...
thdoan

2
<a> <h1> ...
Acyra

見出しと小見出しの両方が同じコンテンツにリンクして<a>いる場合、ホバー状態を共有するように両方を同じようにラップするほうが視覚的に魅力的です:jsfiddle.net/jjyLemq2
Slam

26

HTML 5以前では、これは

<a><h1>..</h1></a>

検証しません。HTML 5で使用できますが、私はこれを使用します。

<h1><a>..</a></h1>

<a>内に<h1>より多くを追加する必要がない限り


8

<a><h1></h1></a>W3Cは有効ではありません...基本的に、インライン要素内にブロック要素を置くことはできません


26
HTML 5で有効
2011

1
yeap ..しかし、どういうわけか、私は、リンク内のブロック要素を置くこと(HTML5に有効な)タグを閉じないように、(個人的な意見)ちょっとずさんであることを感じる..しかしねえ...多分それはSEOに影響を与える!
pleasedontbelong

7

<h1><a>..</a></h1>また<a><h1>..</h1></a>、スタイルシートがレンダリングに影響しない場合は、常にほぼ同じように動作します。ほぼ、しかし完全ではありません。タブキーを使用して移動するか、リンクにフォーカスすると、ほとんどのブラウザでリンクの周りに「フォーカス長方形」が表示されます。の場合<h1><a>..</a></h1>、この長方形はリンクテキストのみを囲んでいます。の場合<a><h1>..</h1></a>、マークアップによってa要素がレンダリングのブロック要素になり、デフォルトで幅が100%になるため、長方形は使用可能な水平方向のスペースを横切って広がります。

以下は、フォーカス<a href=foo><h1>link</h1></a>がChromeによってどのようにレンダリングされるかを示しています。

ここに画像の説明を入力してください

これは、たとえばリンクの背景色を設定するなどして要素のスタイルを設定すると、効果が同様に異なることを意味します。

歴史的に<a><h1>..</h1></a>は、HTML 2.0では無効であると宣言され、その後のHTML仕様も同様に続きましたが、HTML5はこれを変更し、有効であると宣言しています。正式な定義はブラウザに影響を与えず、バリデータのみに影響を与えました。ただし、一部のユーザーエージェント(通常のブラウザーではないが、特殊なHTMLレンダラー、データエクストラクター、コンバーターなど)<a><h1>..</h1></a>は、仕様で許可されていないため、適切に処理でき ない可能性があります。

見出しや見出しのテキストをリンクにすることには、めったにない理由があります。(それはほとんど非論理的で使い勝手が悪いためです。)しかし、たとえばvs を使用して、見出し(または見出しのテキスト)をリンクの潜在的な宛先にすると、同様の質問がしばしば発生します。同様の考慮事項がこれに適用されます(どちらの作業でも、後者は要素をブロックにするため、違いがある可能性があります。HTML5以前では、前者のみが正式に許可されています)。ただし、それに加えて、どちらの方法も古くなっており、heading要素で属性を直接使用することが推奨されています。<h2><a name=foo>...</a></h2><a name=foo><h2>...</h2></a>aid<h2 id=foo>...</h2>


8
"There is seldom a good reason to make a heading or text in a heading a link"->私はそれについて同意しなければなりません。見出しをリンクにする理由はたくさんあります。例:ブログ投稿のリスト。各タイトルもリンクです。またはSO自体をチェックアウトh3します。フロントページのすべての質問は要素であり、リンクもあります。とにかく、良い説明;)
ジョルジオ2015

@giorgio、例えばあなたが言及するSOリンクは使い勝手が悪い:ページ自体を参照するリンクを作るのは無意味で紛らわしい。
Jukka K.Korpela、2015

1
まあ、私はホームページ上のSOリンクを意味し、ユーザーを別のページ、具体的には質問ページに誘導します。そして、はい、質問ページのヘッダーにあるリンクは(完全ではありませんが)役に立たないのですが、必ずしも使い勝手が悪いわけではありません。主な理由は、SEOです(質問ページ)。
ジョルジオ

1
そのループバックh1 SEOのことは、使い勝手にとっては悪いことです。ページのタイトル(h1)がスクリーンリーダーに他の場所へのリンクをアナウンスするのはなぜですか?それは非常に混乱しています。また、同じ理由で、ページ内のセクションのタイトルであり、別のページのタイトルでもあると思われる場合、小見出しにリンクを付けると混乱を招きます。
アダム

5

H1要素はブロックレベルの要素であり、アンカーはインライン要素です。ブロックレベル要素内にインライン要素を含めることはできますが、その逆はできません。ボックスモデルとHTML仕様を考えると、これは理にかなっています。

結論として、最良の方法は次のとおりです。

<h1><a href="#">Link</a></h1>

2
「これは理にかなっています」、理由を説明せずに秘密裏に言いますが、インライン要素内のブロックレベル要素の動作が指定されています。インライン要素内にブロックレベルの要素があることは決して間違ったことではありません。さらに、HTML 5仕様とHTML Living Standardは、アンカー内に見出しがあるため、まったく問題ありません。この答えは間違っています。
Mark Amery、2015年

1

ハイパーリンク<a href="…">/ を使用a:linkしますか、それとも見出しにアンカーを追加しますか?アンカーを追加したい場合は、単にidを割り当てることができます<h1 id="heading">。次に、それをとしてリンクできますpage.htm#heading

見出しをクリック可能(リンク)にしたい場合は、最初に<h1><a></a></h1>/ h1 > a– blocklevel要素を使用し、内部にインライン要素を使用します


1

また、スタイルの階層にも違いがあります。として持っている場合<h1><a href="#">Heading here</a></h1>、アンカーのスタイルはh1要素のスタイルを無効にします。例:

a {color:red;font-size:30px;line-height:30px;}

オーバールール

h1 {color:blue;font-size:40px;line-height:40px;}

-1(これはより正確な質問)にまったく対応していないためです。
Mark Amery
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.