Приоритеты классов CSS - PullRequest
25 голосов
/ 13 июля 2009

У меня есть вопрос о приоритете классов CSS после сегодняшней проблемы. Ситуация выглядит следующим образом:

У меня есть неупорядоченный список, с которым связан класс. Для тегов LI также определены некоторые стили. Я хочу изменить стиль LI s после щелчка (через добавленный класс "selected"), но стили добавленного класса никогда не применяются. Это нормальное поведение или этот код должен работать?

CSS:

.dynamicList
{
    list-style: none;
}

.dynamicList li
{
    display: block;
    width: 400px;
    height: 55px;
    padding: 10px 10px 10px 10px;
    border: 1px solid #000;
    background-color: #ff0000;
}

.selectedItem
{
    background-color: #0000ff;
}

HTML:

<ul class="dynamicList">
  <li>First Item</li>
  <li class="selectedItem">Second (Selected) Item</li>
</ul>

Цвет фона элемента списка "selected" не изменяется. Это также тот случай, если я не применяю стиль к элементу LI, но создаю другой класс и применяю его ко всем элементам списка, чтобы он читался ..

<li class="listitem selectedItem">xxxx</li>

Ответы [ 4 ]

26 голосов
/ 13 июля 2009

Это звучит как проблема CSS . Попробуйте изменить свой .selectedItem набор правил на:

.dynamicList li.selectedItem {
  background-color: #0000ff;
}
17 голосов
/ 13 июля 2009

Короткий ответ: ваш стиль .selectedItem не применяется, потому что предыдущий стиль более специфичен и поэтому имеет более высокий приоритет Вот достойное краткое изложение :

Теперь давайте составим общий список внутренние приоритеты для CSS (3 имеет наивысший приоритет):

element
.class
#id

Это порядок приоритетов по умолчанию. В Помимо этого, специфичность будет также считайте, f.ex ul li переопределит ли. W3C сделал достойный стол как вы должны рассчитать внутренний вес:

LI            {...}  /* a=0 b=0 c=1 -> specificity =   1 */
UL LI         {...}  /* a=0 b=0 c=2 -> specificity =   2 */
UL OL LI      {...}  /* a=0 b=0 c=3 -> specificity =   3 */
LI.red        {...}  /* a=0 b=1 c=1 -> specificity =  11 */
UL OL LI.red  {...}  /* a=0 b=1 c=3 -> specificity =  13 */
#list         {...}  /* a=1 b=0 c=0 -> specificity = 100 */

А вот W3C спецификация .

7 голосов
/ 13 июля 2009

Измените правило selectedItem на:

.dynamicList li.selectedItem
{
    background-color: #0000ff;
}
3 голосов
/ 09 августа 2013

Небольшое дополнение, которое не упоминалось в сообщении Клетуса.
Согласно ссылке W3C наивысшим приоритетом является атрибут style, используемый в элементе / теге html.

например. если у вас есть

<a id= bar style="color: red">foo</a>

и

<style>
#bar {
    color: blue;
}
</style>

Цвет будет red, потому что встроенный стиль HTML имеет наивысший приоритет, выше #.

...