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 を使用

推薦する

Win10にmysql8.0.15 winx64をインストールしてサーバーに接続する際に問題が発生しました

1. mysql-8.0.15をダウンロード、インストール、設定する1. 公式サイト (https:...

Zabbix 5.0 ディスク自動検出と読み取り/書き込み監視の問題を分析する

ディスクを自動的に検出する構成キーの値注: このキー値は Linux プラットフォームでのみサポート...

Vue スクロールダウンしてさらにデータを読み込む スクロールケースの詳細な説明

vue-無限スクロールインストール npm インストール vue-infinite-scroll -...

Linux での GDB 入門チュートリアル

序文gdb は Linux で非常に便利なデバッグ ツールです。コマンドライン モードのデバッグ ツ...

IE6のmin-widthとmin-heightと互換性を持たせる簡単な方法

ウェブサイトがワイドスクリーンの場合、ブラウザ ウィンドウを左右にドラッグすると、ウェブサイトの幅が...

MySql データ型チュートリアル例の詳細な説明

目次1. 概要2. MySQLデータ型の詳細な説明1) 文字列型2) 整数型3) 浮動小数点型4) ...

MySQL マスタースレーブレプリケーションの役割と動作原理の詳細な説明

1. マスタースレーブレプリケーションとは何ですか?マスタースレーブレプリケーションは、スレーブデー...

Linuxシステムにおけるキー認証に基づくSSHサービスのプロセス

ご存知のとおり、SSH は現在、リモート ログイン セッションやその他のネットワーク サービスにセキ...

MySQL 演算子の具体的な使用法 (and、or、in、not)

目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...

Mybatisの各SQL文の実行時間の統計

背景最近、面接でデータベース トランザクションについてよく質問されます。通常は、@Transacti...

MySQLサブクエリでorder byが効かない問題の解決方法

偶然にも、SQL ステートメントを異なる MySQL インスタンスで実行すると、異なる結果が生成され...

jsを使用して動的な背景を実現する

この記事の例では、動的な背景を実現するためのjsの具体的なコードを参考までに共有しています。具体的な...

ラベルタグを使用してテキストをクリックしてラジオボタンを選択します

<label> タグは、入力要素のラベル (タグ) を定義します。ラベル要素はユーザーに...

重複リクエストを削除するAxiosのソリューションについての簡単な説明

目次1. 重複したリクエストをキャンセルする2. すべてのリクエストをクリーンアップするこのソリュー...

LinuxサーバのSSHクラッキング防止方法(推奨)

1. Linuxサーバーは、/etc/hosts.denyを設定して、相手のIPがSSH経由でサー...