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