Bootstrap 3のフォーム<select>
要素をスタイリングすると、OS X上のFirefoxで見苦しいボタンがレンダリングされます。
これは明らかに既知の問題であり、多くのハックと回避策がありますが、どれも非常にきれいではありません( https://github.com/twbs/bootstrap/issues/765 )。 Bootstrapドロップダウンまたは追加のプラグインを使用する以外に、この問題に対する適切な解決策を誰かが見つけたかどうかは疑問です。 Bootstrapドロップダウンではなく、HTML <select>
を使用することを意図的に選択しました。モバイルデバイス上の長いリストの方が使い勝手が良いからです。
これはFirefoxの問題ですか、それともBootstrapの問題ですか?
詳細:Mac OS X 10.9、Firefox 25.0.1
Update 12/4/13:各ブラウザがFirefox、Chromeを使用してOS X 10.9で<select>
をレンダリングする方法を並べて比較しました。およびSafari、@ zessxへの応答( http://bootply.com/98425 を使用)。明らかに、ブラウザとOSで<select>
フォーム要素がレンダリングされる方法には大きな違いがあります。
<select>
タグは、使用しているOSによって異なる方法で処理されることを理解しています。これは、スタイリングと動作を指示するネイティブOSベースのコントロールがあるためです。しかし、Bootstrapのclass="form-control"
について、Firefoxで<select>
フォーム要素が異なって見える原因は何ですか? Firefoxのデフォルトのスタイルが設定されていない<select>
が問題なく見えるのに、スタイルが設定されると見た目が悪くなるのはなぜですか?
IEのドロップダウン矢印の周りの灰色のボックスを実際に変更できます。
select::-ms-expand {
width:12px;
border:none;
background:#fff;
}
実際には、ドロップダウンフィールドでほとんどすべてを行うことができ、すべてのブラウザで同じに見えます。コード例を見てください
select.custom {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20fill%3D%22%23555555%22%20%0A%09%20width%3D%2224px%22%20height%3D%2224px%22%20viewBox%3D%22-261%20145.2%2024%2024%22%20style%3D%22enable-background%3Anew%20-261%20145.2%2024%2024%3B%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20d%3D%22M-245.3%2C156.1l-3.6-6.5l-3.7%2C6.5%20M-252.7%2C159l3.7%2C6.5l3.6-6.5%22%2F%3E%0A%3C%2Fsvg%3E");
padding-right: 25px;
background-repeat: no-repeat;
background-position: right center;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
select.custom::-ms-expand {
display: none;
}
rafxおよびSinaによる優れた回答に基づいて、ここにスニペットを示しますこれはFirefoxのみを対象とし、デフォルトのボタンをBootstrapのアイコンテーマからコピーされた下向きキャレットに置き換えます。
前:
後:
@-moz-document url-prefix() {
select.form-control {
padding-right: 25px;
background-image: url("data:image/svg+xml,\
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' width='14px'\
height='14px' viewBox='0 0 1200 1000' fill='rgb(51,51,51)'>\
<path d='M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z'/>\
</svg>");
background-repeat: no-repeat;
background-position: calc(100% - 7px) 50%;
-moz-appearance: none;
appearance: none;
}
}
(インラインSVGには読みやすいようにバックスラッシュと改行があります。アセットパイプラインで問題が発生する場合は削除してください。)
これが JSFiddle です
SelectBoxIt( http://gregfranko.com/jquery.selectBoxIt.js/ )と呼ばれるBootstrapでニースを再生しているように見える滑らかなjQueryプラグインがあります。私が気に入っているのは、一貫したスタイリングを維持しながら、どのOSでもネイティブ選択ボックスをトリガーできることです( http://gregfranko.com/jquery.selectBoxIt.js/#TriggertheNativeSelectBox )。ああ、どうやってBootstrapがこのオプションを提供したか!
これの唯一の欠点は、ソリューションに複雑さの別のレイヤーを追加し、他のすべてのプラグインが時間の経過とともにアップグレード/パッチされるときに互換性を確保するための追加作業を追加することです。 Bootstrap 3の互換性についてもわかりません。しかし、これはブラウザーとOSの一貫した外観を確保するための優れたソリューションかもしれません。
-webkit-appearance:none
がChromeとSafariのトリックを行うと確信しています。
編集:-moz-appearance: none
はFirefoxでも同様に動作するはずです。
これは通常の動作であり、Firefoxのデフォルトの<select>
スタイルが原因です。line-height
を設定することはできません。カスタマイズした<select>
が必要な場合は、padding
で再生する必要があります。
例、Firefox 25の下での結果/ Chrome 31/IE 10:
<select>
<option>Default</option>
<option>Default</option>
<option>Default</option>
</select>
<select class="form-control">
<option>Bootstrap</option>
<option>Bootstrap</option>
<option>Bootstrap</option>
</select>
<select class="form-control custom">
<option>Custom</option>
<option>Custom</option>
<option>Custom</option>
</select>
select.custom {
padding: 0px;
}
これは簡単。これを.form-control
の中に入れるだけです:
.form-control{
-webkit-appearance:none;
-moz-appearance: none;
-ms-appearance: none;
-o-appearance: none;
appearance: none;
}
これにより、ブラウザの外観が削除され、CSSが許可されます。
プラグインを使用しています bootstrap-select for Bootstrap for dtyling select。本当にうまく機能し、興味深い追加機能がたくさんあります。確かにお勧めできます。
この特定の問題を解決する2つの潜在的な方法を見つけました。
選択済み を使用します
以下のように@-moz-document url-prefix()
を使用してMozillaブラウザをターゲットにします。
@-moz-document url-prefix() {
select {
padding: 5px;
}
}
Chosenを使用しています。見てください: http://harvesthq.github.io/chosen/
Firefox、Chrome、IE、および同じスタイルのSafariで動作します。しかし、モバイルデバイスではそうではありません。
Bootstrap 4 +を使用すると、選択入力にクラスcustom-select
を追加するだけで、ブラウザ固有のスタイルを削除し、矢印アイコンを保持できます。
ここにドキュメント: Bootstrap 4カスタムフォーム選択メニュー