HTML でファイルをアップロードするときに使用する <input type="file"> 要素のスタイルをカスタマイズします。

HTML でファイルをアップロードするときに使用する <input type="file"> 要素のスタイルをカスタマイズします。

Web ページでは、基本的に <input type="file"> 要素はファイルをアップロードするときに使用されます。デフォルトのスタイルは次のとおりです。

Chromeの場合:

IEの場合:

上記のいずれの場合も、スタイルは比較的シンプルで、多くの Web ページのスタイルとは調和しません。

ユーザーのニーズやデザインスタイルに応じて表示スタイルを変更する機会は数多くあります。

次のようなブートストラップスタイルのアップロードボタンを作成したい場合、どのように実装できますか?

アップロードボタンを構築するために必要な基本要素


コードをコピー
コードは次のとおりです。
<span> <span>アップロード</span> <input type="file"> </span>

効果(クローム):

現在表示されているのは 2 行で表示されます。

周辺を div に置き換えない理由は、IE7 ブラウザでは、インラインに設定されていない限り、その幅が最大可能な幅まで拡張されるためです。 inline に設定すると要素の幅を調整できないため、span を使用して inline-block に設定するとこの問題を解決できます。

スタイルを追加して 2 行を 1 行にします


コードをコピー
コードは次のとおりです。
<span"> <span>アップロード</span> <input type="file"> </span>

css:


コードをコピー
コードは次のとおりです。
.fileinput-button { position: relative; display: inline-block; } .fileinput-button input{ position: absolute; right: 0px; top: 0px; }

効果:

デフォルトでは水色の枠線はありません。マウスをクリックした後にのみ表示されます。ここでは見やすくするために表示されています。

外側のスパンを display:relative に設定し、入力を display:absolute に設定すると、それらはすべてドキュメント フローの外側になります。

入力を外側の範囲に限定し、絶対位置決めを行うことで、本来の2行表示が1行表示に変更されます。

実際、ここでオーバーフローしています。実際の幅は「アップロード」テキストの幅です。fileinput-button スタイルを変更して、overflow: hidden を追加します。


コードをコピー
コードは次のとおりです。
.fileinput-button { 位置: 相対; 表示: インラインブロック; オーバーフロー: 非表示; }

効果:

非常に興味深いです。上部と右側に青い境界線が表示されていますが、これは実際には左側と下部のオーバーフロー部分を隠しています。

このとき、マウスで「アップロード」という単語をクリックすると、実際には入力をクリックすることになり、「開く」ダイアログ ボックスが表示される場合があります。これは、表示階層では入力が「アップロード」よりもユーザーに近いためです。

入力位置の右側に注意してください。なぜ左側の配置を使用しないのですか。

左に変更する場合。

効果(クローム):

効果(IE):

Chromeでは入力要素の選択ボタンが露出していますが、後から透明度を設定することで透明にできるので問題ありません。

ただし、入力ボックスは IE で公開されます。重要なのは、マウスが入力ボックスに移動すると、ポインターが入力状態に変わることですが、これは非常に扱いにくいです。

右配置方法を使用して入力ボックスを左に移動すると、IE でマウス ポインターが入力状態に変わるのを回避できます。

透明な入力要素

CS: ...


コードをコピー
コードは次のとおりです。
.fileinput-button { position: relative; display: inline-block; overflow: hidden; } .fileinput-button input{ position: absolute; left: 0px; top: 0px; opacity: 0; -ms-filter: 'alpha(opacity=0)'; }

効果:

入力は完全に消えてしまいましたが、「アップロード」をクリックすると引き続き機能します。

IE8+ をサポートできます。

Bootstrapをインポートし、ボタンスタイルを追加する

ヘッド内に外部 CSS および JS への参照を追加します。


コードをコピー
コードは次のとおりです。
<link rel="stylesheet" href="bootstrap/bootstrap.css"> <link rel="stylesheet" href="bootstrap/bootstrap-theme.css"> <script src="bootstrap/jquery-1.10.2.js"></script> <script src="bootstrap/bootstrap.js"></script>

ボタンスタイルを追加します。


コードをコピー
コードは次のとおりです。
<span> <span>アップロード</span> <input type="file"> </span>

効果:

サイズの問題を解決する

fileinput-button スタイルに width:100px を追加し、外側のスパンを 100px 幅に設定すると、下部をクリックしても反応がないことがわかります。これは、入力がデフォルトのサイズであり、下部をカバーできないためです。

入力部分のフォントサイズを大きく設定して拡大することで、重なりの問題を解決できます。ここでは 200 px に設定しています。


コードをコピー
コードは次のとおりです。
.fileinput-button input{ position:absolute; right: 0px; top:0px; opacity: 0; -ms-filter: 'alpha(opacity=0)'; font-size: 200px; }

これにより、カバレッジの問題が解決されます。

仕上げる。

参考: jQuery-File-Upload

IE7 に対応させたい場合は、jQuery-File-Upload の記述方法を参考にしてください。

コード:

XML/HTML コードコンテンツをクリップボードにコピー
  1. <!DOCTYPE html >   
  2. <html>   
  3. <ヘッド>   
  4.      <タイトル> </タイトル>   
  5.      <メタ  http-equiv = "コンテンツタイプ"  コンテンツ= "text/html;charset=utf-8" >   
  6.      <リンク  rel = "スタイルシート"   href = "bootstrap/bootstrap.css" >   
  7.      <リンク  rel = "スタイルシート"   href = "bootstrap/bootstrap-theme.css" >   
  8.      <スクリプト  src = "bootstrap/jquery-1.10.2.js" > </スクリプト>   
  9.      <スクリプト  src = "bootstrap/bootstrap.js" > </スクリプト>   
  10.      <スタイル>   
  11. .file入力ボタン{
  12. 位置: 相対的;
  13. 表示: インラインブロック;
  14. オーバーフロー: 非表示;
  15. }
  16. .fileinput-button 入力{
  17. 位置:絶対;
  18. 右: 0px;
  19. 上: 0px;
  20. 不透明度: 0;
  21. -ms-filter: 'アルファ(不透明度= 0 )';
  22. フォントサイズ: 200px;
  23. }
  24.      </スタイル>   
  25. </ヘッド>   
  26. <本文 スタイル= "パディング: 10px" >   
  27.      < div   align = "center" >   
  28.          <スパン  class = "btn btn-success ファイル入力ボタン" >   
  29.              < span >アップロード</ span >   
  30.              <入力 タイプ= "ファイル" >   
  31.          </スパン>   
  32.      </div>   
  33. </本文>   
  34. </html>   

<<:  vue3を使用してAppleシステムのサイドメッセージプロンプト効果を模倣する

>>:  Mysqlチュートリアルでのグループランキングの実装例の詳細な説明

推薦する

MySQL データベースのインデックスとトランザクション

目次1. 索引1.1 コンセプト1.2 機能1.3 索引作成の原則1.3.1 ディスクアクセス回数を...

NetEase ブログで使用されているシンプルな Web ページ コード

NetEase Blog でコードを使用する方法: まずブログにログインし、ブログのホームページの左...

vue+echartsチャートの使用に関する問題記録

序文echarts は私が最もよく使用するチャート作成ツールであり、非常に完全なエコシステムとコンテ...

複雑なウェブサイトのナビゲーションを簡素化

<br />ナビゲーション設計は構造設計における主要なタスクの 1 つです。ソフトウェア...

Vue3 ベースのスクリプト設定構文 $refs の使用

目次1. Vue2 構文2. Vue3の使用1. コンポーネントのref値を設定する2. コンポーネ...

MyBatis 動的 SQL の包括的な説明

目次序文動的SQL 1. まずモジュールのディレクトリ構造を見てみましょう2. 物理モデリングと論理...

Mysql クエリの結果セットを JSON データに変換するサンプル コード

Mysql はクエリ結果セットを JSON データに変換します 序文 学生テーブル 学生スコアテーブ...

面接官はReactのライフサイクルについてよく質問します

ReactライフサイクルReactのライフサイクルを理解するのに役立つ2つの図React ライフサイ...

JavaScript サンドボックスの探索

目次1. シナリオ2. サンドボックスの基本機能3. iframeの実装4. Webワーカーの実装5...

JSキャンバスは描画ボードと署名ボードの機能を実現します

この記事では、お絵かきボード/サインボード機能を実現するためのJSキャンバスの具体的なコードを参考ま...

mysqlのkey_lenの計算方法についての簡単な説明

MySQL の explain コマンドは SQL のパフォーマンスを分析できます。その 1 つが ...

MySQL解凍版のインストール手順の詳しい説明

1. 公式サイトにアクセスします: D:\mysql-5.7.21-winx64\bin をダウンロ...

Vueはechart円グラフの凡例のパーセンテージを表示するメソッドを実装します

この記事では主に、echart を使用してパーセンテージを表示する Vue の円グラフデータ部分を紹...

Docker Alibaba Cloud RocketMQ 4.5.1 のデプロイプロセスの詳細な説明

検索ミラー docker 検索 rocketmq画像バージョンを表示他の画像を表示したい場合は、画像...

CSS 配置レイアウト (位置、配置レイアウト スキル)

1. ポジショニングとは何ですか? CSS の position 属性には、absolute/re...