#html #css #dom
#HTML #css #dom
Вопрос:
Я знаю, что можно указать несколько классов для элемента в HTML:
<div class='one two'>Text</div>
Похоже, что классы доступны из Javascript в виде одной строки.
Что происходит, когда классы указаны с конфликтующими свойствами? Например
div.one {
background-color: red;
color: blue;
}
div.two {
background-color: green;
}
Будет ли результат зависеть от порядка, в котором указаны классы? Например, могу ли я разумно ожидать, что приведенный выше div появится с синим текстом и зеленым фоном, потому two
что класс вычисляется вторым, перезаписывая background-color
свойство?
Комментарии:
1. Это скорее вопрос о том, какие результаты должны быть получены (стандарты wrt и т. Д.). Конечно, я мог бы протестировать его во всех 8 браузерах, которые я пытаюсь поддерживать, но эта информация может оказаться бесполезной даже через два года
2. Прочитайте: htmlhelp.com/reference/css/structure.html#cascade
3. @FlyBy — я не согласен; разве вы не видели, как быстро люди отвечают на вопросы здесь ??? 😉
4. Насколько я знаю, это зависит от порядка классов в записанном файле css. В этом случае это должен быть синий текст на зеленом фоне, независимо от того, является ли класс divs
one two
илиtwo one
. Если вы измените css и определитеdiv.two
ранееdiv.one
, вы получите синий текст на красном фоне…5. Название «каскадный» должно давать четкую подсказку — «последний» будет иметь приоритет и переопределять свойства. Все, что дочерний элемент не указывает, остается за родительским, вплоть до собственной таблицы стилей страницы и стилей браузера по умолчанию.
Ответ №1:
Читайте о специфике:
Краткий ответ: если два селектора имеют одинаковую специфику, выигрывает последний объявленный.
Ответ №2:
CSS имеет очень четко определенный порядок приоритета.
В подобных случаях, когда все остальное одинаково и приоритет одинаков, браузер должен выбрать стиль, определенный последним в таблицах стилей.
В приведенном вами примере это означало бы, что div.two
стили будут переопределяться div.one
, где одно и то же свойство определено в обоих.
Кстати, это также та же функция, которая позволяет вам определять несколько стилей с одним и тем же свойством в одном селекторе для поддержки разных функций браузера. Например, некоторые браузеры могут не поддерживать цвета rgba, поэтому вы можете сделать следующее:
.myclass {
background: rgb(200, 54, 54);
background: rgba(200, 54, 54, 0.5);
}
Все браузеры будут выбирать последнее background
объявление, которое они поддерживают, поэтому браузеры, которые поддерживают rgba
, выберут второе, в то время как браузеры, которые этого не делают, обойдутся первым.
Это также причина, по которой при использовании стилей с префиксом поставщика следует также указывать версию без префикса после версий с префиксом, чтобы, когда браузер этого поставщика начнет поддерживать версию стиля без префикса, вы могли быть уверены, что он будет использовать ее, а неверсия с префиксом (которая может не поддерживать все функции окончательной версии).
Комментарии:
1. за исключением атрибута color .
2. Итак, проблема с добавлением стилей с префиксом поставщика после заключается в том, что в браузере, который поддерживает обе версии, он будет использовать префиксный (менее «стандартный» из поддерживаемых версий)? Я не уверен, почему это само по себе может оказаться проблемой.
3. @Steven Lu — префиксы поставщиков: дело в том, что версия с префиксом может не поддерживать все функции, которые есть в окончательной версии, но более поздняя версия браузера может продолжать поддерживать версию с префиксом для обратной совместимости. Но вы хотите, чтобы версия без префикса имела приоритет, если это возможно.
4. Спасибо, что включили совет об использовании порядка приоритета для обеспечения резервных возможностей в случае неподдерживаемых функций.
Ответ №3:
Если селекторы имеют одинаковый уровень приоритета (как здесь), приоритет имеет то, что указано позже. В этом случае фон должен быть зеленым, а цвет шрифта — синим.
Из спецификации CSS:
Наконец, сортировка по указанному порядку: если два объявления имеют одинаковый вес, происхождение и специфику, последнее указанное выигрывает. Объявления в импортированных таблицах стилей считаются предшествующими любым объявлениям в самой таблице стилей.
Ответ №4:
То, что вы используете для их оформления, называется «каскадными таблицами стилей». Каскадная часть означает, что это похоже на водопад, и будущие правила основаны на (или перезаписывают) предыдущие. Таким образом, второе правило перезапишет свойство background-color, но оно все равно сохранит цвет шрифта.
(однако будьте осторожны с приоритетом. правило, исходящее из идентификатора, имеет более высокий приоритет по сравнению с правилом, исходящим из класса, независимо от того, где они размещены.)
Ответ №5:
http://jsfiddle.net/mrtsherman/2NpXS/
Зависит от порядка таблицы стилей. Более поздние объявления стиля имеют приоритет. Вы можете инвертировать две строки css, чтобы увидеть.
Ответ №6:
Результат зависит от порядка, в котором указаны классы.
Вот хороший обзор порядка, в котором выполняются правила CSS: http://htmlhelp.com/reference/css/structure.html