input type="file"のCSSが効かない

type属性値のfileはCSSが効かない

フォームに画像アップロード用の<input type="file">にCSSが反映されなかった時のメモ。

デフォルトのスタイル

<input type="file" name="user_photo" >

デフォルトでの表示

デフォルトのスタイルを変更する

デフォルトのスタイルを変更するには、input属性にdisplay: none;を与えて非表示にする。
フォームコントロールのラベルを<label>でマークアップして関連性を示してスタイルを設定する。

HTML

<div class="file_upload">
    <label>
        アップロード
        <input type="file" name="user_photo">
    </label>
</div>

SCSS

.file_upload label {
  input[type="file"] {
    display: none;
  }
  padding: 2px 6px;
  background-color: #0081cc;
  color: #FFF;
  display: inline-block;
  border-radius: 3px;
  font-size: 1.2rem;
  cursor: pointer;
  &:hover {
    background-color: #009de1;
  }
}

表示イメージ

ページ上部へ