• input type="file"のボタンデザインを変更する方法

    公開日:2017年04月10日 最終更新日:2022年09月09日

    <input>要素type="file"で作成するファイルアップロードボタンのデザインを変更する方法について解説します。input要素のスタイル変更はできない為、CSSの「label」タグを使ってボタンスタイルを指定し、ファイル選択ボックスを「jQuery」で作成する方法について説明します。

    プロエンジニアの無料会員登録はこちら

    目次

    プロエンジニアの無料会員登録はこちら

    1. ファイルアップロードボタンの作成【input type="file"】

    まずは、基本となるファイルアップロードボタンを確認してみましょう。
    HTMLのファイルアップロードボタンは、「input」タグに「type="file"」を指定するだけで簡単に作成できます。ファイルを選択するボタンデザインと文言及びファイルを選択した後に表示されるファイル名の仕様はブラウザーごとに少しずつ異なります。「upload1.html」をPC上の任意の場所に保存して下さい。ファイルの保存形式は「utf-8」にします。

    ●upload1.html

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <title> ファイルアップロードボタンの変更</title>
    </head>
    <body>
    <h1>input type="file"のデザインを変更する</h1>
    <form action="#">
    <p>アップロードするファイルを選択して下さい。</p>
    <p><input type="file" name="s_file"></p>
    </form>
    </body>
    </html>

    Googleブラウザーでは、「ファイルを選択」ボタンの横に "選択されていません" のメッセージが表示され、ファイルを選択後は、選択したファイル名のみが表示される仕様、Firefoxブラウザーでは、「参照…」ボタンの横に "ファイルが選択されていません。" のメッセージ、IEブラウザーの場合は、「参照…」ボタンとテキストボックスが表示されます。

    ●Googleブラウザーでの表示(input1.html)

    input type=

    ●Firefoxブラウザーでの表示(input1.html)

    input type=

    ●IEブラウザーでの表示(input1.html)

    input type=

    以下のようなコードを記述しても、ファイルアップロードボタンのメッセージや色などを変更する事はできませんが、ごく簡単なCSSでボタンのスタイルを自由に変更する事ができますので次の章でご紹介しましょう。

    ●upload1.html

    <style>
    input {
    color: #B20000;
    font-size: 20px;
    }
    </style>

    ▲ページトップへ戻る

    プロエンジニアの無料会員登録はこちら

    2. <label>タグを使って<input type="file">ボタンのスタイルを変更する

    input 要素のファイルアップロードボタン(type="file")を好みのスタイルに変更するには、「display:none」でボタンスタイルを無効にして、<label>タグにスタイルを適用します。

    ●input2.html

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <title>ファイルアップロード</title>
    <style>
    label > input {
    display:none; /* アップロードボタンのスタイルを無効にする */
    }
    label {
    color: #AAAAAA; /* ラベルテキストの色を指定する */
    background-color: #006DD9;/* ラベルの背景色を指定する */
    padding: 10px; /* ラベルとテキスト間の余白を指定する */
    border: double 4px #AAAAAA;/* ラベルのボーダーを指定する */
    }
    </style>
    </head>
    <body>
    <h1>input type="file"のデザインを変更する</h1>
    <label for="file_upload">
    ファイルを選択して下さい
    <input type="file" id="file_upload">
    </label>
    </body>
    </html>

    通常アップロードボタンのスタイルを無効にしていますので、サンプルコードのように<label>タグにCSSを適用してボタンのスタイルを自由に変更したり、「img」タグで画像を指定したりする事も可能です。ラベルをクリックするとファイルを選択するウィンドウが表示されます。

    ●ブラウザーの表示

    input type=

    <label>タグでボタンのスタイルを変更することは簡単にできました。但し、<label>タグをつけただけでは、通常アップロードボタンでファイルを選択した後に表示されるファイル名をブラウザーに表示する事ができません。JavaScriptを使ってファイル名を取得し、ブラウザーに表示する方法もありますが、少しコードが長くなってしまいます。今回はもう少し簡単な方法として「jQuery」を使い、選択したファイルを表示するテキストボックスを追加してみましょう。

    ▲ページトップへ戻る

    3. jQueryを使ってファイル選択ボックスを作成する

    スタイルを変更したファイルアップロードボタンを押してファイルを選択した後にファイル名をブラウザーで表示させるには、選択した「ファイル名を取得してブラウザーに表示する」為のプログラムを書く必要があります。Javascriptで実現する方法もありますが、コードを少なくする「jQuery」を使うと以下のHTMLのように4行の記述で選択したファイルを表示するテキストボックスを作成する事ができます。今回は、「Javascript」や「jQuery」の詳細について詳しくは解説しませんが、大まかな動きだけ把握してみて下さい。

    ●input2.html

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <script type="text/javascript" src="js/jQuery-3.2.0.min.js"></script>
    <title>ファイルアップロードボタン</title>
    <style>
    label {
    color: #AAAAAA; /* ラベルテキストの色を指定する */
    font-size: 13px; /* ラベルテキストのサイズを指定する */
    background-color: #006DD9;/* ラベルの背景色を指定する */
    padding: 6px; /* ラベルとテキスト間の余白を指定する */
    border-radius: 10px; /* ラベルボックスの角丸を指定する */
    cursor:pointer; /* マウスカーソルの形を指定する */
    }
    label > input{
    display:none; /* アップロードボタンのスタイルを無効にする */
    }
    div{
    margin:20px; /* ボタンとテキストボックス間の余白を指定する */
    }
    </style>
    </head>
    <body>
    <h1>input type="file"のデザインを変更する</h1>
    <div>
    <label for="file_upload">ファイルを選択して下さい
    <input type="file" id="file" onchange="$('#fake_text_box').val($(this).val())">
    <input type="text" id="file_upload" value="ファイル選択" onClick="$('#file').click();">
    </label>
    </div>
    <div>
    <input type="text" id="fake_text_box" value="" size="35" readonly onClick="$('#file').click();">
    </div>
    </body>
    </html>

    jQuery」とは、便利な機能をあつめたjavascriptライブラリをより少ないコードで記述出来るように設計されたjavascriptライブラリです。
    「input3.html」の"$"から始まるコードが、特定の要素に対して何らかのアクションを起こします。例えば、「onClick」イベントに書かれた"$('#file').click();"は、「id属性が"file"の要素に対して、クリックのアクションを起こす」という意味です。

    2章で解説した<label>要素と同じく、ボタンのスタイルが適用されているのがinputタグになります。

    ●ブラウザーの表示(input3.html)

    input type=

    このラベルをクリックすると、[input type="file"]を使ってファイル選択ウィンドウが開きます。

    ●ブラウザーの表示(input3.html)

    input type=

    ファイルを選択するとファイル名がのテキストボックスに入ります。

    ●ブラウザーの表示(input3.html)

    input type=

    ▲ページトップへ戻る


    フリーランス案件特集

    当サイトプロエンジニアのコンサルタントが厳選したおすすめのフリーランス案件特集はこちら
    特集ページから案件への応募も可能です!

    フリーランスインタビュー

    実際にフリーランスエンジニアとして活躍されている方のインタビューはこちら

    最新の求人情報をチェック!

    月額単価100万円〜
    勤務地 東京都 豊島区
    勤務地 フルリモート
    月額単価30万円〜40万円
    勤務地 東京都 中央区
    月額単価90万円〜100万円
    勤務地 東京都 品川区
    月額単価60万円〜70万円
    勤務地 近畿

    フリーランスの方でこのようなお悩みありませんか?

    • 定期的に案件を紹介してほしい
    • 完全フルリモートワークや、週1出勤など、働き方を選びたい
    • 単価交渉など営業周りが苦手なので、誰かに任せたい

    プロエンジニアにお任せください!

    プロエンジニアはほとんどEND直案件!高額単価案件ならお任せください。
    完全フルリモートや、週1出勤など、希望に合わせた働き方ができる案件を多数ご用意しています。
    単価や契約交渉などは弊社キャリアコンサルタントに全てお任せください。

    無料登録して、あなたの希望に合った案件をチェック!

    簡単60秒!無料登録はこちらから

    おすすめ記事

  • ピックアップ

    フリーランス

    【SREエンジニア】ライフスタイル支援サービス

    ライフスタイル支援サービスを複数BtoB向けに展開している企業です。 今回は事業の推進を加速させるた...

    月額単価:100万円〜

    フリーランス

    【HTML/CSS】コーダー★大手メーカーWebサイトの更新業務

    大手メーカーサイトのWeb環境整備に伴う、ホームページ更新管理及び修正作業を担当していただきます。 ...

    月額単価:30万円〜40万円

    フリーランス

    【TypeScript/React/Vue】フロントエンドエンジニア★資材梱包ECの開発

    資材梱包ECを展開するWebベンチャー企業にて、フロントエンドエンジニアの募集を致します。 モノリスの...

    月額単価:90万円〜100万円

    フリーランス

    【C#/大阪】システムエンジニア★大手不動産会社向け人事管理システム開発

    大手不動産会社向け人事管理システムのラボ開発チームにご参画頂きます。 人事異動などの内部管理をす...

    月額単価:60万円〜70万円

SCROLL TOP