入力要素 [type="file"] を使用する場合のスタイルのカスタマイズとブラウザの互換性の問題に関する議論

入力要素 [type="file"] を使用する場合のスタイルのカスタマイズとブラウザの互換性の問題に関する議論
この2日間、Baixing.comの筆記試験問題を解いているときに、このような問題に遭遇しました。HTML5の新機能を使用して、Baixing.comの既存のモジュールを実装しました。しばらくBaixing.comを閲覧した後、最終的に情報を公開するためのフォームモジュールを選択しました。理由は非常に簡単です。HTML5にはフォームの新機能がたくさんあります。これらの新機能も非常に実用的です。結局のところ、登録、ログイン、投稿など、フォームのある場所が多すぎます...(ちょっと話がそれましたね。)


この時点で、元のウェブページのフォームにこの要素が表示されました


私の最初の反応は、はは、それは単なる入力要素で、CSS でスタイルをカスタマイズできる、ということでした。その後、当然のことながら、Baixing.com の特定のスタイルを確認するために「右クリック」-「要素を検査」する準備をしましたが、後でわかりました...


間違って開いたに違いありません... この場合、もちろん自分でやらなければなりません。 1 つ確認できることは、ファイルをアップロードするためのこのフォーム コントロールでは input[type="file"] を使用する必要があるということです。 OK、次のコード行を追加するだけです:

コードをコピー
コードは次のとおりです。

<入力タイプ="ファイル" />

Chrome ブラウザで更新します。


これがデフォルトのスタイルであることは間違いありませんが、このデフォルトのスタイルを変更するのは難しいことがわかりました。最も厄介なのは、ブラウザによってデフォルトのスタイルが異なることです。インターネット上の画像からそれが非常に明らかです。


(だから私は言う、あなたたちブラウザはまったく従順ではなく、お互いにうまくコミュニケーションをとっていない。あなたたちはとても高いところにいるが、フロントエンドの学生は苦しんでいる。)
ただし、解決策はまだ簡単に考えられます。要素を使用して入力をラップし、その要素に他の必要な要素を追加し、スタイルを設定して目的の効果を実現します。入力要素の位置の値を absolute に設定して外側の要素を塗りつぶし、入力を透明にします。
HTML コードは次のとおりです。

コードをコピー
コードは次のとおりです。

<div id="入力ファイル">
<span id="text">クリックしてアップロード</span>
<input id="ファイル" type="ファイル" />
</div>

対応する CSS コードは次のとおりです。

コードをコピー
コードは次のとおりです。

#入力ファイル{
position: relative; /* 子要素の位置を確認する*/
幅: 120ピクセル;
高さ: 30px;
背景: #eee;
境界線: 1px 実線 #ccc;
テキスト配置: 中央;
カーソル: ポインタ;
}
#文章 {
表示: インラインブロック;
上マージン: 5px;
色: #666;
フォントファミリー: "黑体";
フォントサイズ: 18px;
}
#ファイル {
表示: ブロック;
位置: 絶対;
上: 0;
左: 0;
width: 120px; /* 幅と高さは周囲の要素と一致する必要があります*/
高さ: 30px;
不透明度: 0;
-moz-opacity: 0; /* 古いブラウザと互換性あり */
フィルター: alpha(opacity=0); /* IE互換 */
}

表示効果は以下のようになります。

キモジ……
しかし、ここでもまだバグがあります。このようにボタンを作成すると、マウスをボタンの上に置くとクリックできるはずです。しかし、すべての要素に cursor:pointer; 属性を追加しても、一部の領域はポインターとして表示されます。この問題を解決できる専門家はいますか?

<<:  Vue3 における親コンポーネントと子コンポーネント間の値の転送の詳細な説明

>>:  Linux で rsync を使用する方法

推薦する

HTML における画像タグの使用方法の詳細な説明

HTML では、<img> タグはテキスト内の画像タグを定義するために使用されます。その...

MySQL の複合インデックスはどのように機能しますか?

目次背景複合インデックスを理解する左端一致原則フィールド順序の影響複合インデックスは単一のインデック...

nodejs で worker_threads を使用して新しいスレッドを作成する方法

導入前の記事で述べたように、NodeJS には 2 種類のスレッドがあります。1 つは、ユーザー リ...

Linux trコマンドの使い方

01. コマンドの概要tr コマンドは、標準入力からの文字を置換、圧縮、削除できます。ある文字セット...

mySQLキーワードの実行優先度の説明

以下のように表示されます。表から条件フィールドでグループ化仮想テーブルとフィールドを作成し、フィール...

CentOS7.6 システムで yum を使用して lnmp 環境を構成する方法

1. インストールバージョンの詳細 サーバー: MariaDB サーバーバージョン: 5.5.60-...

MySQL 学習: データベース テーブルの 5 つの主要な制約を初心者向けに詳しく説明します

目次1. 制約の概念と分類2. 5つの制約の追加と削除2.1 制約を追加する6つの方法2.2 制約を...

MySQL binlog を使用して誤って削除されたデータベースを復元する方法

目次1 現在のデータベースの内容を表示し、データベースをバックアップする2 bin_log関数を有効...

Ubuntu の仮想環境に Django をインストールする方法

Ubuntu コマンドライン ウィンドウで次の操作を実行します。 1. 仮想環境をインストールする...

Vue-routerルーティングの使い方

目次1. 説明2. インストール3. テスト1. 説明Vue Router は、Vue.js の公式...

JSにおける4つのデータ型判定方法

目次1. 型2. インスタンス3. コンストラクター4.toString() この記事では、4 つの...

Ubuntu16.04 インストール mysql5.7.22 グラフィックチュートリアル

VMware12.0+Ubuntu16.04+MySQL5.7.22 インストールチュートリアルの詳...

JSインターセプト文字列の3つの方法の詳細な説明

JS には、文字列をインターセプトするための 3 つのメソッド、 slice() 、 substri...

2012年のベストWebデザイン作品レビュー[パート1]

新年の初めに、友人の健康と2013年が素晴らしい年となることを心からお祈りいたします。この記事では、...

MySQL 入門 - SQL 実行プロセス

目次1. プロセス2. コアアーキテクチャ2.1 サーバー層の基本コンポーネントの紹介3. ステート...