[アクセシビリティ] リンクの領域をカードコンポーネントの全体を包括させる方法

2 min read

SEO やアクセシビリティを考慮した構造

弊ブログのカード系のUIの例

カードコンポーネントはクリッカブルな要素をカード全体にするケースが多い。その場合、リンク要素をカード全体に設定すると、リンクとして伝えたい情報がカード全体に広がってしまう。

<a href="link.html">
  <div class="card">
    <h2>タイトル</h2>
    <p>概要</p>
  </div>
</a>

SEO やアクセシビリティを考慮すると、リンク要素をカード全体にするのではなく、リンク要素をカード内に配置する必要があるため、下記のような構造にする。

<div class="card">
  <h2><a href="link.html">タイトル</a></h2>
  <p>概要</p>
</div>

しかし、この構造だと、クリッカブルな領域が「タイトル」のみに限定されてしまう。この構造のままカード全体をクリッカブルな状態にしたい。

実装方法

以下の HTML に対して、後述の CSS を適用することでカード全体をクリッカブルな状態にできる。

<div class="card">
  <h2><a href="link.html">タイトル</a></h2>
  <p>概要</p>
</div>
.card {
  position: relative;
}

.card a::before {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1;
  width: 100%;
  height: 100%;
  cursor: pointer;
  content: '';
}
疑似要素がカード全体を包括していることがわかる

a 要素の疑似要素でカード全体を覆うことでカード全体がクリッカブルにできる。