WordPress整体院
主にwordpressのカスタマイズやトラブル対策
  1. ホーム
  2. > HTML/CSS
  3. > テーブルでセル全体をリンクする方法(上下中央揃えやセルの高さの変化にも対応版)
HTML/CSS
4 2019.07.09. 2025.04.07.

テーブルでセル全体をリンクする方法(上下中央揃えやセルの高さの変化にも対応版)

テーブルのセル内にテキストリンクを設置したときに、リンクテキストだけでなくセル全体がクリックできるようにしたいことってありますよね。

セル全体をクリック範囲にする方法は検索すると山ほど出てくるのですが、僕の検索の仕方が悪いのか

  • セルの高さに合わせて調整が必要
  • 上下中央揃えのことを考えていない

というように汎用性がイマイチな方法ばかりでした。「もうちょっと何とかならんのか?」と考えたのでその方法をご紹介します。

スポンサーリンク

やりたいこと

リンクを設置したtdにclass="cell-class"を指定するだけで高さが変わっても上下中央+セル全体がリンクになります。

テキストだけがリンク! セル全体がリンクだぞ!
改行を入れて2行分
の高さになったセル
上下中央+セル全体がリンク
改行を入れて
3行文になっても
自動的に対応
上下中央+セル全体がリンク

HTMLとCSSのソース

<table>
<tbody>
	<tr>
		<td>
			<a href="https://alive-website.com/notebook">テキストだけがリンク!</a>
		</td>
		<td class="cell-link">
			<a href="https://alive-website.com/notebook">セル全体がリンクだぞ!</a>
		</td>
	</tr>
	<tr>
		<td>
			改行を入れて2行分
			の高さになったセル
		</td>
		<td class="cell-link">
		<a href="https://alive-website.com/notebook">上下中央+セル全体がリンク</a>
		</td>
	</tr>
	<tr>
		<td>
			改行を入れて
			3行文になっても
			自動的に対応
		</td>
		<td class="cell-link">
			<a href="https://alive-website.com/notebook">上下中央+セル全体がリンク</a>
		</td>
	</tr>
</tbody>
</table>
.cell-link {
	padding: 0;
	height: 0;
}
.cell-link a{
	height: 100%;
	width: 100%;
	padding: 2px 5px;
	display: flex;
	align-items: center;
	justify-content:center;
}

CSSの解説

まず、.cell-link の方から説明していきます。これはthやtdといったセル要素に適用されます。

多くのテーマやテンプレートではthやtdタグには余白が設定されているケースが多いのでそれを0にします。そうしないとクリック範囲がセル内一杯に広がりません。最初からpaddingがないテーマでは不要です。

2行目のheight:0;がこの記事の超重要ポイントです。

セル範囲を広げるにはaタグにdisplay:blockやdisplay:flexを指定しますが、なぜかtdやthタグの高さを数値指定しないとaタグの高さがセル内一杯に広がりません。さらに100%とかはダメでpxを使った具体的な数値で指定する必要があります。

thやtdタグに高さを指定しない場合、aタグのline-heightやpaddingを調整して高さをセルに合わせれば対応できまが、それを毎回やるのは面倒くさいですよね。

一方で、セルの高さを毎回数値設定するのも面倒くさいです。

幸いなことに、

  • セルの高さにどんな数であれ数値さえ指定しておけばa要素はセル内一杯に広がる
  • セルの高さは内容によって強制的に広がる

という仕様のようなので、セルの高さに任意の数値を設定しておけばOKとなります。

できるだけ汎用性を高くすることを考えると、セル内にどんなに小さなものが来ても対応できるように0としました。

次にaタグのスタイルです。

ネットで調べるとdisplay:blockとしている記事が非常に多いのですがこれだと上下中央揃えが効きません。paddingやline-heightで調整できないこともないですが汎用性がなく面倒くさいです。

この解決方法は簡単でaタグをflexboxにするだけです。そうすると中のテキストは子要素になるのでalign-items:centerが効きます。

さらに、これだけだと高さがテキストの高さになってしまうので、上下一杯に広がるようにheight:100%を指定します。

あとは余白を適当に設定すれば完成。

これで、どんなサイズにも対応できるセル一杯のリンクエリアになります。

簡単にできてユーザービリティも高いので是非使ってみてください。

スポンサーリンク
デジ部長 デジ部長 HTML/CSS

コメント

  1. ひろ
    2025年04月06日 18:24

    htmlは初心者クラスで申し訳ないですが、
    今回セル全体をリンクする方法をそっくり活用させていただきました。
    解説通りセル全体をリンクでき大変嬉しいんですが、aタグで括った文字がどうやっても左寄せになり中央寄せできません。
    仕方なく、•cell-link a{}に記載のpaddingを微調整して擬似中央寄せしました。
    何か良い方法はないものでしょうか。
    お時間があればご助言頂きたく。

    宜しくお願いします。

    返信
    • デジ部長
      2025年04月07日 11:12

      >ひろさん
      そういえば左右中央寄せは考えてなかったですね。
      aタグに下記を追加すれば対応できます。

      width:100%;
      justify-content:center;

      ご参考まで。

      返信
  2. ひろ
    2025年04月08日 16:51

    返信が遅れましてすみません。
    頂いた内容でhtmlを作ってみたところ期待どうりの表示が出来、やった!となり直ぐにお返事するところだったのですが、
    実はGASの中でhtmlメールを作ってこの中にこの機能付きのテーブルを埋め込んでみるという試みだったんですが、
    そうした場合、何故か期待したalign-itemsとjustify-contentが機能せずaタグで囲った文字がセルの左上寄せで表示されてしまい途方に暮れたところでした。
    その後、幾つか記事を漁っていたところ、aの子セレクタとして
    .xxxx a p{margin:auto;}が必要?との記事をどこかで見かけ、疑心暗鬼でトライしたところ明確な理由は分かりませんが、ご教授頂いたalign-itemsとjustify-contentが機能して上下左右中心寄せが出来るようになりました。

    改めて御礼申し上げます!

    ただ、この理由ってお分かりになりますでしょうか?
    私には何おことやらというレベルなのです。
    もし推測レベルで結構なのですが、原因らしいものがありましたら、コメント頂きたく、よろしくおねがいします。

    返信
    • デジ部長
      2025年04月10日 16:53

      >ひろさん
      とりあえず解決したようでよかったです。

      htmlメールはCSSへの対応具合が見る環境によってまちまちなので何とも言えないですね・・・。

      状況からするとデフォルトでaの子要素(p限定?)にmarginの数値(0)が割り当てられていたのかもしれないですね。
      あくまで推測ですがご参考まで。

      返信

コメントをどうぞ

返信をキャンセルする。

メールアドレスが公開されることはありません。

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

≪前の投稿
PHPでHEXをHSLに変換する
次の投稿≫
URLにパラメータとアンカーを併記したい場合の記述法

プロフィール

HN:デジ部長
整体院とパーソナルトレーニングをやっていますが、WordPressをいじっていたらそちらの方が楽しくなり、知り合いのサイト作成やテーマ作りなどをボチボチとやっています。
このブログはそのときの覚え書きなどが主な目的でやってます。

カテゴリー

  • HTML/CSS
  • javascript
  • Mac
  • PHP
  • PPC広告
  • SEO
  • WordPress
  • カスタマイズ
  • サイト管理関係
  • テーマ開発
  • パソコン全般
  • プラグイン
  • 思った事

トップ
Copyright© 2019-2025 WordPress整体院 all right reserved