選択ボックスオプションの背景色を変更する


129

私が持っているselect箱を、私は時にオプションの背景色を変更しようとしているselectボックスは、すべてのオプションをクリックし、ショーされています。

フィドルを参照

HTML:

<select>
    <option val="">Please choose</option>
    <option val="1">Option 1</option>
    <option val="2">Option 2</option>
    <option val="3">Option 3</option>
    <option val="4">Option 4</option>
</select>

CSS:

select{
    margin:40px;
    background: rgba(0,0,0,0.3);
    color:#fff;
    text-shadow:0 1px 0 rgba(0,0,0,0.4);
}

回答:


163

あなたは配置する必要があるbackground-coloroption、タグではなくselect、タグ...

select option {
    margin: 40px;
    background: rgba(0, 0, 0, 0.3);
    color: #fff;
    text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4);
}

optionタグのスタイルを設定する場合は、CSS attributeセレクターを使用します。

select option {
  margin: 40px;
  background: rgba(0, 0, 0, 0.3);
  color: #fff;
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4);
}

select option[value="1"] {
  background: rgba(100, 100, 100, 0.3);
}

select option[value="2"] {
  background: rgba(150, 150, 150, 0.3);
}

select option[value="3"] {
  background: rgba(200, 200, 200, 0.3);
}

select option[value="4"] {
  background: rgba(250, 250, 250, 0.3);
}
<select>
  <option value="">Please choose</option>
  <option value="1">Option 1</option>
  <option value="2">Option 2</option>
  <option value="3">Option 3</option>
  <option value="4">Option 4</option>
</select>


私はrgbaオプションを削除し、今は黒を使用するようです:)
ngplayground

5
:nth-child(1..n)代わりにCSS セレクタを使用できます。
サミュエルLiew

2
おそらく属性セレクターを使用すべきではありません。おそらく、n番目の子を使用するか、代わりに各オプションにクラスを指定します。
フレッド

3
Firefoxでは動作せず、Chromium(Linux Antergos)でも動作しません
albert

追加してみてください!imporant。例:background: red!important;
michal

19

検討したかどうかはわかりませんが、アプリケーションがアイテムのさまざまなグループの色分けに基づいている場合は、<optgroup>タグをクラスと組み合わせて使用して、さらに参照する必要があります。例えば:

<select>
    <optgroup label="Numbers" class="green">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </optgroup>

    <optgroup label="Letters" class="blue">
        <option value="a">A</option>
        <option value="b">B</option>
        <option value="c">C</option>
    </optgroup>
</select>

次に、ドキュメントの先頭に次のようにcssを記述します。

<style type="text/css">
    .green option{
        background-color:#0F0;
    }

    .blue option{
        background-color:#00F;
    }
</style>

16

はい、これを使用してoppisite方法でこれを設定できます。

option:not(:checked) { }

これをチェックして demo jsFiddle

HTML

<select>
    <option val="">Please choose</option>
    <option val="1">Option 1</option>
    <option val="2">Option 2</option>
    <option val="3">Option 3</option>
    <option val="4">Option 4</option>
</select>

CSS

select{
    margin:40px;
    background: rgba(0,0,0,0.3);
    color:#FFF;
    text-shadow:0 1px 0 rgba(0,0,0,0.4);
}
option:not(:checked) { 
    background-color: white; 
    color:#000;
}

@aswzenは実際にはChrome(v65)では機能しますが、Firefox Quantum(v59)では機能しません。
CPHPython 2018年

7

ここに画像の説明を入力してください

実際のオプションタグにクラスを追加してcssクラスを使用することも、回答の一部と似ていますが、実際には明記されていません。これは、現在IEで問題なく動作しています(上記のssを参照)。

<select id="reviewAction">
<option class="greenColor">Accept and Advance Status</option>
<option class="redColor">Return for Modifications</option>
</select>

CSS:

.greenColor{
    background-color: #33CC33;
}
.redColor{
    background-color: #E60000;
}

3

!importantをスタイルに追加するまで、私の選択は背景に色を付けません。

    input, select, select option{background-color:#FFE !important}

2

内で本当にスタイルを設定したい場合は、http //getbootstrap.com/2.3.2/components.html#dropdownshttps://silviomoreto.github.io/などのJavaScript / CSSベースのドロップダウンに切り替えることを検討してください。 bootstrap-select / examples /。これは、IEなどのブラウザでは、要素内のオプションのスタイル設定が許可されていないためです。Chrome / OSXにもこの問題があります-オプションをスタイルできません。

ただし、そのアプローチには警告が添付されています。これらのタイプのメニューは、ネイティブ要素が使用されないため、モバイルプラットフォームでは動作が大きく異なります。彼らはまた、デスクトップ上で迷惑な癖を持つことができます。私のアドバイスは、1)独自に作成しないこと、2)十分にテストされたライブラリを見つけることです。


1

ここで、このテーマについて私が学んだことを行います。

CSS 2仕様では、フォーム要素をユーザーに提示する方法の問題は扱われていませんでした。

ここを読む: スマッシング誌

最終的に、このトピックに関するw3cやその他の技術記事は見つかりません。特定の選択ボックスでのフォーム要素のスタイル設定は完全にはサポートされていませんが、多少の努力を払って運転できます...

HTMLフォーム要素のスタイル

カスタムウィジェットの作成

ハックで時間を無駄にしないでください。リンクを読んで、プロが仕事を成し遂げる方法を学んでください。



0

別のオプションは、JavaScriptを使用することです。

if (document.getElementById('selectID').value == '1') {
       document.getElementById('optionID').style.color = '#000';

(CSS属性セレクターほどきれいではありませんが、より強力です)


0
$htmlIngressCss='<style>';
$multiOptions = array("" => "All");
$resIn = $this->commonDB->getIngressTrunk();
while ($row = $resIn->fetch()) {
    if($row['IsActive']==0){
        $htmlIngressCss .= '.ingressClass select, option[value="'.$row['TrunkInfoID'].'"] {color:red;font-weight:bold;}';
    }
    $multiOptions[$row['TrunkInfoID']] = $row['IngressTrunkName'];
}
$htmlIngressCss.='</style>';

$htmlIngressCssあなたのhtml部分に追加してください:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.