Ubah warna latar belakang opsi kotak pilih


129

Saya memiliki sebuah selectkotak dan saya mencoba untuk mengubah warna latar belakang dari pilihan ketika selectkotak tersebut telah diklik dan menampilkan semua pilihan.

Lihat Fiddle

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);
}

Jawaban:


163

Anda harus menempatkan background-colorpada optiontag dan bukan selecttag ...

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

Jika Anda ingin memberi gaya pada setiap optiontag .. gunakan attributepemilih css :

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>


Saya mengambil opsi rgba dan tampaknya menggunakan hitam sekarang yang akan dilakukan :)
ngplayground

5
Anda dapat menggunakan :nth-child(1..n)pemilih CSS sebagai gantinya.
Samuel Liew

2
Anda mungkin sebaiknya tidak menggunakan pemilih atribut. Anda mungkin ingin menggunakan n-th-child atau memberikan setiap opsi kelas sebagai gantinya.
Fred

4
Tidak berfungsi di Firefox, tidak juga di Chromium (Linux Antergos)
albert

Coba tambahkan !imporant. Misalnya:background: red!important;
michal

19

Saya tidak tahu apakah Anda telah mempertimbangkannya atau tidak, tetapi jika aplikasi Anda didasarkan pada pewarnaan berbagai pengelompokan item, Anda mungkin harus menggunakan <optgroup>tag yang digabungkan dengan kelas untuk referensi lebih lanjut. Sebagai contoh:

<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>

dan kemudian di bagian head dokumen Anda tulis css seperti ini:

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

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

16

Ya, Anda dapat mengatur ini dengan cara berlawanan menggunakan ini,

option:not(:checked) { }

Periksa ini 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 sebenarnya di Chrome berfungsi untuk saya (v65) tetapi tidak di Firefox Quantum (v59).
CPHPython

7

masukkan deskripsi gambar di sini

Mirip dengan beberapa jawaban, tetapi tidak benar-benar dinyatakan, adalah menambahkan kelas ke tag opsi aktual dan menggunakan kelas css ... ini saat ini berfungsi untuk saya tanpa masalah di IE (lihat ss di atas).

<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

Pilihan saya tidak akan mewarnai latar belakang sampai saya menambahkan! Important ke gayanya.

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

2

Jika Anda benar-benar ingin mengatur gaya dalam a, pertimbangkan untuk beralih ke drop-down berbasis Javascript / CSS seperti http://getbootstrap.com/2.3.2/components.html#dropdowns atau https://silviomoreto.github.io/ bootstrap-pilih / contoh / . Ini karena browser seperti IE tidak mengizinkan penataan opsi di dalam elemen . Chrome / OSX juga mengalami masalah ini - Anda tidak dapat mengatur gaya.

Namun peringatan dilampirkan pada pendekatan itu. Jenis menu ini bekerja sangat berbeda pada platform seluler karena elemen asli tidak digunakan. Mereka juga dapat memiliki kebiasaan yang mengganggu di desktop. Saran saya adalah 1) jangan menulis sendiri dan 2) temukan perpustakaan yang telah diuji dengan sangat baik.


1

Ini dia apa yang telah saya pelajari tentang subjek ini!

Spesifikasi CSS 2 tidak mengatasi masalah bagaimana elemen formulir harus disajikan kepada pengguna periode!

Baca di sini: majalah smashing

Akhirnya , Anda tidak akan pernah menemukan artikel teknis dari w3c atau lainnya yang ditujukan untuk topik ini. Elemen bentuk gaya pada kotak pilih tertentu tidak didukung sepenuhnya, namun Anda dapat berkeliling ... dengan sedikit usaha!

Styling Elemen Formulir HTML

Membangun Widget Kustom

Jangan buang waktu dengan peretasan seperti membaca tautan dan mempelajari bagaimana profesional menyelesaikan pekerjaan!



0

Pilihan lainnya adalah menggunakan Javascript:

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

(Tidak sebersih pemilih atribut CSS, tetapi lebih kuat)


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>';

tambahkan $htmlIngressCssbagian html Anda :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.