Ответ 1
Это зависит от того, какой из них объявлен последним в вашей таблице стилей. Например,
.one { border: 6px dashed green }
.two { border: 6px dashed orange }
против
.two { border: 6px dashed green }
.one { border: 6px dashed orange }
Есть ли правило в CSS, которое определяет каскадный порядок, когда несколько классов определены на элементе? (class="one two"
vs class="two one"
)
Прямо сейчас, похоже, такого эффекта нет.
Пример: оба div имеют оранжевый цвет в Firefox
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<style>
.one { border: 6px dashed green }
.two { border: 6px dashed orange }
</style>
</head>
<body>
<div class="one two">
hello world
</div>
<div class="two one">
hello world
</div>
Это зависит от того, какой из них объявлен последним в вашей таблице стилей. Например,
.one { border: 6px dashed green }
.two { border: 6px dashed orange }
против
.two { border: 6px dashed green }
.one { border: 6px dashed orange }
Определенный класс последний в CSS - это то, что выигрывает в этих случаях. Порядок на элементе не имеет значения, это согласовано во всех браузерах, о которых я знаю, я попробую указать соответствующие биты spec.
Весь класс не побеждает, свойства индивидуально выигрывают, если у .one
было свойство, что .two
, вы бы не увидели это свойство на обоих этих элементах <div>
.
При использовании нескольких классов для определения таблицы стилей элементов вы можете использовать !important
для переопределения "каскадирования" таблицы стилей.
.one { border: 6px dashed green !important }
.two { border: 6px dashed orange }
Это сделает ваши divs зелеными.
Как уже отмечалось в других ответах, порядок, объявленный в атрибуте class, не имеет никакого эффекта - приоритет исходит из порядка объявлений в файле CSS.
Однако, если вы действительно хотите макетировать то, что позволяет вам "подделать" приоритет в атрибуте класса, вы можете попробовать:
.one-first { border: 6px dashed green }
.two-first { border: 6px dashed orange }
.one { border: 6px dashed green }
.two { border: 6px dashed orange }
И затем
<div class="one-first two"/>
и
<div class="two-first one"/>
Будет заказывать приоритет с последним выигрышем (в аналогичном ключе с привилегией CSS, которая наступает последним с приоритетом.)
Я думаю, ясно, что такое правило не применяется. Правило .one
имеет ту же специфику, что и правило .two
, поэтому в соответствии со стандартом CSS свойства в блоке .two
переопределяют свойства в .one
, потому что блок .two
появляется позже. Никакой ссылки не делается нигде в порядке слов в атрибуте class
.
переопределение произойдет в том порядке, в котором объявляются классы. так что всегда выигрывает
Порядок атрибута класса не имеет значения один бит. Это зависит от нескольких вещей, в вашем случае это порядок, в котором написан ваш css.
Оба стиля имеют одинаковую специфичность, поэтому стиль .two переопределяет стиль .one, потому что он меньше в теге стиля.
В случае сомнений просмотрите страницу в FireBug. Он вычеркнет переопределенные классы и покажет порядок, который они применяют на странице.
Также обратите внимание, что встроенные стили будут переопределять те, которые объявлены во внешней таблице стилей. Если вы хотите нарушить применимость каскадной цепи, вы можете использовать объявление ! Important, как в
p {margin: 10px 5px 0 10px !important}
Это приведет к тому, что объявление ! important переопределит других, независимо от их положения. Некоторые считают это плохой практикой, но это может пригодиться, если использовать разумно.