[解決済み] ファイルアップロードボタンのクロスブラウザカスタムスタイリング [重複]について
質問
私は個人的な好みに合わせてファイルアップロードボタンをスタイル付けしようとしていますが、JSなしでこれを行うための本当に堅実な方法を見つけることができませんでした。私が見つけたのは 2 つの 他の の質問をしましたが、そこでの回答はJavaScriptを含むか、または提案された Quirksmodeのアプローチ .
この Quirksmode のアプローチの主な問題は、ファイルボタンがブラウザで定義された寸法のままであるため、その下に配置されたボタンとして使用されているものに自動的に調整されないということです。私はそれに基づいていくつかのコードを作りましたが、それはファイルボタンが通常取るであろうスペースを取るだけなので、私が望むように親divを埋めることは全くありません。
HTML。
<div class="myLabel">
<input type="file"/>
<span>My Label</span>
</div>
CSSです。
.myLabel {
position: relative;
}
.myLabel input {
position: absolute;
z-index: 2;
opacity: 0;
width: 100%;
height: 100%;
}
このバイオリン
は、この方法がいかに欠陥があるかを示しています。Chromeでは
!!
をクリックするとファイルダイアログが開きますが、他のすべてのブラウザでも、ファイルボタンはボタンの正しい領域を占めません。
ファイルアップロードボタンをスタイルするために、JavaScriptを使用せず、できればできるだけ少ない「ハッキング」コーディングを使用する、より堅実な方法はありますか(ハッキングは通常、フィドル内のもののような他の問題を一緒にもたらすので)?
どのように解決するのですか?
(驚いたことに) これを推奨している場所が他になかったので、これを投稿しています。
ブラウザで定義された入力寸法に制限されることなく、これを行う本当に簡単な方法があります。単に
<label>
タグを使用して、隠しファイルアップロードボタンを囲みます。これによって、ファイルアップロードボタンに使用される
webkit の組み込みのスタイリングである
[1]
.
ラベルタグは、クリックイベントを子入力に向けるために作られたものです。 [2] このタグを使えば、クリックイベントを入力ボタンに誘導するための JavaScript はもう必要ありません。次のようなものを使用することになります。
label.myLabel input[type="file"] {
position:absolute;
top: -1000px;
}
/***** Example custom styling *****/
.myLabel {
border: 2px solid #AAA;
border-radius: 4px;
padding: 2px 5px;
margin: 2px;
background: #DDD;
display: inline-block;
}
.myLabel:hover {
background: #CCC;
}
.myLabel:active {
background: #CCF;
}
.myLabel :invalid + span {
color: #A44;
}
.myLabel :valid + span {
color: #4A4;
}
<label class="myLabel">
<input type="file" required/>
<span>My Label</span>
</label>
古いバージョンのInternet Explorerでも動作するように、固定位置で入力を隠しています(エミュレートされたIE8-では拒否されました)。
visibility:hidden
または
display:none
のファイル入力)。エミュレートしたIE7以上でテストしてみましたが、完全に動作しました。
-
を使用することはできません。
<button>
の中で<label>
タグの中にあるため、残念ながら、ボタンのスタイルを自分で定義する必要があります。私にとっては、これがこの方法の唯一の欠点です。 -
もし
for
属性が定義されている場合、その値は入力のトリガーとして、同じid
と同じfor
属性は<label>
.
関連
-
[解決済み] ChromeでCSSカスタムスタイルのボタンから青枠を削除する
-
document.forms 使用方法
-
[解決済み] input type="file "ボタンのスタイリング
-
[解決済み] Do I use <img>, <object>, or <embed> for SVG files?
-
[解決済み] localStorage、sessionStorage、session、cookieの違いは何ですか?
-
[解決済み] HTMLのレイアウトにテーブルを使用しない理由は?[クローズド]
-
[解決済み] Twitter Bootstrap Form File Element Upload Button(ファイルアップロードボタン
-
[解決済み] 貼り付けイベントでクリップボードのデータを取得するJavaScript (クロスブラウザ)
-
[解決済み】ブラウザの戻るボタンのイベントを検出する方法 - クロスブラウザ編
-
[解決済み】クロスブラウザでCSSを使って縦書き文字を描くには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「選択されたファイルがありません」を変更しました。
-
[解決済み] 横型リストアイテム
-
[解決済み] cssのfit-contentで横幅を自動サイズ調整する
-
[解決済み] HTMLのid属性に有効な値は何ですか?
-
[解決済み] クリアフィックスとは何ですか?
-
[解決済み] div内の要素を縦に並べるにはどうしたらいいですか?
-
[解決済み] input type="file "ボタンのスタイリング
-
[解決済み] CSSだけでリンクを無効化する方法
-
[解決済み】「input」要素の前後でCSSコンテンツ生成【重複あり
-
[解決済み] <input type="file">をカスタマイズする方法は?