Как изменить вид тега <optgroup> через стили?



Средняя сложность

Тема: 
Internet Explorer Chrome Opera Safari Firefox Android iOS
5.0+ 1.0+ 5.0+ 1.0+ 1.0+ 1.0+ 1.0+

Задача

Изменить цвет текста и фона в группированном списке.

Решение

Тег <optgroup> используется для создания и выделения группы в списке, созданным через тег <select>. Особенностью тега <optgroup> является то, что его нельзя выделить как обычный элемент списка, а все элементы, входящие в этот контейнер, смещаются вправо от своего исходного положения (рис. 1).

Вид списка в браузере Safari

Рис. 1. Вид списка в браузере Safari

К селектору OPTGROUP допускается применять только цвет текста (свойство color) и фона (background). При этом в браузерах имеются небольшие различия. Так, в Опере стиль применяется ко всей группе целиком, включая ее заголовок, в остальных браузерах стиль меняет только заголовок группы. Чтобы создать однотипный вид в браузерах и выделить один лишь заголовок, следует дополнительно задать стиль для селектора OPTION, входящего в группу (пример 1).

Пример 1. Изменение цвета текста и фона группы

HTML5CSS 2.1IECrOpSaFx

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Группирование элементов списка</title>
  <style>
   OPTGROUP.color {
    background: #fc0; /* Цвет фона */
    color: red; /* Цвет текста */
   }
   OPTGROUP.hue {
    background: #f0f0f0; /* Цвет фона */
    color: #000; /* Цвет текста */
   }
   OPTION {
    color:  #000; /* Цвет текста */
    background: #fff; /* Цвет фона */
   }
  </style>
 </head>
 <body>
  <form action="handler.php">
   <p><select name="color">
    <optgroup label="Цвет" class="color">
     <option value="c1">Апельсиновый</option>
     <option value="c2">Лимонный</option>
     <option value="c3">Персиковый</option>
    </optgroup>
     <optgroup label="Тон" class="hue">
     <option value="s1">Светлый</option>
     <option value="s2">Нормальный</option>
     <option value="s3">Темный</option>
    </optgroup>
   </select></p>
   <p><input type="submit" value="Отправить" /></p>
  </form>
 </body>
</html>

Результат данного примера показан на рис. 2.

Вид списка, оформленного с помощью стилей

Рис. 2. Вид списка, оформленного с помощью стилей

В примере в списке имеется две группы с именами классов color и hue, для них устанавливается различный цвет текста и фона. Чтобы цвета элементов списка остались прежними, для селектора OPTION дополнительно вводятся свойства color и background.

HTML по теме

Не выкладывайте свой код напрямую в комментариях, он отображается некорректно. Воспользуйтесь сервисом cssdeck.com или jsfiddle.net, сохраните код и в комментариях дайте на него ссылку. Так и результат сразу увидят.