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チュートリアルでのグループランキングの実装例の詳細な説明

推薦する

CSS 透明ボーダー背景クリップマジック

この記事では、CSSの透明な境界線の背景クリップの素晴らしい使い方を主に紹介し、みんなと共有し、自分...

React Hooksを使用する際のよくある落とし穴

React Hooks は React 16.8 で導入された新しい機能で、クラスを使用せずに状態や...

HBuilderX で Tomcat 外部サーバーを設定して、JSP インターフェイスを表示および編集する方法の詳細な説明

1. 最初の方法は、ローカルのTomcatを起動してJSPを表示することです。 tomcatのweb...

jsでライトスイッチの効果を実現

この記事の例では、ライトスイッチ効果を実現するためのjsの具体的なコードを参考までに共有しています。...

CSS はこのように使用できますか?気まぐれなグラデーションの芸術

前回の記事「1行のCSSコードの魅力」では、たった1行のCSSコードで生成できる美しい(奇妙な感じと...

MySQL 権限制御の詳細分析

目次1. グローバルレベル2. データベースレベル3. 表面レベル4. 列レベルの権限5. サブルー...

Linux で静的ルーティングを追加するための 2 つの実装方法の分析

ルートを追加するコマンド: 1.ルート追加route add -net 192.56.76.0 ne...

MongoDB データベースの状態を監視する Zabbix3.4 メソッド

Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...

Linux で環境変数 JAVA_HOME を変更/設定する方法について簡単に説明します。

1. 永久的な変更、すべてのユーザーに有効# vi /etc/プロファイル//キーボードの[Shi...

Vueはドラッグプログレスバーを実装します

この記事では、ドラッグプログレスバーを実現するためのVueの具体的なコードを例として紹介します。具体...

vue-element-adminフレームワークを使用して、バックエンドからメニュー機能を動的に取得します。

目次2. 詳しい説明2.1. asyncRoutesルーティングを追加する2.2. 新しいpermi...

HTML テーブルタグチュートリアル (19): 行タグ

<TR> タグの属性は、次の表に示すように、テーブル内の各行のプロパティを設定するために...

Vueでミックスインを使用する方法

目次序文使い方要約する序文Vue にはコードの再利用に使われる mixins という設定項目がありま...

Echarts バー水平棒グラフのサンプルコード

目次横棒グラフデータとスタイルを動的に更新するeChartsの幅と高さの適応の問題を解決する縦棒グラ...

Centos7 に Nginx 統合 Lua サンプル コードをインストール

序文私が使用しているパソコンはMacで、OSはmacOS Mojaveです。コンピュータに仮想マシン...