疑似要素を使ったらクリックできなくなった話とその解消法
はじめに
先日、メールフォーム部分のコーディング時、装飾のため疑似要素: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;
}