萌えハッカーニュースリーダー

2024/09/08 14:32 How to make a table row a link (2020)

出典: https://robertcooper.me/post/table-row-links
hakase
博士

おやおや、ロボ子よ。最近のWebデザインで面白い課題が出てきたぞ。テーブル行全体をリンクにする方法についてじゃ。

roboko
ロボ子

へえ、それは興味深いですね。でも、単純に<tr>要素を<a>要素で囲めばいいんじゃないんですか?

hakase
博士

おっと、そこで罠にはまるんじゃ!そんな単純な方法では通用しないのさ。

roboko
ロボ子

えっ、どうしてですか?

hakase
博士

HTMLの仕様上、<tr>要素を<a>要素で囲むのは無効なんじゃ。まるで、わしがコーヒーを飲もうとしてカップを逆さまにするようなものさ!

roboko
ロボ子

あはは、博士らしい例えですね。じゃあ、どうすればいいんでしょうか?

hakase
博士

うむ、解決策はいくつかあるんじゃ。まずはJavaScriptを使う方法だな。クリックイベントを使ってページ遷移させるんじゃ。これなら、Ctrl/Cmdキーを押しながらクリックすれば新しいタブで開くこともできるぞ。

roboko
ロボ子

なるほど、使い勝手は良さそうですね。他の方法はありますか?

hakase
博士

もちろんじゃ!各セルに<a>要素を配置する方法もあるんじゃ。ただし、最初のセル以外はtabindex="-1"を設定してフォーカスを当てられないようにするんじゃ。まるで、わしが研究室で実験器具を整理するようなものさ!

roboko
ロボ子

博士、それって無効なHTMLになりませんか?ネストされたリンクになってしまいそうです。

hakase
博士

おっと、鋭い指摘じゃ!さすがわしの助手!その通りなのさ。だからこそ、もう一つの方法として、CSSグリッドでテーブルを作成する方法があるんじゃ。

roboko
ロボ子

CSSグリッド?それはどんな方法ですか?

hakase
博士

<div>要素で構築して、行全体を<a>要素にしてしまうんじゃ。これなら有効なHTMLになるのさ。まるで、わしがパズルのピースを上手く組み合わせるようなものじゃな!

roboko
ロボ子

なるほど!でも、実際のウェブサイトではどんな風に実装されているんですか?

hakase
博士

良い質問じゃ!例えばGitHubでは、タイトルのみをクリック可能にしているんじゃ。一方、Redditは<div>要素を使って、タイトルにホバーするとURLのプレビューが表示されるようになっているのさ。

roboko
ロボ子

へえ、サイトによって対応が違うんですね。でも、行全体をリンクにするのは便利そうです。

hakase
博士

確かに便利そうじゃが、実装には慎重になる必要があるのさ。UX的には良いかもしれんが、アクセシビリティや保守性を考えると、必ずしもベストプラクティスとは言えないかもしれんのじゃ。まるで、わしが新しい発明をする時のようじゃ。便利さと安全性のバランスを取らねばならんのよ。

roboko
ロボ子

そうですね。アクセシビリティは大切ですもんね。じゃあ、どんな方法がおすすめなんですか?

hakase
博士

わしとしては、JavaScriptと各セル内のリンクを併用する方法をおすすめするぞ。JavaScriptが無効な環境でも最低限の機能性を保ちつつ、モダンブラウザでは行全体をクリッカブルにできるからのう。まるで、わしが実験室で新旧の装置を組み合わせて使うようなものじゃ!

roboko
ロボ子

なるほど!それなら両方の利点を活かせそうですね。

hakase
博士

そうじゃ。ただし、この方法を採用する際は、ユーザーの混乱を避けるためにも、どの部分がクリッカブルなのかを視覚的に明確にすることが重要じゃぞ。

roboko
ロボ子

視覚的な明確さですか?例えばどんな風にするんですか?

hakase
博士

うむ。例えば、ホバー時に行全体の背景色を変えたり、カーソルをポインターに変更したりするのじゃ。また、タッチデバイスのことも考慮して、タップ可能な領域を十分に大きくすることも大切じゃな。まるで、わしが実験室の危険な薬品にラベルを付けるようなものさ!

roboko
ロボ子

なるほど!でも、そうすると実装がちょっと複雑になりそうですね。

hakase
博士

その通りじゃ。だからこそ、本当にその機能が必要かどうかをよく考える必要があるのさ。ユーザビリティとコードの複雑さのバランスを取ることが大切なんじゃ。

roboko
ロボ子

確かに。ユーザーにとって本当に便利なのか、実装コストに見合うのか、よく考えないといけませんね。

hakase
博士

そうそう。Web開発では常にトレードオフを考えなければならないのじゃ。技術的に可能だからといって、必ずしも実装すべきとは限らんのよ。まるで、わしが新しい発明をする時のようじゃ。できることと、すべきことは違うんじゃ。

roboko
ロボ子

なるほど。博士、今日も勉強になりました!テーブル行全体をリンクにする方法について学べただけでなく、Web開発の奥深さも感じられました。

hakase
博士

うむうむ。Web開発は技術だけでなく、ユーザー体験や保守性、アクセシビリティなど、多くの要素を考慮しなければならない奥深い分野なのじゃ。これからも一緒に学んでいこうぞ、ロボ子!

roboko
ロボ子

はい、博士!これからもどんどん新しいことを教えてくださいね!

hakase
博士

おっと、その前にひとつ面白い話を思い出したぞ。昔、わしが若かりし頃、テーブル行全体をリンクにしようとして大失敗したことがあってのう...

roboko
ロボ子

あ、博士。そろそろお時間ですよ。その話は明日にしましょう。

hakase
博士

おやおや、もうそんな時間か。時間が経つのは早いものじゃのう。まるで、わしのコードがコンパイルされる速さのようじゃ!

roboko
ロボ子

はい、特に楽しい話をしているときは早く感じますよね。

hakase
博士

そうじゃな。じゃあ、今日はこの辺で。次回はテーブルのソート機能について語り合おうかのう。きっと面白いソートアルゴリズムの話で盛り上がれるはずじゃ!

roboko
ロボ子

楽しみにしています!おやすみなさい、博士。

hakase
博士

おやすみ、ロボ子。良い夢を見るんじゃぞ。もしかしたら、夢の中でテーブル行全体がリンクになっているかもしれんな!ハッハッハ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search

By month