Могу ли я переопределить поведение #id ul li с определением класса

У меня есть область, идентифицируемая #id, и есть CSS:

#id ul li {
    margin:0;
}

Могу ли я, для конкретного UL в этой области, переопределить настройку маржи? Я понимаю, что #id создает очень высокий приоритет при оценке форматирования.

Я пробовал:

.myclass ul li {
    margin-left: 20px;
}

и

#id ul.myclass {

а также

#id li.myclass {

Возможно ли это?

Ответы

Ответ 1

Я согласен с SWilk, избегаю !important, если возможно (и это возможно здесь). Некоторые другие решения, которые SWilk не предлагал, это:

#id ul.myclass li {

или...

#id ul li.myclass {

Ключ увеличивает специфичность селектора, что и выше, и решения SWilk. Причина, по которой ваши оригинальные решения не работали, заключается в том, что вы не включили другой тег (ul или li), а также #id с добавлением .myclass.

Добавлено после вашего комментария, который показал структуру:

Если ваш html - это (как вы указали в своем комментарии):

<div id="ja-col2">
  <div>.... 
    <ul class="latestnews">
      <li class="latestnews">

И ваш текущий css (как указано в другом комментарии):

#ja-col1 ul li, 
  #ja-col2 ul li { 
    margin:0; padding-left:15px; 
  } 
#ja-col2 .latestnews ul li, /*does not exist*/
  .latestnews #ja-col2 ul li, /*does not exist*/
  .latestnews ul li, /*does not exist*/
  ul.latestnews li.latestnews { 
     list-style:disc outside url("../images/bullet.gif"); 
     margin-left:15px; padding-left:15px; 
  } 
ul li { line-height:180%; margin-left:30px; }

Причина, по которой вы не видите никаких изменений, состоит в том, что три ваших пути выбора не существуют в вашей структуре html, а та, которая выигрывает по специфике, является самой первой группой. Вам нужно:

#ja-col2 ul.latestnews li

Чтобы переопределить #ja-col2 ul li.

Ответ 2

.myclass ul li {
    margin-left: 20px !important;
}

Должен сделать трюк:)

Ответ 3

Избегайте использования! important. Это трудно отладить и очень вероятно, что он будет мешать другим селекторам. Особенно, если вы попытаетесь изменить css через несколько месяцев, когда вы забудете, в каком-то месте была важная статья.

Вам нужно поставить более конкретный селектор, чем предыдущий. Просто используйте классы и идентификаторы в одном селекторе.

Попробуйте использовать

#id .myclass ul li {
    margin-left: 20px;
}

или

.myclass #id  ul li {
    margin-left: 20px;
}

в зависимости от того, где элемент с классом "myclass" находится в дереве DOM - если он является родителем элемента #id, используйте первый пример, иначе второй. Если вы хотите быть независимым от элемента #id, попробуйте использовать:

#id .myclass ul li,
.myclass #id ul li,
.myclass ul li {
    margin-left: 20px;
}

Это будет работать для всех li внутри ul внутри элемента .myclass, и не имеет значения, есть ли какой-нибудь элемент #id в дереве.

С уважением, SWilk

Ответ 4

http://www.w3.org/TR/WCAG10-CSS-TECHS/#user-override

Чтобы гарантировать, что пользователи могут управлять стилями, CSS2 изменяет семантику оператора "! important", определенного в CSS1. В CSS1 авторы всегда высказывали свое мнение о стилях. В CSS2, если таблица стиля пользователя содержит "! Important", она имеет приоритет над любым применимым правилом в листе стилей автора. Это важная функция для пользователей, которые требуют или должны избегать определенных комбинаций цветов или контрастов, пользователей, которым требуются большие шрифты и т.д. Например, следующее правило определяет большой размер шрифта для текста абзаца и отменяет правило автора равного веса:

P { font-size: 24pt ! important }