buttonタグとinputタグの違い/使い分けを解説【HTML】

「buttonタグ」と「input type=”submit”」はどんな違いがあるの?どちらを使った方がいいの?

 

こんな疑問を解決します。

 

どちらを使ってもボタンを作る事が出来るけど、どちらを使うべきなのか問題。

「button」「input」の違い、使い分けについて

 

フロントエンドエンジニアとしてWEB制作からシステム開発の仕事をしている筆者が、現場で学んだノウハウを元に解説。

 

・buttonタグをおすすめする理由
・buttonタグとinputタグの違い

 

 

スポンサーリンク

buttonタグとinputタグの違い/使い分けを解説

 

はい、結論「button」がおすすめ。

 

ボタン自体の役割としては別ページへリンクを付与したり、入力したデータの送信、決定処理などいろいろです。

 

ただリンクを飛ばすだけのボタンであれば<a>タグでリンク先を指定して、

CSSでキレイにすればボタンのように表現は出来るので、buttonタグとinputタグの使い分けに悩んだのは私だけじゃないはず!?

 

ではさっそく「button」がおすすめな理由、「buttonタグ」と「inputタグ」の違い、を見ていきましょう。

 

 

button

<button>~</button>

 

「button」は属性を付けることができます。

属性解説
name要素の名前を指定
フォーム送信時にこの名前と値が一緒に送信される。通常、同じフォーム内に複数のボタンがある場合に使用する
value表示するテキストを指定
フォーム送信時、この値がサーバーに送信される
typeボタン要素のタイプの指定(button、submit、reset)デフォルトはsubmit
disabledボタンを無効化、
無効なボタンはクリックできなくする
onclickボタンがクリックされたときに実行されるJavaScriptコードを指定

 

コード例

<form action="submit.php" method="post">
   <button type="submit" name="action" value="save">Save</button>
   <button type="submit" name="action" value="delete">Delete</button> 
</form>

 

「button」はボタンとしての汎用的なインライン要素です。

要素内に疑似要素や画像、タグを使用することができるので表現の自由度が高い。

 

つまり

CSSデザインの自由度が高くなるので、ホバーした時に色が変化、動きを付けたりとリッチなデザイン実装が出来る。

 

input要素、button要素、form要素、select要素、textarea要素、iframe要素、label要素、fieldset要素、isindex要素

 

 

input

<input type="~">

 

「input」はホームページ制作で頻繁に登場する要素ですね。

typeの指定でさまざまな表現ができますが、今回は「input type=”submit”」の解説です。

 

「button」と同じく「name」や「value」で属性を付けることができますが、特徴として要素内の指定が出来ません。

 

つまり疑似要素が使えないので簡単なデザインしかできず、リッチなデザインをするためには工夫が必要です。

※<div>や<span>で上手く囲ってやれば出来なくもないですが、出来るだけ完結でスマートな構文が望ましいです。

 

コード例

<form action="#" method="post">
  <input type="text" value="" />
  <input type="submit" value="送信">
</form>

 

 

「button」「input」どちらも同じように使える

 

先述の通り「データを送信する」という役割であれば、どちらを用いても実現可能そうですね。

違いは「要素内に要素を指定できるか?」です。

 

button →  要素内に要素が指定できる
input type=”submit” →  要素内に要素が指定できない

 

疑似要素を使かわずhoverした時にちょっと変化を出す程度であればinputを使っても全然OK

紛らわしかったり、コーディング時に迷うようなら「button」を使うよう覚えてしまった方が良いでしょう。

 

 

「button」「input」の使い分け一覧

 

ボタンをリンクとして飛ばしたいだけ

<a>タグをボタンぽく整えて使えばよい。わざわざ<button>で囲まなくていい

<button><a href="">#</a></button> //NG例
<a href="">#</a> //OK例

 

デザインしない、こだわらない

<input type=”submit”>でデータ送信してもOK。

ただ、機能だけを重視した社内システムとかでない限り、最低限のUIデザインはすることが多い。

 

データ送信+デザインもこだわる

<button>を使う。要素内に疑似要素が指定可能

 

 

まとめ

 

まとめです。

 

特別な理由がなければ「button」を選べばOK
「button」と「input type」の違いは「button」は要素内指定が可能でデザイン自由度が高い
「button」と「input type」での「データ送信」はどちらでも可能

 

という感じ。

HTML/CSSだけでボタン風リンクを作っていた時は特になにも考えていませんでしたが、

バックエンドとのAPI連携を行うなら意識したい部分かと思います。

 

少しでもコーディングの参考になれば幸いです。

最後までお読みいただきありがとうございました。

スポンサーリンク
NO IMAGE

晴耕雨読

『晴れた日には畑を耕し雨の日には本を読む』そんな生活を目指すブログです