2014-09-03 4 views
2

У меня возникла странная проблема, когда правило CSS, похоже, не применяется правильно в Safari/Chrome/Firefox на Mac.Правило CSS не переопределено

Учитывая следующий HTML-код:

<table id="table" border="1"> 
    <tr> 
     <td id="cell"> 
      Hello 
     </td> 
    </tr> 
</table> 

Тогда следующий код CSS работает, как я ожидал (как в камере не имеет отступы сверху):

td { padding: 10px; } 
#cell { padding-top: 0px; } 

Но этот не:

#table td { padding: 10px; } 
#cell { padding-top: 0px; } 

(Попробуйте его в Интернете по адресу: http://jsfiddle.net/xkduyk7m/)

Я ожидал, что обе версии CSS принесут тот же эффект в этом случае, но во втором случае правило, которое добавлено позже и которое относится к конкретной ячейке, не отменяет первое правило.

Почему?

+2

Проверьте это: http://specificity.keegan.st/ – melancia

+1

Более сложные правила имеют более высокий приоритет –

+0

Чтобы исправить это, просто измените свой второй пример так: # # cell {padding -top: 0px! important; } ' –

ответ

4

Каждый селектор css имеет значение «вес». Комбинация делает ее переопределяющей, и когда они совпадают, порядок записи определит приоритет.

Вот документы W3 о том, как рассчитать преимущество: http://www.w3.org/TR/CSS2/cascade.html#specificity

+0

Спасибо за ссылку, узнали что-то новое сегодня. – Samuel

2

Правила Css не связаны между собой. Более конкретный селектор css переопределит другой менее конкретный. Место используется только в том случае, если они являются как конкретными.

В вашем случае #table td является более конкретным, чем только #cell и, следовательно, не переопределяется. Если вы используете #table #cell, он должен работать

+0

Хорошо, у меня было другое представление о «специфичности», так как в id применяется только один элемент и более специфичен, чем селектор, который выбирает несколько элементов. – Samuel

+0

Он чаще используется с классами, и я полагаю, что браузеры использовали одни и те же правила для классов и идентификаторов. И если вы замените свой пример на классы, вы можете прямо увидеть, что ячейка менее специфична, чем ячейка в таблице. Это не всегда самое логичное объяснение, которое выигрывает;) Это то, чему вы научитесь методом проб и ошибок, и хороший источник-инспектор тоже помогает! ;) –

+0

С классами это действительно имеет смысл.Также инспектор источника фактически указал мне на то, что второе правило было обнаружено, но не применено в пользу первого правила. Если бы это только скажет вам, почему еще! – Samuel

0

Ваша проблема в том, что #table тд {обивка: 10px; } выберется как #table td {padding-top: 10px; обивка-направо: 10px; обивка-дно: 10px; обивка налево: 10px; } в браузере. И этот приоритет над вашим #cell {padding-top: 0px; }. попробуйте один из парованием 2 варианта

Вариант 1

#table td { padding: 10px 10px 10px 10px; } 
#table #cell { padding: 0px 10px 10px 10px; } 

Вариант 2

#table td { padding: 10px; } 
#table #cell { padding-top: 0px !important; } 

Извините за жирный шрифт, используя переполнение стека приложение для Android и хэш делает его смелым жаль что

Смежные вопросы