input type="file"のボタンデザインを変更する方法を解説!
input type="file"タグのCSSデザインはそのままでは変更することができませんが、labelタグを活用することでinput type="file"のボタンデザインを変更することができます。その方法についてサンプルコード付きで解説しています。
input type="file"のボタンデザインを変更したい
input type="file"
タグのファイル選択ボタンは、ブラウザによってデフォルトの見た目は少し変わりますが、どれもシンプルすぎる見た目です。
また、input type="file"
タグのCSSスタイルを変更することはできません。
そのため、label
タグを使うことでinput type="file"
タグのボタンのCSSスタイルをオシャレに変更することができます。
input type="file"のボタンデザインを変更する方法
サンプルコードを使って、input type="file"
タグのファイル選択ボタンのCSSデザインを変更する方法を解説していきます。
index.html
<form action="index.html" method="POST" entype="multpart/form-data">
<label for="file" class="filelabel">ファイルを添付</label>
<input type="file" name="fileinput" id="file" class="fileinput">
</form>
input type="file"
タグにid属性のfile
を指定しています。また、label
タグにfor
属性でfile
を指定すると、id
属性にfile
を指定したinput type="file"
タグと関連付けが行えます。
関連付けることでlabel
タグをクリックすると、input type="file"
がクリックされた時と同様の動作を行います。
また、CSSでデザインしやすいようにinput type="file"
タグにはfileinput
クラス、label
タグにはfilelabel
クラスを指定しています。
index.css
.filelabel{
display: inline-block;
position: relative;
background-color: #1877F2;
color: #fff;
font-size: 16px;
padding: 10px 20px;
border-radius: 8px;
transition: all 0.5s;
}
.filelabel:hover{
background-color: #004db1;
}
.fileinput{
display: none;
}
CSSでfilelabel
クラスの要素をボタンっぽい見た目に仕上げています。また、ここでfileinput
クラスの要素はdisplay: none;
としてブラウザでは表示しないようにしています。
非表示の状態ではinput type="file"
タグの要素をクリックすることはできませんが、id
属性とfor
属性により関連付けが行われているためfilelabel
クラスの要素をクリックすることで同様の動作を行うことは先ほども説明しましたね。
これでinput type="file"
タグのファイル選択ボタンのデザインを変更することができました。
アップロードしたファイル名を含めてinput type="file"のデザインを変更する方法
次に、アップロードしたファイル名を含めてinput type="file"
タグのファイル選択ボタンのデザインを変更する方法をサンプルコードとともに紹介したいと思います。
アップロードしたファイル名を含めるためには、jQuery(JavaScript)を使って実装していきます。
index.js
$('.fileinput').on('change', function(){
let file = $(this).prop('files')[0];
$('.filelabel').text(file.name);
});
HTML,CSSは先ほどと同様のものを使用します。
jQueryでfileinput
タグの要素にchange
イベントを設定します。change
イベントが発火したとき、つまりファイルがアップロードされたときには、その要素のfiles
属性をprop
メソッドで取得します。
files
属性には選択されたファイルが列挙されます。ですが、今回は1つのファイルしかアップロードしないため、インデックス番号0
を指定して要素を取得します。
取得した要素file
に対して、file.name
とすることでアップロードしたファイルの名前を参照することができます。
file.name
でファイル名が取得できたので、filelabel
クラスの要素内のテキストをtext
メソッドでファイル名に書き換えます。
以上で、アップロードしたファイル名をボタンに表示することができました。
まとめ
input type="file"
のボタンデザインを変更する方法を紹介してきました。自分好みのデザインのボタンを作れるようになっていることでしょう。
