- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2021-01-13T16:26:58+09:00;2021-01-13T15:21:35+09:00","default:tgoto","tgoto")
#author("2021-02-03T21:53:11+09:00;2021-01-13T15:21:35+09:00","default:tgoto","tgoto")
#ref(https://oncologynote.com/img/8968daaa67.jpg,nolink)
親要素全体をリンクのクリック範囲とするのはタイルデザインなどのウェブサイトでは多用する技術です。しかしタイルデザイン全体のどこをクリックしてもリンクにつながるようにするには一工夫が必要で、ネットを見てもいくつかの方法があるようです。
*方法1 [#w553e32a]
当サイトで始めに使っていたのは下記の方法でした。ネット上でも一番よく見られる方法ではないかと思います。子要素にposition: absolute;を指定し、幅と高さとも100%にすることで親要素全体と同じ範囲を子要素のリンク範囲に設定できます。
**CSS [#ad201790]
.box{
position: relative;
z-index: 1;
}
.overlink{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-indent: -999px;
z-index: 2;
}
**HTML [#pd24e5f1]
<div class="box">
<div>AAA</div>
<div>BBB</div>
<a class="overlink" href="https://www.google.com">
</a>
</div>
しかしこの方法はSEO的には問題があるようです。もともとGoogleなどの検索エンジンは<a>タグの中に入っているテキストまで解読してリンク先との関係を判定しています。リンク先の内容は<a>と</a>に挟まれたタイトルに合致したものになっているだろうということでリンクの品質を判断しているのです。すると、上記の方法の場合は<a></a>の中身が空ですのでリンク元とリンク先が合致していないということになるのです。これはHTML5が目指す[[セマンティックなWEBの理念:https://devlog.atlas.jp/2017/10/30/1662]]にも反していることにもなります。
しかしこの方法はSEO的には問題があるようです。もともとGoogleなどの検索エンジンは<a>タグの中に入っているテキストまで解読してリンク先との関係を判定しています。リンク先の内容は<a>と</a>に挟まれたタイトルに合致したものになっているだろうということでリンクの品質を判断しているのです。
すると、上記の方法の場合は<a></a>の中身が空ですのでリンク元とリンク先が合致していないということになるのです。これはHTML5が目指す[[セマンティックなWEBの理念:https://devlog.atlas.jp/2017/10/30/1662]]にも反していることにもなります。
#ogp(https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11177460206)
ところで、HTML5では<a>タグは<div>を挟むことができるようになりました。というかブロック要素かどうかで<a>タグで挟めるかどうかという区別がなくなったのです。そこで、divをまるごと<a>で囲んでしまうことができるようになります。
<a href="https://www.google.com">
<div>
<div>AAA</div>
<div>BBB</div>
</div>
</a>
しかしこれではAAAとBBBなど子div要素の中身がちょうど親div要素のなかにぴったり収まっていないときは親divの枠の端っこをクリックしてもリンクが作動しなかったりします。
*方法2 [#r6e5407b]
そこで、下記のような書き方をしてみました。
<div class="box">
<a href="https://www.google.com">
<span class="overlink">
</span>
<span class="overlink"></span>
<div>AAA</div>
<div>BBB</div>
</a>
</div>
この<span class="overlink"></span>は、もちろん<div class="overlink"></div>でもかまいません。これを挟んでおくことで<div class="box">と同じサイズの<span class="overlink"></span>のどこをクリックしてもリンクが作動することになるのです。
ちなみに、この方法を採用する場合は.overlinkのz-indexは必要なさそうです。上に重ねていなくてもリンクは作動します。
もっとも、これも難点が全て解決されたわけではないようです。Google pagespeed insightsで確認するとCLSスコアも0と非常に良好なのですが、Google search consoleではなぜかCLSが0.25以上で不良と判定されてしまっており、この原因ははっきり特定したわけではないがどうやらz-indexで要素を重ねすぎていることがマイナス判定されているように思います(現時点で証拠をつかめておらず推定です)。
したがって、よりよい方法を求めてもう少し何か工夫できないか考えてみようかと思います。