長年にわたり、アプリケーションがより「SPA」に移行するにつれて、視覚的に通常のハイパーリンク(figma.comのログインリンクなど)であるWebサイトリンクにJavaScriptクリックハンドラーを使用する多くのサイトに気づきました。
ここのナビゲーションのすべてのリンクは<a href="">
ですが、ポップアップを開くLog in
およびSign Up
オプションは除きます。
個人的には、両方がログインしようとしているのにBlog
リンクも読んでいる場合、一方または両方を右クリックし、ブラウザの機能を使用して[新しいタブで開く]を実行すると、2つのタブが開いたままになります。
リンクに<a>
要素を配置しないことで(ボタンをもっと許容することができます)、ブラウザーの機能を使用できなくなります。
これは以前に議論されたことがありますか?それはアンチパターンですか?右クリックしない場合に、通常の<a>
動作とJavaScriptポップアップ動作を提供する技術的な方法はありますか?
ユーザーを明確に別の画面に移動させる要素の場合、リンクのナビゲーション機能が間違いなく推奨されます。
他の一部の要素では、クリックと[新しいタブで開く]ジェスチャは異なる動作をします。このWebサイトの右上隅にある[キューの確認]アイコンをクリックすると、ポップアップメニューが開きますが、新しいタブで開くと、キューの非常に大きな別の画面が表示されます。
質問の[ログイン]ボタンは、この動作がかなり明確で望ましいため、このカテゴリに分類されると思います。しかし、追加の実装コスト(2つの個別のビューを作成するか、モーダルの状態を維持する)をもたらすため、チームはその努力を費やさないことを選択しました。
しかし、他の要素はナビゲートする意味がありません。この回答を入力していると、上のフォーマットボタンが表示されます。それらを新しいタブで開くことができるとどうなりますか?おそらく、最良の実装は私のメッセージを太字で表示してページのコピーを開くことですが、それでも不十分です。未完成の回答のコピーが2つあるためです。
ただし、href
属性が無効な_<a>
_を使用する言い訳はありません。 [新しいタブで開く]機能をサポートしないことが決定された場合、使用する要素は_<button>
_でなければならず、ブラウザーが[新しいタブで開く]機能を表示しないようにする必要があります。
_<a href="#">
_または<a href="javascript:void(0)">
などは、機能しないことを通知し、ユーザーに何が起こったのか迷わせているため、厳密にエンジニアリングの誤りです。
ここでの問題は行動の定義だと思います。 「ログイン」してみましょう。なんでしょう?ユーザーが同じページにログインできるようにしますか?または、ログインと基本的なやり取り(パスワードを忘れた場合など)のために、それらを新しいページに送信しますか?.
定義できる場合は、<a>
要素または<button>
のどちらを配置するかを決定できます。どうして?セマンティックHTMLに正しい要素を使用しないと、UX(特にa11y)が改善(または悪化)する可能性があるためです。
ユーザーが同じページにログインできるようにする場合、アクションを実行するために、ボタンを配置してモーダル/ポップアップを開くことができます。
ユーザーを別のページに送りたい場合、リンクを配置してそこに変化を加えることができます。
別の方法は、スクリーンリーダーなどのa11yで、ariaラベルやアンチパターンを使用しても同様のリスクをもたらす可能性があります。したがって、ここでのベストプラクティスは、明確に定義されたフラックスで正しい要素を使用することです。