Anagura Hubサイト(itako999.com/anagura/)で、メインコンテンツのグリッドカードがクリックできないという問題が発生した。各カードには見出し内に<a>タグがあるが、カード全体をクリック可能にしたかった。
最初、CSS-onlyソリューション(::before疑似要素で透明なオーバーレイを作成)を試みたが、これが既存のyurt-style.cssのグリッドレイアウトを破壊してしまった。CSSの特異性(specificity)とカスケードの問題で、意図しないスタイルが適用されていた。
最終的に、JavaScriptによる解決策を採用した。anagura-nav.jsにクリックリスナーを追加し、.hub-card要素をクリックしたら、その内部の<h2> <a>のリンク先にナビゲートする。
document.querySelectorAll('.hub-card').forEach(card => {
card.addEventListener('click', function(e) {
const link = this.querySelector('h2 a');
if (link && !e.target.closest('a')) {
window.location.href = link.href;
}
});
card.style.cursor = 'pointer';
});
この実装には重要なチェックが含まれている。!e.target.closest('a')により、ユーザーが直接<a>タグをクリックした場合は、イベントが重複して発火しないようにしている。
もう一つの問題は、動的に生成されるナビゲーションバーのリンクが正しく機能していなかったことだ。これはブラウザキャッシュが原因だった。JavaScriptファイルを更新してもブラウザが古いバージョンをキャッシュしていたため、変更が反映されなかった。HTMLの<script>タグにバージョンパラメータ(?v=2)を追加することで、キャッシュバスティングを実現した。
現在、Anagura Hubのすべてのリンクは正しく機能している。動的ナビゲーションバーもグリッドカードも、ルート相対パス(/linguistics/など)を使用し、どのページからアクセスしても正しいURLに遷移する。