aタグが勝手に閉じられてしまう
WordPressでループをしようとしたところ、なぜか<a>
タグが勝手に閉じられてしまい、予期しないhtml構造に…。
原因はaタグの中にdivタグを入れたこと
HTML5の仕様では、<a>
タグの中にブロックレベル要素(例:<div>
)を入れることは許可されています。しかし、一部のブラウザやHTMLパーサーがこれを正しく解釈しない場合があるため、予期しない動作や表示の問題が発生することがあるようです。
構造が単純であれば、<div>
タグを<span>
タグに置き換えればOKです!
結構複雑な構造で、<ul>
なども入っている…
そんなときは、<a>
タグは諦めていっそJavaScript
で飛ばしちゃいましょう。
要素をクリック可能にする
<a>
タグを使用せずに、要素自体をクリック可能にするために、JavaScriptを使用します。要素全体をクリックしたときに指定されたURLにリダイレクトすることができます。
手順
- 要素に、リダイレクト先のURLをデータ属性として保存します。
- JavaScriptを使用して、クリックイベントリスナーを追加。
- そして、クリックされた要素のデータ属性からURLを取得し、そのURLへリダイレクトします。
実装
WordPressのループ内で使用しているという前提です。
<!-- ループ内 -->
<div data-url="<?php the_permalink(); ?>">内容</div>
<!-- ループ内 -->
まず、クリックしたい要素にdata-url
を付与。data-url
にはパーマリンクを入れておきます。
そして、JavaScriptでは以下のような処理をします。
document.addEventListener('DOMContentLoaded', function() {
var liElements = document.querySelectorAll('div[data-url]');
liElements.forEach(function(li) {
li.addEventListener('click', function() {
window.location.href = li.getAttribute('data-url');
});
});
});
上記の方法で、要素をクリックすることで指定されたURLにリダイレクトできるようになります。
カーソルをポインターにしておく
<a>
タグではなくなったため、カーソルは矢印のままです。
なので、CSSでカーソルをポインターにしておくと完璧です。
cursor: pointer;