2012-05-09 9 views
90

私はサイトを構築するためにTwitter Bootstrapを使用してきました。その機能の多くは、JavaScriptを実行しようとしているにしても、<a>のものをラップしています。私はブートストラップのドキュメントで推奨されているhref="#"戦術に問題があったので、私は別の解決策を見つけようとしていました。href属性なしで<a>(アンカータグ)を使用するのに有効ですか?

しかし、その後、私はhref属性を完全に削除しようとしました。私は<a class='bunch of classes' data-whatever='data'>を使用していて、残りはJavascriptで処理しています。そして、それは動作します。

しかし、私はこれをやってはいけないと言っています。右?つまり、技術的には<a>が何かへのリンクになっているはずですが、私は完全にはわかりません。なぜこれは問題ですか。またはそれは?

答えて

156

<a> nchor要素は、単にアンカーでありますまたは一部のコンテンツからもともとHTML仕様では名前付きアンカー(<a name="foo">)とリンクアンカー(<a href="#foo">)が許可されていました。

フラグメント識別子が[id]属性を指定するようになりました(下位互換性のために、依然として[name]属性を指定することはできますが)名前付きアンカーフォーマットはあまり一般的ではありません。 An <a> element without an [href] attribute is still valid

セマンティクスとスタイリングに関する限り、<a>要素は、[href]属性を持たない限りリンク(:link)ではありません。これの副作用は、<a>要素が[href]でない場合、デフォルトではタブ付けの順序になりません。

実際の質問は、<a>要素だけが<button>の適切な表現であるかどうかです。意味的レベルでは、linkbuttonの間に明確な違いがあります。

ボタンは、クリックするとアクションが発生する原因となります。

リンクは、現在のドキュメントのナビゲーションを変更するボタンです。発生したナビゲーションは、フラグメント識別子(#foo)の場合は文書内を移動するか、URLの場合は新しい文書に移動します(/bar)。

リンクは特別な種類のボタンなので、代替機能を実行するためにアクションがオーバーライドされることがよくあります。アンカーをボタンとして使用し続けることは、一貫性の観点からは大丈夫ですが、意味的にはそれほど正確ではありません。

あなたがボタンとして<a>要素(または<span>、または<div>)を使用しての意味とアクセシビリティを懸念している場合は、次の属性を追加する必要があります

<a role="button" tabindex="0" ...>...</a> 

button roleは、ユーザーのことを伝えます特定の要素は、下位の要素が持つ可能性のあるセマンティクスのオーバーライドとしてボタンとして扱われます。 <span><div>要素については

、あなたはスペースのためのJavaScriptのキーリスナーを追加したり、clickイベントをトリガするを入力することもできます。 <a href><button>の要素はデフォルトでこれを行いますが、ボタンのない要素はそうしません。 clickトリガーを別のキーにバインドする方が意味がある場合もあります。たとえば、Webアプリケーションの「ヘルプ」ボタンは、F1にバインドされている可能性があります。

+0

'href ="# "'聞いたことがあります。 'javascript:void(0)'聞いたことがあります。これまで私はこれまで聞いたことがないが、最も理にかなっているようだ。これは標準であり、ほとんどのブラウザで機能します。 – Zacqary

+0

@Zacqary、 '[role =" button "]'は何も具体的なことはしませんが、あなたはまだクリックイベントを聞く必要があります。これは、スクリーンリーダーが元の意味値ではなくボタンとして要素を表すことを知るように、補助ナビゲーション(別名スクリーンリーダー)に使用されることを意味します。 '[tabindex]'を追加すると、その要素がタブ順に追加されます。特別な状況では、実際にはタブをナビゲート可能にする必要はないかもしれませんが、オプションの属性です。既にボタンである要素は、 '[role =" button "]'を必要としません。 – zzzzBov

+0

hrefなしで名前なしのアンカータグを使用するのは有効なHTMLですか?私たちのアプリでは無効にされている(したがってhref属性はありませんが)ユーザーにはまだ表示されている削除リンクがいくつかあります。 –

20

私はあなたがここにあなたの答えを見つけることができると思う:Is an anchor tag without the href attribute safe?

また、あなたはHREFとノーリンク操作する場合は、あなたが好きそれを使用することができます。

<a href="javascript:void(0);">something</a> 
+2

実際には 'javascript:undefined' – rybo111

+2

@ rybo111あなたは正しいですが、私はまだvoid(0)を好みます。基本的に見栄えが良いからです。私は私のクライアントが「未定義」と物事を見るのが好きではない;-) – Alex

+4

text」? – diynevala

4

はい、href属性なしでアンカータグを使用するには、有効なが有効です。

a要素は何を持っている場合href属性を、それは だけで、要素の内容からなる、関連していた場合、その要素は、リンクがそれ以外に置かれている可能性がありますどこのため プレースホルダを表していません。

はい、あなたはclassおよびその他の属性、を使用することができますが、あなたはtargetdownloadrelhreflang、およびtypeを使用することはできません。 href属性が存在しない場合

targetdownloadrelhreflang、およびtype属性が は省略されなければなりません。

万一I?」の部分、最初の引用を参照してください:「それは関連していた場合、リンクがそうでなければ配置されている場合があります」。だから私は "私はJavaScriptを持っていない場合は、私はリンクとしてこのタグを使用するか?"と尋ねるだろう。答えが「はい」の場合は、はい、<a>を使用し、hrefを使用しないでください。いいえ、私はまだそれを使用します、なぜなら生産性はエッジケースのセマンティクスよりも私にとって重要ですが、これは私の個人的な意見です。

また、あなたは異なるbehaviourstyling(例えば無下線、ノーポインタカーソルではなく、:link)のためを気をつけなければなりません。

出典:W3C HTML5 Recommendation

4

ことが有効です。たとえば、それを使用してモーダル(またはdata-toggledata-target属性に対応するもの)を表示することができます。以下のような

何か:

ここ
<a role="button" data-toggle="modal" data-target=".bs-example-modal-sm" aria-hidden="true"><i class="fa fa-phone"></i></a> 

私はaタグではなくbuttonとして優れているフォント素晴らしいアイコンを使用するには、モーダルを表示します。また、role="button"を設定すると、ポインタがアクションタイプに変更されます。 hrefまたはrole="button"が指定されていない場合、カーソルポインタは変更されません。

関連する問題