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

推薦する

Vue のデータ応答性に関する詳細な理解

目次1. ES 構文のゲッターとセッター2. ES構文でのdefineProperty 3. Vue...

MySQL 5.x の文字化け問題の解決方法

MySQL はよく使われるオープンソースのデータベース ソフトウェアですが、初めてのユーザーにはあま...

CentOS 6.4 MySQL 5.7.18 のインストールと設定方法のグラフィックチュートリアル

Centos6.4 で mysql5.7.18 をインストールするための具体的な手順が全員に共有され...

HTML でのアンカータグの使用例の共有

アンカータグの使用法:同じドキュメント内の特定の場所にリンクすることをアンカー リンクと呼びます。ア...

Vue SPA ファースト スクリーン最適化ソリューション

目次序文最適化ソ連オンデマンドインポート1. ルーティングファイルでコンポーネントをオンデマンドでイ...

ウェブページ制作時のコードコメントの書き方

<br />私の仕事で使用しているアノテーションの書き方の基準をまとめました。技術的な内...

SVN のインストールと基本操作 (グラフィック チュートリアル)

目次1. SVNとは何か2. SVNサーバーとクライアントの取得方法3. SVN ワークフローとアー...

HTML メタの説明

導入メタタグは、HTML言語のHEAD領域にある補助タグです。 meta は、ページの説明、キーワー...

MySQL 自動インクリメント ID のオーバーサイズ問題のトラブルシューティングと解決策

導入Xiao A がコードを書いていたところ、DBA Xiao B が突然、「急いでユーザー固有情報...

Vue3+Vite+TS は、要素プラスビジネスコンポーネントの二次カプセル化を実装します sfasga

目次1. 構造文字列2. タプルを返す3. Dict辞書にアクセスする4. 図書館を利用する5. リ...

momentJs を使用してカウントダウン コンポーネントを作成する (サンプル コード)

今日はvueとmomentで作ったカウントダウンを紹介したいと思います。具体的な内容は以下のとおりで...

Windows 10 システムに mysql-8.0.13 (zip インストール) をインストールする詳細なチュートリアル

インストール環境の説明•システムバージョン: windows10 •MySQL バージョン: mys...

過去2年間のユーザーエクスペリエンス

<br />国内のウェブサイトが本格的に普及し、ユーザーエクスペリエンスに重点が置かれる...

IE6 で幅と高さがおかしいバグ

図に示すように: しかし、IE6で表示すると、right:1px:になります。 IE6 には、幅と高...

mysql ルートユーザーを認証できず、Navicat リモート認証プロンプト 1044 の問題を解決します

まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...