需求與限制
以本部落格為例——我希望使用者點擊每一個在首頁的「帶圖卡片」與「文字卡片」元件可以連結到特定文章,而點擊卡片元件中的「標籤」則會連結到「包含該標籤的文章一覽」頁(在本篇筆記發布前,「帶圖卡片」與「文字卡片」只有標題是連結,點擊其他部位是不會有反應的)。
但根據規格,巢狀連結是不合法的(Nested links are illegal):
Links and anchors defined by the
Aelement must not be nested; anAelement must not contain any otherAelements.
實現方式
然而透過 position: absolute 與一點點的 HTML 結構調整,我們就能實現巢狀連結。以下是一個非常簡略的範例:
<div class="wrapper"> <a class="link_out" href="..." target="_blank"></a> <div>文章日期</div> <p>文章標題</p> <div> <a class="link_in" href="..." target="_blank">文章標籤 1</a> <a class="link_in" href="..." target="_blank">文章標籤 2</a> </div></div>.wrapper { position: relative;}
.link_out { position: absolute; inset: 0;}
.link_in { position: relative;}原理如下:
- 整個元件
.wrapper設定為position: relative來成為.link_out的定位點 .link_out透過position: absolute加上inset: 0來覆蓋整個元件,當游標移動到元件.wrapper上時,使用者點擊的是.link_out- 而
.link_in透過position: relative來建立新的圖層(stacking context),於是使用者也能順利點擊到文章標籤
就是這麼簡單 🪄
See the Pen nested link by CSS position: absolute by Charlie (@Charlie7779) on CodePen.