疑似要素を使ったらクリックできなくなった話とその解消法
はじめに
先日、メールフォーム部分のコーディング時、装飾のため疑似要素:before
を使用したら、フォームのボタンをクリックできなくなることがありました。
現象の再現
クリックできない現象を説明すると、例えば下の例は、全体の外枠を二重にする為に疑似要素:before
を使っています。
今回はリンクボタンを作成していますが、本来<a href=""></a>
で作成しているのでクリックできるはずですが、疑似要素があるためクリックできません(これがリンクでなくフォームでも同様にクリックできません)。
目次
枠とボタンを作ってみる
まずはベースとなる枠とリンクボタンを作ります。
枠の部分は枠の内側にborder
を設定するため疑似要素:after
を使用しています。
今回は:hover
時にbackground
がオレンジになるように設定していますが、マウスを合わせても変化しないのが分かると思います。
枠とボタンは、以下のように作成しています。
HTML
<div class="box01"> <a href="#" class="bottun01">Click</a> </div>
CSS
.box01 { position:relative; } .box01:after { content: ""; display: block; position: absolute; border: 4px solid #fff; top: 4px; left: 4px; width: calc(100% - 20px); min-height: calc(100% - 20px); border: 6px solid #ccc; } .bottun01 { display:inline-block; width:200px; height:60px; line-height:60px; background:#338DC9; text-align:center; color:#fff; text-decoration:none; } .bottun01:hover { background: #E99E18; }
できあがったもの
クリックできなくなった時の解消法
それではこういった場合にどう対処したら良いかといいますと、疑似要素のCSSにpointer-events: none;
を追加すると良いです。
HTMLに変更は無いため割愛します。
CSS(疑似要素部分のみ)
.box01:after { content: ""; display: block; position: absolute; border: 4px solid #fff; top: 4px; left: 4px; width: calc(100% - 20px); min-height: calc(100% - 20px); border: 6px solid #ccc; pointer-events: none; }