空のhrefは有効ですか?


179

私たちのWeb開発者の1人は、ドロップダウンリストのスタイルを設定するためのプレースホルダーとして次のhtmlを使用しています。

<a href="" class="arrow"></a>

これはアンカータグと見なされますか?

href値がないため、リンクチェッカーレポートの一部で壊れていると表示されます。


10
IEでは動作しません!まあそれはIEで動作しますが、仕様とはまったく異なる動作をします。したがって、仕様に従って有効ですが、実際にはありません:((((
ZhongYu

言っbayou.ioを拡張し、IEは、ドキュメント上のディレクトリにリンク:stackoverflow.com/questions/7966791/...
ネイト

1
はい、IEの古いバージョン(7/8など)で空のhrefを使用すると、ディレクトリリストなどの悪影響が生じる可能性があります。あなたがそれをググったら主題について多くの文書があります
Ringo

例:gtmetrix.com/avoid-empty-src-or-href.html。古いブラウザだけを気にしないでください。現在のIE、Edge、およびWebkitブラウザにも影響します。
Ringo

回答:


60

この質問はすでに回答されていますが(tl; dr:はい、空のhref値は有効です)、既存の回答のいずれも関連する仕様を参照していません。

空の文字列をURIにすることはできません。ただし、href属性はURIを値として取るだけでなく、URI参照も受け取ります。空の文字列はURI参照の場合があります。

HTML 4.01

HTML 4.01 RFC 2396を使用しており、セクション4.2で述べています。同じドキュメントの参照(太字の強調):

URIを含まないURI参照は、現在のドキュメントへの参照です。つまり、ドキュメント内の空のURI参照はそのドキュメントの先頭への参照として解釈され、フラグメント識別子のみを含む参照はそのドキュメントの識別されたフラグメントへの参照です。

RFC 2396は、によって廃止されたRFC 3986(現在はIETFのURI標準、)基本的に同じことを言います

HTML5

HTML5 スペースで囲まれている可能性のある有効なURL有効なURLW3CのURL仕様を使用していますが、廃止されました。代わりにWHATWGのURL標準を使用する必要があります(最後のセクションを参照)。

HTML 5.1

HTML 5.1 スペースで囲まれた有効なURL有効なURLWHATWGのURL標準(次のセクションを参照)を使用します。

WHATWG HTML

WHATWGのHTMLの用途潜在的にスペースで囲まれた有効なURL)の定義有効なURL文字列からWHATWGのURL標準それはそれができると言う、相対URL-とフラグメントの文字列以上でなければならない、相対URL文字列、これは、path-relative-scheme-less-URL stringにすることができます。これは、スキーム文字列の後にが続かないpath-relative-URL文字列であり:、その定義は次のとおりです(太字強調):

パス相対URL文字列は、0以上のURLパスセグメント文字列で、U + 002F(/)で区切られている必要があり、U + 002F(/)で始まってはなりません。


184

有効です。

ただし、標準的な方法は、href="#"またはを使用することhref="javascript:;"です。


23
RFC 2396に記載されているとおり:URIを含まないURI参照は、現在のドキュメントへの参照です。言い換えると、ドキュメント内の空のURI参照は、そのドキュメントの開始への参照として解釈されます
Oct 10

32
をクリックするとhref="#"、フォーカスがIEのページの一番上に移動するので、私href="javascript:;"はより良い
Deckard

32
href = "#"はアンチパターンです。ブラウザの履歴に追加のエントリを追加し、場合によってはブラウザを一番上までスクロールさせます。使用しない場合は、href属性を省略できます。デフォルトでは ""になるため、回避できない場合はページをリロードします。
tosh 2013

16
@tosh、いいえ、href属性を省略した場合、<a>要素はリンクとしてスタイル設定されておらず、フォーカス可能ではなく、<a href = ""としてリンクを作成しません。 >または<a href>です。それがうまくいくなら、それを示すJSFiddleを共有できますか?
GuiPrá2014

6
@tosh、面白いこと知ってる?どうやらHTML5以降、属性を省略してもそのように機能するはずです。w3.org/ TR / html5 / text-level-semantics.htmlthe-a-elementを参照してください(以下の回答を提出していただいたhalfdanに感謝します)。ベンダーによってまだ実装されており、それはまだ単なる候補の推奨であるため、最終的な標準に維持されるのか、それともベンダーがその前に準拠するのかを判断するのは困難です。
GuiPrá2014

115

他の人が言ったように、それは有効です。

ただし、各アプローチにはいくつかの欠点があります。

href="#" ブラウザの履歴に追加のエントリを追加します(たとえば、戻るボタンを押すと面倒です)。

href="" ページをリロードします

href="javascript:;" 問題がないようです(乱雑で無意味に見えること以外)-誰かが何か知っていますか?


22
もう1つの興味深いものは、href = "//:0"です。これは、サーバーへの要求を行わず、履歴も残しません。
ディアケデリック2012

2
//:0を使用すると、一部の画像がChromeで読み込めなくなります。Chromeはそれをキャンセルコマンドを受け取ったと解釈しているようです。
David Grenier

5
href: "javascript :;" AndroidとiOSの両方のWebビューでコンテンツを機能させるために必要なものでした
dumazy

2
文書上のディレクトリへのIEのリンク:stackoverflow.com/questions/7966791/...
ネイト

1
私はこれをテストしていませんが、href = "javascript :;"を疑っています。インラインJavaScriptを許可しないコンテンツセキュリティポリシーに違反します。このポリシーをオンにするつもりなら、代わりの方法の1つを使用します。
マークグッド

60

特にonclickハンドラーを使用する場合、hrefを含めないことは完全に有効なHTMLである可能性がありますが、考慮すべき点がいくつかあります。tabindex値を設定しないと、キーボードにフォーカスできなくなります。さらに、IEは、tabindexが設定されているかどうかに関係なく、href属性のないアンカー要素はフォーカス不可と報告するため、Internet Explorerを使用してスクリーンリーダーソフトウェアにアクセスできなくなります。

したがって、以下は完全に有効である可能性があります。

<a class="arrow">Link content</a>

null効果のhref属性を明示的に追加する方がはるかに優れています

<a href="javascript:void(0);" class="arrow">Link content</a>

すべてのユーザーを完全にサポートするには、CSSでクラスを使用して画像をレンダリングする場合、何が起こっているかをテキストで説明するために、title属性などのテキストコンテンツも含める必要があります。

<a href="javascript:void(0);" class="arrow" title="Go to linked content">Link content</a>

1
省略hrefするとアクセシビリティインターフェースが混乱することを説明していただきありがとうございます。
Daniel Sokolowski、2016

1
アクセシビリティの観点から、href相対パスまたは絶対パス以外の値に設定すると、スクリーンリーダーの問題が発生することも追加します。この問題の回避策として、ハッシュ/ポンド記号を使用しないでください。スクリーンリーダーは(現在VoiceOverが行う)リンクをフラグメント識別子(現在のページのどこかにリンク)であると通知し、標準の観点からも有効です。参照w3.org/2001/tag/2011/01/HashInURI-20110115#NakedHash
ミシェル・エベール

27

現在のHTML5ドラフトでは、href属性を完全に省略することもできます。

a要素がhref属性を持たない場合、要素は、関連性があった場合にリンクが配置された可能性のある場所のプレースホルダーを表します。

あなたの質問に答えるには:はい、それは有効です。


6
はい、しかし- 一部のブラウザでは<a>、noの要素hrefは慎重にスタイル設定されます。たとえば、「:hover」スタイルはChrome(およびその他の奇妙なもの)では機能しません
Alex

<a>ないタグは、リンク(従来はアンカー)ではなく、何か他のものをhref表します。また、オプションの属性と空にできる属性には違いがあります。
コビ

19

実際、空のままにすることができます(W3バリデーターは文句を言いません)。

アイデアをさらに一歩進めて、= ""を省略します。これの利点は、リンクが現在のページへのアンカーとして扱われないことです。

<a href>sth</a>

ただし:<a href></a>明示的な値がない属性href。この属性はIE7によって削除される場合があります。
c24w 2013年

1
私もこの解決策が好きです。IE7の動作以外の欠点を知っていますか?
rinat.io 2014年

これは不正な構文です。仕様によると、「[空の属性]構文はブール属性に対してのみ許可されています。」
Robert Siemer

9

W3のバリデーターは空のhref属性について文句を言わないかもしれませんが、現在のHTML5草案では次のように指定しています。

および要素のhref属性には、スペースで囲まれている可能性がある有効なURLの値が必要です。aarea

有効なURLはに準拠したURLであるURL標準。現在、URL標準は頭を混乱させるのに少し混乱していますが、URLが空の文字列である可能性があることをどこにも述べていません。

...つまり、空の文字列は有効なURLではありません

ただし、HTML5ワーキングドラフトは次のように述べています。

注:および要素href属性は必須ではありませんaarea。これらの要素にhref属性がない場合、ハイパーリンクは作成されません。

これは、href属性を完全に省略できることを意味します。

<a class="arrow"></a>

あなたの意図は、これらのことであればhref-less a要素はまだキーボードinterractionを要求すべきである、あなたは割り当てるので、通常のルートを下る必要があるでしょうroleし、tabindexあなたの通常のクリック/ KeyDownイベントハンドラと一緒に:

<a class="arrow" role="button" tab-index="0"></a>

確かに。残念ながら、おっしゃったように、を省略hrefするとハイパーリンクではonclickなくなり、キーボードユーザーが機能にアクセスできなくなります。
aij

7

注意の言葉:

私の経験でhrefは、キーボードナビゲーションはそれを無視し、hrefが存在するときのようにフォーカスを与えないため、属性を省略するとアクセシビリティに問題が発生します。手動で要素をtabindexに含めることで、これを回避できます。


3

それは有効ですが、UpTheCreekが言ったように「各アプローチにはいくつかの欠点があります」

タグを介してajaxを呼び出す場合、href = ""をそのままにしておくと、ページがリロードされたままになり、ajaxコードが呼び出されることはありません...

この考えを共有したほうがいい


2

<a href="#" class="arrow">代わりにやってみてください。(シャープな#文字に注意してください)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.