type="file" の入力ボックスのスタイル変更の概要

type="file" の入力ボックスのスタイル変更の概要
入力タイプ「file」とは何ですか?

これが何なのかは説明する必要はないと思います。誰もが知っていることです。そして、さまざまな携帯電話があるこの時代では、写真を撮って直接アップロードすることもできます。以前よりもずっと楽しいです。

以前は 1 つのファイルしかアップロードできませんでした。現在は、 multiple属性を追加することで複数のファイルをアップロードでき、多くのファイル形式がサポートされています。詳細については、http://www.w3.org/html/ig/zh/wiki/HTML5/number-state#.E6.96.87.E4.BB.B6.E4.B8.8A.E4.BC.A0.E7.8A.B6.E6.80.81 を参照してください。

アップロードボタンのスタイル調整

CSS を扱ったことがある人なら、HTML 要素の中で、フォーム コントロール要素のスタイル変更が最も面倒だということを知っています。多くのコントロールのスタイルは、システム テーマによって変わります。変更したい場合、特に IE ブラウザーでは、シミュレートすることしかできません。

アップロードボタンtype="file"については、一度スタイルを変更しました。シミュレーション方式を試した方もいましたが、シミュレーション方式ではいわゆるセキュリティ上の問題が発生する可能性があると言われています。まあ、ページ作成者や画像カッターの私には理解できませんし、理解できたとしても対処方法がわかりません。じゃあシミュレーションしないで…

しかし、シミュレーションを行わない場合、どのようにスタイルを変更できるのでしょうか?

画像配置オーバーレイソリューション

以前私が知っていた方法は、実は誰もが知っている方法で、アップロードボタンtype="file" を透明にして画像の上に重ね合わせるというもので、クリックするだけで画像をアップロードできると感じられ、ネイティブのアップロードボタンを見る必要はありません。


コードをコピー
コードは次のとおりです。
<input type="file" id="upfile" ><span ></span>.up_icon,.up_input {position: absolute;top: 10px;left: 10px;width: 64px;height: 64px;z-index: 2}.up_icon {overflow: hidden;font-size: 0;line-height: 99em;background: url(http://sfault-image.b0.upaiyun.com/346/967/3469672357-54250d7235406_articlex) no-repeat 0 0;z-index: 1;}

デモをご覧ください: http://jsbin.com/qacijusihivi/1/

このデモでは、実装方法が非常に明確に示されています。アップロード ボタンは画像の上に配置されています。画像は、空のラベルの背景画像として使用できます。次に、アップロード ボタンの不透明度0に設定して、ボタンが見えないようにしています。ただし、実際にはボタンは存在します。その後...その後...他には何も起こらず、効果が達成されます...

WebKit 向けソリューション

この Webkit カーネルのソリューションは、Webkit カーネルにのみ有効であるため、実際には少し無理が​​あり、あまり実用的ではありません。 -webkit-プレフィックスを使用した書き込みがサポートされていない場合は効果がありません。そのため、誰もが娯楽としてそれを見るべきです。


コードをコピー
コードは次のとおりです。
<input type="file" id="upfile">input[type="file"]::-webkit-file-upload-button {position: absolute;top: 10px;left: 10px;width: 64px;height: 64px;overflow: hidden;line-height: 99em;background:url(http://sfault-image.b0.upaiyun.com/346/967/3469672357-54250d7235406_articlex) no-repeat 0 0;border: 0 none;z-index: 2;}

デモをまずご覧ください: http://jsbin.com/wicihihabifi/1/

このデモの HTML 構造は非常にシンプルで、[入力タグが 1 つだけです。以前の方法よりもはるかにシンプルですが、互換性は確実に低くなります。携帯電話でどのように動作するかはわかりません。ほとんどの携帯電話は現在、Webkit ベースのブラウザーを使用しています。忘れて、エンターテイメントとして扱って楽しんでください。

シンプルな HTML 構造変更スタイルは、 ::-webkit-file-upload-button疑似要素に完全に依存しています。これは単なる普通のボタン要素なので、この疑似要素のスタイルに対応する変更を加えるだけです。このボタン要素を Shadow DOM で表示すると、より鮮明に表示されます。

これは Chrome 開発者ツールで表示される DOM ツリーです。一般的に、Shadow DOM の表示を有効にしないと、 type="file"入力にこれほど多くのコンテンツが含まれていることはわかりません。開く方法は非常に簡単です。開発者ツールの右上隅にある歯車をクリックします。ポップアップ レイヤーでこのボックスをチェックするだけです。

これで他の入力タグも自分で確認できるようになりました。Shadow DOMがあれば拡張可能です。そして、新しい HTML5 タグにもいくつかあります...

やっと

type="file"入力タグについては、現在、スタイルを変更する方法が 2 つしか知られておらず、 Webkitのソリューションも非常に限られていますが、携帯電話では問題ないはずです。おそらく誰かが、「他のブラウザはどうですか?」と尋ねるでしょう。はい、どうですか?私も知りません。

Firefox ブラウザでは、 forms.cssにセレクターinput type="file" > button[type="button"]がありますが、なぜかこのセレクターを自分のスタイルに追加しても効果が見られなかったので、それ以上操作しませんでした。

PS: form.css ファイルについては、Firefox ブラウザのファンであれば、パス resource://gre-resources/forms.css の存在を知っているはずです。

ああ、そうか、Opera ブラウザもあるんだ。Mac で遊んでいたときは、プレフィックス-webkit-の付いたスタイルがそのまま継承されていたんだ...

添付ファイル: アップロードボタンの画像:

<<:  Saltstack に Zabbix サービスをデプロイする方法を説明します

>>:  JS クロスドメイン XML - AS URLLoader を使用

推薦する

MySQL エラー 1290 (HY000) の解決方法

私は長い間問題に取り組み、文法上の問題を何度も確認しました。しかし、後でネットで調べてみたら、突然理...

複数のプロジェクトをデプロイする Docker nginx の例

前提条件1. ローカルコンピュータとサーバーにDockerがインストールされています。ダウンロード方...

Debian システムでの自動パッケージ更新の問題を解決する方法

いつから始まったのかはわかりませんが、コンピュータの電源を入れてインターネットに接続するたびに、デー...

MySQL 5.7.18 MSI インストール グラフィック チュートリアル

この記事では、参考までにMySQL 5.7.18 MSIインストールチュートリアルを紹介します。具体...

pdf.js を使用して Vue で PDF ファイルをプレビューする方法

ページ上で PDF をプレビューすると、一部のファイルは印刷またはダウンロードできません。現時点では...

CSS transform-originプロパティを理解する

序文最近、花火アニメーションを作成しました。花火が散るアニメーションです。アニメーションの実装中、花...

CSS3は、大きな円のドット分布と回転効果を実現するためにtransform-originを使用します。

まず、transform-origin 属性を使用する必要があります。transform 属性は必ず...

Hadoop 2.x と 3.x の 22 ポイントの比較、Hadoop 3.x の 2.x に対する改善点

質問ガイド1. Hadoop 3.x はどのようにして障害を許容するのでしょうか? 2. Hadoo...

MySQL統計の概要

MySQL は、SQL 解析とクエリ最適化のプロセスを通じて SQL を実行します。パーサーは SQ...

SASSで変数のデフォルト値を使用する方法

SASS で定義された変数では、後で設定された値によって古い値が上書きされます。 $色: 赤; $色...

MySQL ファジークエリステートメントコレクション

SQL ファジークエリステートメント一般的なファジーステートメントの構文は次のとおりです。 SELE...

Vue バインディング オブジェクト、配列データを動的にレンダリングできないケースの詳細な説明

プロジェクトシナリオ: Dark Horse Vueプロジェクト管理の実践、製品分類の取得、拡張バー...

js の Array.forEach でループを終了する方法の例

目次forEach() メソッドjs の Array.forEach のループから抜け出す方法解決:...

spanタグのスタイルに幅属性を設定する方法

span タグのスタイルに width 属性を直接設定すると、効果がないことがわかります。 disp...

Springboot プロジェクトに動的にパラメータを渡すための Docker の実装方法

背景最近、Docker 初心者の友人から、毎回プロジェクト構成ファイルにハードコーディングしてサービ...