【CSS】inputタグのボタンに疑似要素などで装飾する2つの方法

【CSS】inputタグのボタンに疑似要素などで装飾する2つの方法

Web制作でホームページなどを構築する時、お問い合わせフォームを実装することが多いかと思います。

お問い合わせフォームには問い合わせ内容を入力した後にinputタグで送信をボタンを作成することがありますが、このボタンに疑似要素で矢印などの装飾をしようとしたところ、疑似要素が表示されなくて困ったことはありませんか?

ここは意外と駆け出しの頃につまづくポイントで、私も何時間も悩んだ経験があります。

WordPressでよく使用されるお問い合わせフォームプラグイン「Contact Form 7」でも、出力される送信ボタンはinputタグなので、inputタグへの装飾方法をご紹介しますね。

本記事の著者プロフィール

名前         : マサトラ
職業         : フリーランスエンジニア
フリーランス歴    : 1年6か月
提携制作会社     : 12社
月間平均制作サイト数 : 約5サイト

まず、状況をおさらいします。

inputタグに疑似要素を付与するために、以下のCSSを当ててみます。

<div class="block">
  <p>inputタグに疑似要素を付けようとしてもダメなパターン</p>
  <input type="submit" value="送信する" class="btn"></input>
</div>
.btn {
  position: relative;
  //ボタンのデザインに関するCSSは省略
}

.btn::after {
  position: absolute;
	content: "";
  background-image: url(https://masa-traveller.site/wp-content/uploads/2023/10/arrow-right.png);
  background-repeat: no-repeat;
  background-size: cover;
  width: 16px;
  height: 16px;
  top: 50%;
  transform: translateY(-50%);
  right: 16px;
}

では、実際にどうなるかCODE PENで確認してみると、以下のとおり疑似要素の矢印が表示されていません。

See the Pen inputタグに疑似要素を適用させる by Sugar (@ms_da_13) on CodePen.

では、この状況を解決するために、inputタグを装飾する方法を2つご紹介していきます。

方法① inputタグのボタンをdivで囲み、そこに疑似要素を付与する

inputタグに直接疑似要素を適用できないのであれば、inputタグをdivで囲み、そこに疑似要素を付与する方法があります。

サンプルのCSSは以下のとおりとなります。

btnクラスを、divタグbtn-wrapperで囲みます。

ポイントは囲んだdivタグにdisplay: inline-blockを指定することです。

これによって、btn-wrapperのサイズは、内包するbtnクラスと同じになります。

<div class="block">
  <p>inputタグをdivで囲み、そこに疑似要素を付けるパターン</p>
  <div class="btn-wrapper">
    <input type="submit" value="送信する" class="btn btn02"></input>
  </div>
</div>
.btn {
  //ボタンのデザインに関するCSSは省略
}

.btn-wrapper {
  position: relative; //疑似要素を付与するために指定
  display: inline-block; //インラインブロックにして要素の範囲をbtnに合わせる
}

.btn-wrapper::after {
  position: absolute;
	content: "";
  background-image: url(https://masa-traveller.site/wp-content/uploads/2023/10/arrow-right.png);
  background-repeat: no-repeat;
  background-size: cover;
  width: 16px;
  height: 16px;
  top: 50%;
  transform: translateY(-50%);
  right: 16px;
}

では、実際にCODE PENで表示を確かめてみましょう。

See the Pen inputタグに疑似要素を適用させる by Sugar (@ms_da_13) on CodePen.

疑似要素で矢印が表示されていることが確認できたかと思います。

これが、inputタグ使用時にボタンを装飾する方法の1つです。

方法② backgroundプロパティでinputタグのボタンに装飾する

inputタグを装飾するもう1つの方法は、疑似要素ではなく、backgroundプロパティを使用する方法があります。

サンプルのCSSは以下のとおりとなります。

ポイントは、background-positionの位置調整です。

background-position: right 16px center; では、

right 16px = 要素の右端から16pxの位置

center = 上下中央の位置

を指定しています。

<div class="block">
  <p>inputタグにbackgroundプロパティで装飾するパターン</p>
  <input type="submit" value="送信する" class="btn"></input>
</div>
.btn {
  //ボタンのデザインに関するCSSは省略

  background-image: url(https://masa-traveller.site/wp-content/uploads/2023/10/arrow-right.png); //背景画像の読み込み
  background-repeat: no-repeat; //背景画像の繰り返し無し
  background-size: 16px; //背景画像のサイズ
  background-position: right 16px center; //背景画像の位置
}

では、CODE PENで表示を確認してみましょう。

See the Pen inputタグに疑似要素を適用させる by Sugar (@ms_da_13) on CodePen.

backgroundプロパティでも矢印が表示されて、装飾できていることが確認できたかと思います。

(補足)ホバーアクション(hover)には対応できるか

実際にWeb制作でボタンをコーディングする場合、ホバーアクションを付与することが多いかと思います。

ここまで紹介したdivタグで囲む方法①、backgroundプロパティを使用する方法②、どちらもhoverを使用してホバーアクションを付与することが可能です。

従来どおり、ホバーアクションを付与させたい要素に「:hover」を付けてCSSを記述すればOKです。

本記事の例で言うと、方法①であればdivタグ「btn-wrapper」、方法②であれば「inputタグ」ですね。

まとめ

WordPressでお問い合わせフォームを実装する際、Contact Form 7などのプラグインを使用することが多いですが、プラグインで生成されるHTMLをキチンと把握していないと、デザインカンプどおりにコーディングすることができません。

  • Contact Form 7では送信ボタンはinputタグで生成される
  • inputタグに疑似要素は付与できない
  • inputタグをdivで囲み、そこに疑似要素を付与するか
  • もしくは、inputタグにbackgroudプロパティを当てて装飾をする
  • どちらの方法もhover適用可能

上記のことを予め把握しておき、良いお問い合わせフォームを実装していただければと思います。