Содержание
Приоритеты стилей CSS.
Приоритет от способа подключения стилей CSS.
На практике, когда вы будете работать с реальными веб-страницами, очень часто возникает ситуация, что одному и тому же элементу на веб-странице может быть присвоен один и тот же стиль с разными значениями, но из разных источников.
Какой из этих стилей будет приоритетнее для браузера? Какой он отобразит в итоге?
В этой серии видеоуроков мы с вами попытаемся разобраться с этими вопросами.
Первый пример, как браузер определяет приоритетные стили — это в зависимости от того способа подключения стилей CSS, которые вы будете использовать.
Давайте рассмотрим такую ситуацию. У нас есть элемент абзаца. Давайте сейчас применим к этому абзацу разные стили CSS, но из разных источников и посмотрим, какой стиль в итоге будет применен для элемента.
Файл index.html
<style> .red { color:blue; } </style> ... <p>Абзац</p>
Файл style.css
<style> .red { color:red; } </style>
В этом примере у нас есть 3 источника, в которых задается значение цвета текста для элемента абзаца с атрибутом:
1 — атрибут style
2 — внутри элемента style
3 — внутри файла style.css
Самое главное, значение цвета текста, в каждом из этих источников противоречит друг другу.
Какое значение стиля CSS в итоге будет применено к элементу? Каким цветом в итоге будет отображаться наш абзац? Зеленым, синим или красным?
Если вы откроете эту веб-страницу в браузере, вы увидите, что абзац отобразиться зеленым цветом текста.
Т.е. самым приоритетным с точки зрения подключения стилей CSS будет являться внутренний стиль, который применяется с помощью атрибута style.
Если удалить этот стиль, то более приоритетным становится стиль внутри элемента style. Это является вторым по приоритету способом применения стилей CSS.
Последним по приоритету применения стилей CSS будут являться стили внутри файла style.css.
Смысл здесь в том, что стили CSS, которые находятся ближе всего к элементу и будут являться наиболее приоритетными.
Приоритет от места нахождения в коде.
Давайте рассмотрим еще один случай «конфликта» стилей CSS (когда они противоречат друг другу). Это тот случай, когда в пределах одного источника подключения файлов стилей CSS, например мы подключаем стили из файла style.css и в этом файле произошел конфликт стилей CSS: стили накладываются друг на друга.
Предположим, что файл style.css длинный и в нем есть селектор .red, но, который имеет свойства и значения, которые противоречат друг другу.
Например,
.red { color:red; } … .red { color:blue; }
Т.е. один и тот же селектор, одно и то же свойство color, но имеет разные значения. Какое значение в итоге будет применено к выбранному абзацу? Он станет синим или он станет красным?
Если проверить это на практике, то мы убедимся, что абзац становится синим цветом.
Таким образом, если у вас в пределах одного источника подключения стилей CSS есть один и тот же селектор и какие-то свойства этого селектора противоречат друг другу, то применяться в итоге будет тот стиль, который идет ниже по коду.
Это можно объяснить тем, что браузер выполняет код сверху вниз и сначала сделает элемент красным цветом и потом сделает его синим. В итоге в браузере отобразиться цвет текста, который будет синим.
Имейте это правило применения приоритетов стилей CSS в виду, т.к. часто приходится с этим сталкиваться, особенно в больших проектах.
Каскадирование | htmlbook.ru
Аббревиатура CSS расшифровывается как Cascading Style Sheets (каскадные таблицы стилей), где одним из ключевых слов выступает «каскад». Под каскадом в данном случае понимается одновременное применение разных стилевых правил к элементам документа — с помощью подключения нескольких стилевых файлов, наследования свойств и других методов. Чтобы в подобной ситуации браузер понимал, какое в итоге правило применять к элементу, и не возникало конфликтов в поведении разных браузеров, введены некоторые приоритеты.
Ниже приведены приоритеты браузеров, которыми они руководствуются при обработке стилевых правил. Чем выше в списке находится пункт, тем ниже его приоритет, и наоборот.
- Стиль браузера.
- Стиль автора.
- Стиль пользователя.
- Стиль автора с добавлением !important.
- Стиль пользователя с добавлением !important.
Самым низким приоритетом обладает стиль браузера — оформление, которое по умолчанию применяется к элементам веб-страницы браузером. Это оформление можно увидеть в случае «голого» HTML, когда к документу не добавляется никаких стилей.
Как задавать пользовательский стиль рассказывалось в главе 1 (см. рис. 1.3 и 1.4).
!important
Ключевое слово !important играет роль в том случае, когда пользователи подключают свою собственную таблицу стилей. Если возникает противоречие, когда стиль автора страницы и пользователя для одного и того же элемента не совпадает, то !important позволяет повысить приоритет стиля или его важность, иными словами.
При использовании пользовательской таблицы стилей или одновременном применении разного стиля автора и пользователя к одному и тому же селектору, браузер руководствуется следующим алгоритмом.
- !important добавлен в авторский стиль — будет применяться стиль автора.
- !important добавлен в пользовательский стиль — будет применяться стиль пользователя.
- !important нет как в авторском стиле, так и стиле пользователя — будет применяться стиль пользователя.
- !important содержится в авторском стиле и стиле пользователя — будет применяться стиль пользователя.
Синтаксис применения !important следующий.
Свойство: значение !important
Вначале пишется желаемое стилевое свойство, затем через двоеточие его значение и в конце после пробела указывается ключевое слово !important.
Повышение важности требуется не только для регулирования приоритета между авторской и пользовательской таблицей стилей, но и для повышения специфичности определенного селектора.
Специфичность
Если к одному элементу одновременно применяются противоречивые стилевые правила, то более высокий приоритет имеет правило, у которого значение специфичности селектора больше. Специфичность это некоторая условная величина, вычисляемая следующим образом. За каждый идентификатор (в дальнейшем будем обозначать их количество через a) начисляется 100, за каждый класс и псевдокласс (b) начисляется 10, за каждый селектор тега и псевдоэлемент (c) начисляется 1. Складывая указанные значения в определённом порядке, получим значение специфичности для данного селектора.
* {} /* a=0 b=0 c=0 -> специфичность = 0 */
li {} /* a=0 b=0 c=1 -> специфичность = 1 */
li:first-line {} /* a=0 b=0 c=2 -> специфичность = 2 */
ul li {} /* a=0 b=0 c=2 -> специфичность = 2 */
ul ol+li {} /* a=0 b=0 c=3 -> специфичность = 3 */
ul li.red {} /* a=0 b=1 c=2 -> специфичность = 12 */
li.red.level {} /* a=0 b=2 c=1 -> специфичность = 21 */
#t34 {} /* a=1 b=0 c=0 -> специфичность = 100 */
#content #wrap {} /* a=2 b=0 c=0 -> специфичность = 200 */
Встроенный стиль, добавляемый к тегу через атрибут style, имеет специфичность 1000, поэтому всегда перекрывает связанные и глобальные стили. Однако добавление !important перекрывает в том числе и встроенные стили.
Если два селектора имеют одинаковую специфичность, то применяться будет тот стиль, что указан в коде ниже.
В примере 19.1 показано, как влияет специфичность на стиль элементов списка.
Пример 19.1. Цвет списка
HTML5CSS 2.1IECrOpSaFx
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Список</title>
<style>
#menu ul li {
color: green;
}
.two {
color: red;
}
</style>
</head>
<body>
<div>
<ul>
<li>Первый</li>
<li>Второй</li>
<li>Третий</li>
</ul>
</div>
</body>
</html>
В данном примере цвет текста списка задан зелёным, а второй пункт списка с помощью класса two выделен красным цветом. Вычисляем специфичность селектора #menu ul li — один идентификатор (100) и два тега (2) в сумме дают значение 102, а селектор .two будет иметь значение специфичности 10, что явно меньше. Поэтому текст окрашиваться красным цветом не будет. Чтобы исправить ситуацию, необходимо либо понизить специфичность первого селектора, либо повысить специфичность второго (пример 19.2).
Пример 19.2. Изменение специфичности
/* Понижаем специфичность первого селектора */
ul li {...} /* Убираем идентификатор */
.two {...}
/* Повышаем специфичность второго селектора */
#menu ul li {...}
#menu .two {...} /* Добавляем идентификатор */
#menu ul li {...}
.two { color: red !important; } /* Добавляем !important */
Добавление идентификатора используется не только для изменения специфичности селектора, но и для применения стиля только к указанному списку. Поэтому понижение специфичности за счёт убирания идентификатора применяется редко, в основном, повышается специфичность нужного селектора.
Вопросы для проверки
1. Какая специфичность будет у селектора table.forum tr:hover p?
- 14
- 22
- 23
- 32
- 41
2. Какая специфичность будет у селектора #catalog .col3 .height div?
- 301
- 203
- 121
- 40
- 31
Ответы
1. 23
2. 121
Документ не найден | htmlbook.ru
Мы искали, искали файл, который вы указали, но так и не нашли. Это может быть в одном из двух случаев:
- Вы сделали что-то неправильно.
- Мы сделали что-то неправильно.
Если не знаете, что делать, попробуйте перейти на главную страницу сайта или воспользоваться Помощью.
Чтобы в следующий раз не попадать в подобную ситуацию, пожалуйста, прослушайте краткую лекцию, в которой говорится, как и почему появляется страница с ошибкой под кодовым названием 404.
Как и почему появляется страница с ошибкой под кодовым названием 404
Вы, конечно, часто задавались вопросом, почему при наборе адреса страницы или при нажатии на некоторую ссылку, появляется совершенно не то, что ожидается, а загадочная и непонятная страница, содержащую информацию, абсолютно нам не нужную. Мало того, что мы получаем разочарование, поскольку вместо желаемого нам подсовывают «пустышку», так еще эту страницу обычно завешивают баннерами, словно ее только все и посещают.
Итак, страница с 404 ошибкой возникает в результате следующих ситуаций. И раз вы читаете данный текст, значит, находитесь в одной из них.
1. Адрес страницы набран с ошибкой
Ну, ошиблись, с кем не бывает. Посмотрите внимательно и наберите адрес еще раз. Если вы точно уверены, что набрали все правильно, переходим к следующему пункту.
2. Страница перемещена или удалена администратором сайта
Была страница, да сплыла. Может убрали ее, может переименовали, а может переместили, а может… Да все что угодно может. Потому что администратор всё, что захочет на сайте может делать. На то он и администратор! В этом случае остается только поймать его в темном углу и сказать вежливо: «Как же так! Куда страницу дел, спрашиваю в последний раз, страницу, раз твою два так, куда дел? А ну верни на место!». После чего, любой здравомыслящий человек, понимая глубину своего заблуждения и полной профнепригодности, делает перенаправление с адреса старой страницы на адрес новой. И мы довольные, можем снова набирать привычный адрес, уже не волнуясь о том, правильный он или нет.
3. Разработчик неправильно указал адрес ссылки
И снова история повторяется с темным углом. Только на этот раз ловим разработчика, который верстал сайт и делал на нем ссылки. И опять вежливым тоном, поигрывая холодным, острым предметом возле его мягких частей тела, просим сделать все правильно. Устоять после такой невинной просьбы просто невозможно.
После прочитанного, возможно, у вас зародилась мысль, что на данной странице вы оказались исключительно по вине автора данного сайта. Смею вас уверить, что это не так. Почитайте первый пункт, там все написано.
Приоритет в CSS | Учебные курсы
Элемент HTML может быть целью нескольких правил CSS. Давайте воспользуемся простым абзацем в качестве примера:
<p>
MarkSheet — это бесплатное руководство по HTML и CSS.
</p>
Мы можем изменить этот абзац просто используя имя тега:
p { color: blue; }
Или же можем воспользоваться именем класса:
.message { color: green; }
Или можем использовать идентификатор:
#introduction { color: red; }
Поскольку браузер может выбрать только один цвет и применить его к этому абзацу, то он должен решить, какое правило CSS имеет приоритет над другими. Это называется приоритетом в CSS (или специфичностью).
В нашем примере абзац будет красным, потому что идентификатор более специфичен и, таким образом, более важен, чем другие селекторы.
Порядок правил CSS
Если в вашем CSS есть одинаковые селекторы, то последний из них будет иметь приоритет.
p { color: green; }
p { color: red; }
/* Абзац будет красным */
Вычисление 100
Есть один быстрый способ выяснить, насколько правило CSS «сильное», путём вычисления специфичности селекторов:
- идентификаторы стоят 100;
- классы стоят 10;
- селекторы тега стоят 1.
Селектор с наивысшим «счётом» будет преобладать, независимо от порядка, в котором появляются правила CSS.
CSS
#introduction { color: red; }
.message { color: green; }
p { color: blue; }
HTML
<p>
MarkSheet — это бесплатное руководство по HTML и CSS.
</p>
Правило #introduction { color: red; } является более специфичным, чем другие, потому что идентификаторы должны быть уникальными по всей веб-странице, таким образом, может быть только один целевой элемент.
.message { color: green; } будет нацелен на любой HTML-элемент с атрибутом и, следовательно, менее специфичен. То же самое относится и к p { color: blue; }, который может предназначаться для любого абзаца.
Как избежать конфликтов
Во время написания вашего CSS могут легко возникнуть противоречивые правила, в которых одно и то же свойство применяется несколько раз.
Чтобы избежать этого:
- применяйте только классы: используйте .introduction вместо #introduction, даже если этот элемент появляется на вашей веб-странице только один раз;
- избегайте применять несколько классов к одному элементу HTML: пишите не <p>, а <p>, который является семантически более описательным;
- не используйте встроенные стили, такие как <div>.
Приоритеты в Css и их повышение за счет Important, комбинация и группировка селекторов, пользовательские и авторские стили
Обновлено 7 января 2021 Просмотров: 290677 Автор: Дмитрий Петров
- Комбинации и группировка селекторов в CSS
- Как и для чего группируют селекторы в CSS коде
- Приоритеты Css свойств (с important и без него)
- Как повышают приоритеты Css свойств в авторских стилях
Здравствуйте, уважаемые читатели блога KtoNaNovenkogo.ru. Сегодня я предлагаю продолжить разговор про селекторы в Css, который мы начали еще в приведенной статьей. Еще раньше мы с вами познакомились с тем, что такое таблицы каскадных стилей, узнали, что означают пиксели или EM в размерах принятых в Css и многое другое.
Все материалы по таблицам каскадных стилей, которые уже были опубликованы на этом блоге, вы сможете найти в Справочнике. Сегодня же мы поговорим сначала про то, как можно комбинировать и группировать селекторы, а затем подробно рассмотрим приоритеты (что это?) правил, которые применяются для одного и того же элемента в Html коде (Important, подсчет селекторов и запись правил в атрибуте style).
Комбинации и группировка селекторов в CSS
Итак, в предыдущих статьях мы успели рассмотреть 7 типов:
- Селекторы тега, класса, Id, универсальный и атрибута
- Селекторы псевдоклассов и псевдоэлементов
Из этих семи возможных видов в языке CSS можно составлять комбинации. Все комбинации, которые мы будем составлять, имеют непосредственное отношение к иерархии элементов Html кода (предки — потомки, родители — дети, братья — сестры).
Первый вид комбинации называется контекстный селектор. Он учитывает взаимоотношение элементов Html кода по принципу «Предок — Потомок»:
Отдельные селекторы в комбинации записываются через пробел, а читать ее нужно справа налево. Т.о. правила CSS будут применяться только к последнему этой комбинации (самому правому), а все, что стоит перед ним, лишь позволяет задать более точное применение (прицеливание) для наших правил (акцентировать).
В первом примере говорится, что все элементы B (выделение жирным), у которых в предках есть элементы Div, будут окрашены в зеленый цвет.
В приведенном коде только подчеркнутый фрагмент будет окрашен в зеленый цвет, т.к. в числе его предков имеется Div, а второй фрагмент кода, выделенный тегами B, останется того цвета, который выбран для него по умолчанию, ибо в числе его предков контейнера Div уже нет (только P и Body):
Такие комбинации работают в любых браузерах.
Следующим типом комбинаций будет дочерний селектор, который строится на принципах взаимоотношений элементов кода по типу «Родитель — Ребенок»:
Записываются они с разделяющим знаком больше (>):
Данная запись будет трактоваться браузером так: для абзацев (Html тег P), «родителем» (ближайшим предком) которых является контейнер Div, будет использоваться выделение красным цветом.
В приведенном примере только обведенные абзацы будут окрашены в красный цвет, ибо они заключены непосредственно в контейнер Div, который для них является родителем (ближайшим предком). Если видоизменить приведенный пример дочернего селектора на такой:
body > p {color:red}
То красным уже будет выделен только последний абзац, т.к. его родителем является тег Body, а два первых параграфа останутся того цвета, который был предусмотрен для них по умолчанию (Body для них предок, но не родитель, которым является Div). Дочерние селекторы не работают в браузере Ie 6.
Как и для чего группируют селекторы в CSS коде
Последняя комбинация называется соседние селекторы и отвечает принципам отношений между элементами Html кода по типу «Сестры — Братья». В качестве разделителя у них может использоваться либо «+», либо «~»:
Данная запись означает, что содержимое элемента I (выделение курсивом) будет окрашено в красный цвет только тогда, если его ближайшим соседом слева (сверху по коду) является элемент B (выделение жирным). Например, данное условие будет соблюдено в этом примере:
Если записать соседний селектор в Css коде в таком виде:
h2 ~ p {color:red}
То это будет означать, что все параграфы (P), у которых выше по коду расположен соседний элемент h2 (заголовок), будут окрашены в красный цвет. Имеются в виду именно соседние элементы (отношения вида «Сестры — Братья»). На приведенном ниже примере заданному селектору будут удовлетворять обведенные абзацы.
Комбинации соседних селекторов в браузере Ie 6 тоже, к сожалению, не поддерживаются. В Ie 6 поддерживается только первый вид комбинации, а в Ie 7 и выше поддерживаются все остальные. В остальных браузерах никаких проблем возникать не должно.
Селекторы в Css можно еще и группировать. Например, если у каких-то из них используется одно или несколько одинаковых правил, то их можно объединить в группу для уменьшения объема Css кода.
В приведенном на скриншоте примере, Css свойство «background:yellow» повторяется для каждого селектора заголовка (h2-3), что может вызвать сложности (многократная работа) при желании поменять значение этого свойства. Поэтому второй вариант сгруппированной записи выглядит немного предпочтительнее.
Обратите внимание, что при группировке селекторы пишутся через запятую. Если одинаковых правил будет больше, то и экономия кода будет более ощутимой. А те правила, которые были уникальными, нужно по-прежнему записывать индивидуально.
Приоритеты Css свойств (с important и без него)
Теперь давайте подумаем, а какое стилевое оформление будет использовать браузер, если никаких стилей для данного элемента Html кода не задано? А для этого существует соответствующая спецификация валидатора WC3, где все это описано.
Для этого на странице со спецификацией CSS нужно прокрутить текст до конца и перейти по ссылке «Default style sheet for HTML 4»:
Как вы можете видеть, сейчас произошло уже окончательное разделение Html и Css. Т.е. даже для чистого ХТМЛ кода браузер все равно будет использовать дефолтные свойства таблиц стилей. Так вот свойства, принятые по умолчанию, имеют самый низший приоритет.
Более высокий приоритет имеют свойства, которые назначит пользователь в настройках своего браузера. Эти стили будут применены к любым документам, которые он просматривает в этом обозревателе.
Правда не у всех браузеров есть такая возможность, но по крайней мер, в Ie и Опере она имеется. Т.е. при желании пользователь в качестве источника стилевой разметки сможет подключить свой собственный файл CSS.
Например, в Ie для этого нужно выбрать из верхнего правого меню «Сервис» — «Свойства обозревателя», а затем на первой вкладке «Общие» щелкнуть по нижней кнопке «Оформление». В открывшемся окне вам нужно поставить галочку в поле «Оформлять, используя пользовательский стиль», и с помощью кнопки «Обзор» найти на своем компьютере нужный вам файл стилевой разметки CSS:
Т.е. у пользователя есть возможность заставить любой открываемый в браузере сайт выглядеть в соответствии с его требованиями, описанными в файле CSS. Это называется «пользовательские стили» и они имеют приоритет выше, чем стили, которые определены в спецификации по умолчанию. Но еще больший приоритет будут иметь так называемые авторские стили.
Под авторскими стилями имеются в виду свойства, которые подключаются к Html документу любым из трех основных способов (тег или атрибут Style в Css, а также внешний файл с таблицами стилей).
Т.е., если я (разработчик сайта) захотел использовать в оформлении какого-либо элемента Html кода стили отличные от дефолтных (помните, они в спецификации описаны), то пользователь своим собственным файлом Css перебить мое оформление не сможет.
Пользователь будет вынужден смириться? Нет. Есть у него возможность повысить приоритет своих свойств CSS с помощью добавления Important в конце каждого из них. Пишется это слово через пробельный символ и перед ним ставится восклицательный знак:
p {color:red !important;}
Если у пользователя в его собственном файле стилей, который он подключил к браузеру, будет прописано это же свойство с Important, то все абзацы он будет видеть в красном цвете. Но ведь и автор (разработчик) сайта мог использовать Important для этого свойства. Кто же тогда победит и чей приоритет окажется выше?
Решили, что пользовательские стили с Important будут иметь по-любому более высокий приоритет, чем авторские стили, что с Important, что без него.
Давайте обобщим в виде списка всю изложенную информацию по поводу приоритетов стилевых свойств. Приоритет будет убывать сверху вниз:
- Пользовательские с Important
- Авторские с Important
- Авторские
- Пользовательские
- Стили, принятые для Html элементов в спецификации по умолчанию (когда ни автор, ни пользователь ничего другого не задали)
Т.е. без Important авторские стили важнее, а с них уже пользовательские стили самые важные и приоритетные. Ну, а теперь давайте разбираться именно с авторскими таблицами, ибо про то, что делает пользователь, нам не ведомо и покрыто мраком.
Как повышают приоритеты Css свойств в авторских стилях
Приоритет авторских свойств тоже должен подчиняться определенным правилам, которые позволяли бы разрулить ситуации, когда для одного и того же элемента было бы прописано несколько взаимоисключающих правил.
Именно сейчас мы с вами и переходим к вопросу каскадности таблиц стилей CSS. Давайте рассмотрим это на примере, чтобы было нагляднее. Допустим, что у нас имеется фрагмент кода со следующими Html элементами (параграф внутри контейнера Div):
<div> <p>Содержимое контейнера </p> </div>
Давайте сначала пропишем такие свойства:
p {color:red} .sbox {background:#f0f0f0}
В результате будет применено и первое из них к параграфу (ибо он образован тегом P), и свойство, задающее серый фон для элемента с классом «sbox», который опять же имеется у этого параграфа:
А теперь давайте добавим ко второму селектору (класса) еще одно свойство, которое будет конфликтовать с первой строчкой (в них обоих задается цвет для текста через color, но значения при этом используются разные):
p {color:red} .sbox {background:#f0f0f0;color:blue}
В результате цвет текста параграфа станет синим вместо красного.
Почему? Потому что именно таким способом разрешается конфликт, когда один и тот же элемент Html кода получает сразу несколько одинаковых правил, но с разными значениями и из разных мест Css кода. Для того, чтобы определить, приоритет какого правила выше, нужно считать его селекторы.
Кроме этого сами селекторы имеют градацию по приоритетам. Самый высокий приоритет у ID. В этом примере цвет текста будет синим именно потому, что приоритет Id (#out) будет выше, чем у селектора тега (p):
p {color:red} #out {color:blue}
Дальше по лесенке приоритетов, направленной вниз, следуют селекторы классов, псевдоклассов и атрибутов. В следующем примере опять проиграет тег (p) и цвет текста абзаца будет синим, ибо тягается он с селектором более высокого приоритета (класса):
p {color:red} .sbox {color:blue}
Ну, и самым низким приоритетом (не считая универсальный *, обладающего нижайшим весом и не вносящего никаких изменений в подобные бодания) обладают селекторы тегов и псевдоэлементов.
Но опять же нужно считать количество селекторов одного и того же уровня приоритета, и чем их будет больше, тем приоритетнее будет данное свойство. Например:
div p {color:red} p {color:blue}
Какого цвета в результате получится текст параграфа? Правильно, именно красного, т.к. у этого свойства больше селекторов тегов (два против одного). О как. Т.е. сначала считаются Id. Если победитель не выявлен, то считаются классы, псевдоклассы и атрибуты. Ну, а если и там ничего не решилось или таких не было найдено, то считаются селекторы тегов и псевдоэлементов.
Но вполне возможна ситуация, когда победитель не выявится и селекторы конкурирующих классов окажутся равного приоритета в сумме. Например, для нашего многострадального параграфа заключенного в контейнер Div:
<div> <p>Содержимое контейнера </p> </div>
Вполне можно будет написать такой кусок Css кода:
div.box #out{color:red} #in p.sbox{color:blue}
И какого же цвета должен быть текст параграфа? Обе комбинации описывают именно наш параграф. Первую следует, как и водится, читать справа налево: применить данные свойства (color:red) для элемента с Id #out, который стоит где-то внутри (иметь его среди «предков») контейнера Div с классом .box (div.box). Полностью подходит к нашему абзацу.
Вторая комбинация: применить данные свойства (color:blue) для элемента параграфа с классом sbox (p.sbox), который стоит внутри любого элемента с Id #in. Опять же, она полностью описывает именно наш параграф. Давайте считать селекторы.
С ID в обоих комбинациях встречаются по одному разу, тоже самое можно сказать и о классах. Остается только посчитать селекторы тегов, но их тоже в обоих комбинациях используется одинаковое число раз (один). Засада.
Получились равные приоритеты у одного и того же свойства, имеющего разные значения (цвет текста красный, либо синий). Как же браузер будет решать эту дилемму?
Тут будет действовать правило — кто последний, тот и прав. Поэтому в моем примере цвет текста параграфа будет синим, ибо это свойство (color:blue) расположено ниже в коде. Если эти правила поменять местами:
#in p.sbox{color:blue} div.box #out{color:red}
То в результате цвет текста параграфа изменится на красный. Что и требовалось доказать. Можно дописать, например, к любой комбинации еще один селектор тега и мы перевесим чашу весов в его пользу, даже если она и не стоит ниже в коде:
body #in p.sbox{color:blue} div.box #out{color:red}
В этом случае цвет параграфа измениться на синий. Универсальный селектор «*» вообще никакого влияния на подсчет приоритетов не оказывает. Кстати, чуть выше мы рассмотрели способ повышения приоритета Css правил с помощью добавления Important. В нашем примере это может выглядеть так:
p {color:green !important} #in p.sbox{color:blue} div.box #out{color:red}
Какого цвета будет в этом случае текст параграфа? Зеленым, конечно же. И даже считать ничего не нужно, ибо добавление Important к стилевому свойству решает этот спорный вопрос однозначно, где бы оно в коде не стояло и сколько у него селекторов не было.
Но Important не является единственным способом безоговорочного повышения приоритета свойства. Второй способ повышения может заключаться в использовании стилевых свойств в атрибуте Style нужного вам Html элемента.
Т.е. прописываете внутри того же многострадального тега P атрибут Style с заданием любого цвета:
<div> <p>Содержимое контейнера </p> </div>
Ну и все. Теперь вне зависимости от того, какие свойства прописаны для этого элемента во внешнем файле таблицы стилей или же внутри тегов Style Html кода, цвет текста параграфа будет желтым.
Но вот свойства с Important он перебить не сможет. Т.е. в последнем примере, где мы добавили правило «p {color:green !important}», цвет текста по-прежнему будет зеленым, даже несмотря на.
На самом деле приоритет двух правил (с Important во внешнем файле таблицы стилей и в атрибуте style) равный, а значит нужно переходить к подсчету селекторов. А разве они могут быть внутри атрибута style?
Да никаких не может быть, а это значит, что правило, прописанное в атрибуте style, всегда проиграет правилу с Important только за счет меньшего числа селекторов (ноль будет меньше любого числа).
Ну, а что же тогда даст наибольший приоритет Css свойству? Правильно, его оно будет прописано в атрибуте style да еще с Important:
<head> <style> p {color:green !important} #in p.sbox{color:blue} div.box #out{color:red} </style> </head> <body> <div> <p>Содержимое контейнера </p> </div> </body>
В этом случае цвет текста параграфа будет желтым и перебить это уже ничем в авторских стилях будет невозможно. Мы нашли абсолютный способ задания стилей. Его сможет перебить только пользователь со своим собственным файлом стилей и прописанным для этого свойства Important.
Итак, давайте попробует составить список факторов, влияющих на приоритет свойства в авторских стилях по мере их убывания:
- Прописывание свойства в атрибуте style нужного тега вместе с Important
- Добавление Important к свойству во внешнем файле таблиц стилей или же в теге style прямо в Html коде
- Простое прописывание этого свойства в атрибуте style нужно элемента
- Использование бОльшего числа Id для данного свойства
- Использование большего числа селекторов классов, псевдоклассов или атрибутов
- Использование большего числа селекторов тегов и псевдоэлементов
- Более низкое расположение свойства в Css коде, при прочих равных условиях
На самом деле правила в атрибуте style при верстке используются крайне редко (представьте себе, как трудно будет в этом случае вносить изменения во всем коде сайта, а не в отдельном файле CSS).
Этот атрибут в основном используют, когда только нужно что-то быстро протестировать. Ну, и еще это удобно, если вы вставляете свой код в чужие Html странички, которые имеют свое стилевое оформление и которое может унаследоваться (наследование в CSS) и для ваших вставляемых элементов.
А зачем и как вставлять свой код на чужие страницы? Нам может и незачем, а Яндекс и Гугл это делают, когда размещают объявления РСЯ или рекламу Гугл Адсенса на чужих площадках (наших с вами сайтах).
Добавив во все элементы кода рекламных блоков атрибут style, с прописанными в нем свойствами и добавленным Important, можно уже не беспокоиться о том, что код объявлений будет изменен каким-либо образом (хотя объявления Яндекса все же можно менять за счет CSS и Important, видимо они не использовали этот метод).
На этом изучение селекторов можно считать законченным, в следующей статье мы уже начнем разбирать Css правила.
Удачи вам! До скорых встреч на страницах блога KtoNaNovenkogo.ru
Приоритет стилей | CSS
Говоря о каскадности, возникает вопрос: «А что произойдет, если в разных источниках будут одинаковые правила для элемента, но с разными значениями?». В таком случае есть правила, определяющие приоритеты стилей из разных источников. По степени важности список выглядит следующим образом:
- Стили в атрибуте тега
- Стили в отдельном файле
- Стили по умолчанию, которые добавляет браузер
Если в одном из источников правила дублируются, то применятся те, которые были указаны последними.
.blue {
color: blue;
}
.blue {
color: red;
}
/* В данном случае текст в блоках с классом .blue будет красным, так как будет использовано последнее указанное правило */
У селекторов также существуют приоритеты. Для определения приоритета можно использовать таблицу, где каждому селектору даётся «вес»:
- Селектор по тегу: 1
- Селектор по классу: 10
- Селектор по ID: 100
- Стиль в атрибуте тега: 1000
<style>
.blue {
color: blue;
}
#red-block {
color: red;
}
</style>
<div>Текст</div>
Какого цвета будет текст внутри блока? Воспользуемся таблицей выше, из которой следует, что селектор по классу (.blue
) имеет приоритет 10, а селектор по id (#red-block
) имеет приоритет 100. Значит, правило для id #red-block
«перебьёт» правило для класса .blue
. Помимо этого у нас есть инлайн стиль style="color: white;"
, который имеет «вес» 1000, а это значит, что он обладает наивысшим приоритетом.
Таким образом текст внутри блока будет белым.
Задание
Добавьте в редактор p
с классом border
и id no-border
. Установите следующие правила:
* Для класса border
установите сплошную рамку любого цвета толщиной 1px.
* Для id no-border
отмените рамку. Используйте значение none
у правила border-style
.
Стили запишите в теге style
.
Каскадность в CSS — Как создать сайт
Каскадность – приоритеты стилей в CSS
Добрый день друзья, в данной статье мы рассмотрим понятия каскадности в CSS, приоритетов стилей в языке.
В учебнике по CSS для начинающих, мы узнали что внедрить CSS-код в HTML-документ, можно тремя способами:
- Через тег
<link>
— внешний стиль, действует на весь сайт - Через тег
<style>
</style>
— внутренний стиль, действует на всю страницу - Через атрибут
style=" "
— встроенный стиль, действует на один тег
Все эти три способа, образуют единый каскад стилей: внешний, внутренний, встроенный. У каждого способа имеется свой приоритет.
Допустим, с помощью внешнего стиля, вы назначили абзацам сайта p
красный фон, его можно перебить внутренним стилем назначив всем абзацам одной страницы, зелёный фон, ну а внутренний стиль, можно перебить встроенным стилем, назначив выбранному абзацу синий фон.
Из этих трёх стилей, наибольший приоритет имеет встроенный стиль style=" "
Итак, на данный момент у нас имеется следующее, во внешнем стиле (CSS-файле), находится правило которое делает фон у всех абзацев сайта красным:
p { background: red; }
Во внутреннем стиле одной из страниц сайта находится правило, которое перебивает внешний стиль и делает фон у абзацев данной страницы, зелёным:
<style> p { background: green; } </style>
На этой странице, у одного абзаца есть встроенный стиль, который перебивает и внешние и внутренние стили, делая его фон синим:
<p> Абзац...</p>
Надеюсь, до этого момента всё ясно, идём дальше.
Стили браузера, автора и пользователя
Рассмотренные выше стили, называются стилями автора сайта (создателя сайта). Существуют еще два стиля — это стили браузера и стили пользователя.
Стили браузера — это стили по умолчанию, например если вы создали HTML-страницу, но еще не внедрили CSS-код, то браузер за вас назначает абзацам цвет шрифта черным, а размер 16px
.
Стили пользователя — это стили которые задает посетитель сайта в настройках своего браузера, например в них можно прописать чтобы на всех сайтах, которые вы посещаете, шрифт у абзацев был равен 22px
(это полезно делать, если у вас проблемы со зрением или на вебсайте на котором вы любите сидеть, слишком маленький шрифт).
Кстати в настройках браузера, можно задавать стили любому тегу, а не только абзацам, например можно сделать так, чтобы все ссылки на каждом сайте который вы просматриваете через свой браузер имели подчеркивание и оранжевый фон.
Теперь соберем в кучу все полученные знания на этом уроке и составим список чьи стили наиболее приоритетнее при просмотре сайта, начиная с самого маленького:
- Стили браузера — самый маленький приоритет
- Стили автора:
- Внешний стиль — файл
style.css
- Внутренний стиль — тег
<style>
- Встроенный стиль — атрибут
style=" "
- Внешний стиль — файл
- Стили пользователя — самый высокий приоритет
В основном, при создании сайтов вебмастера имеют дело с «внешним стилем», файлом style.css
Каскад в CSS — это одновременное применение разных по приоритету стилей, к HTML-элементам.
Дата публикации поста: 18 июля 2019
Дата обновления поста: 31 октября 2014
Навигация по записям
overriding — В каком порядке таблицы стилей CSS переопределяются?
Попробуем упростить правило каскадирования на примере. Правила переходят от конкретного к общему.
- Применяет правило первого идентификатора (над классом и / или элементами
вне зависимости от заказа) - Применяет классы к элементам независимо от порядка
- Если нет класса или идентификатора, применяются общие
- Применяет последний стиль в порядке (порядок объявления на основе порядка загрузки файлов) для той же группы / уровня.
Вот код css и html;
<стиль>
h3 {
цвет: темно-синий;
}
#важный{
цвет: темно-зеленый;
}
.Заголовок {
красный цвет;
}
статья {
черный цвет;
стиль шрифта: курсив;
}
aside h3 {
стиль шрифта: курсив;
цвет: темно-оранжевый;
}
article h3 {
стиль шрифта: нормальный;
цвет: фиолетовый;
}
Вот стиль css
<тело>
<раздел>
Houston Chronicle News
<статья>
Последние события в вашем городе
<сторона>
Раздел местной рекламы Хьюстона
Следующий раздел
Вот результат.Независимо от порядка файлов стилей или объявления стиля, id = "important"
применяется в конце (обратите внимание на class = "deadline"
, объявленный последним, но не вступающий в силу).
Элемент
, однако последний объявленный стиль будет иметь силу, в этом случае article h3 {..}
для третьего элемента h3.Вот результат IE11: (Недостаточно прав для публикации изображения) DarkBlue: Houston Chronicle News, DarkGreen: Последние события в вашем городе, Purple: Раздел местной рекламы Хьюстона, Черный: Следующий раздел
Проверка уровня приоритета стиля CSS
Каскадная таблица стилей (CSS) , на мой взгляд, самый простой из языков по сравнению с другими языками, связанными с Интернетом, поэтому неудивительно, что многие люди, которые только начинают учиться создавать веб-сайты, в основном учатся этот язык и сначала HTML.
В этом посте мы вернемся к основам CSS. Мы собираемся рассмотреть, как изначально применяются стили CSS, какие стили будут применяться, как одни объявления стилей перезаписывают друг друга, а другие — нет.
Рекомендуемая литература: CSS Назад к основам: пояснение терминологии
Итак, этот пост специально предназначен для новичков, которые только начинают разбираться в задачах и, вероятно, все еще делают ошибки при составлении своей первой таблицы стилей.Итак, приступим.
Стили браузера по умолчанию
Firefox, Chrome, Safari, Opera и Internet Explorer в настоящее время входят в пятерку лучших настольных браузеров на рынке. Эти браузеры и все другие браузеры следуют стандартному правилу включения встроенных стилей по умолчанию для отображения элементов HTML.
Итак, когда мы добавим несколько случайных HTML-элементов без добавления стилей, вы увидите, что они по-прежнему правильно отображаются в браузере.
Но если мы внимательно проверим эти элементы, каждый из браузеров будет иметь (немного) разные значения для своего «default» объявления, что приводит к несогласованности между браузерами, особенно в старом, таком как IE6, 7 и Firefox 3.0.
Например, как вы можете видеть из приведенного выше снимка экрана, новейший Firefox визуализировал цитату
по умолчанию с полем : 16px 40px 16px 40px
, в то время как с другой стороны Internet Explorer 7 отобразит цитату
с Поля : 0px 40px
.
Чтобы преодолеть показанные выше несоответствия, многие веб-дизайнеры и разработчики предпочитают перезаписывать все эти стили с помощью CSS Reset . Этот файл CSS обычно содержит почти все селекторы HTML Type , определяя их с одинаковыми правилами.
Доступно множество сбросов CSS, но вот три моих самых любимых:
Селекторы
Вы, вероятно, часто читали этот термин в блогах, посвященных веб-дизайну / разработке, которые вы посещали; Селекторы .
Селектор в CSS — это синтаксис, используемый для нацеливания на любые части документа HTML, к которым будут применяться стили. Мы собираемся обсудить здесь три основных селектора, поскольку они, вероятно, будут общими селекторами, используемыми на вашем первом веб-сайте.Мы расскажем о других в будущих публикациях.
Селектор типа
Как мы уже упоминали выше, селектор типа будет нацелен на любые указанные элементы HTML в документе. Например:
п { / ** декларация ** / }
будет соответствовать всем элементам p
или параграф , и его использование в конечном итоге приведет к перезаписи стилей по умолчанию, заданных в браузерах.
Селектор класса
Когда вы добавили класс или даже несколько классов к элементу, вы также можете настроить таргетинг на эти классы.Селектор класса начинается с параметра точек .
.коробка { / ** декларация ** / }
Приведенный выше фрагмент будет соответствовать всем элементам, имеющим класс блока, или мы также можем выбрать более конкретный вариант.
p.box { / ** декларация ** / }
Он будет нацелен только на элемент p
, который имеет класс box .
Когда мы используем селектор Class , все одинаковые объявления стилей как из селектора Type , так и из Default Browser будут перезаписаны.
Селектор ID
ID — очень ограничительный атрибут, у нас может быть только один id
для элемента, и он также должен быть уникальным.
Контент
В случае, если у нас есть id
в элементе, мы можем использовать селектор id для нацеливания на этот элемент; селектор id определяется параметром hash #
.
#уникальный идентификатор { / ** декларация ** / }
Поскольку ID
уникален, он имеет самый высокий уровень приоритета среди всех типов селектора.Итак, когда мы объявляем стили с помощью селектора ID , он в конечном итоге перезаписывает все то же объявление из селекторов Class , Type и стилей Default Browser .
Встраивание стилей
Мы прошли через все основные основные селекторы, и теперь мы рассмотрим, как эти стили встроены в документ HTML.
Внешние стили
Внешние стили — это стили, которые добавляются в отдельный файл, обычно в файл .css
, которые затем связываются с HTML-документом с помощью тега
для применения этих стилей.
И все стили, объявленные в файлах, будут вести себя так, как мы упоминали в разделе Селекторы выше, а именно, он будет в основном перезаписывать стиль браузера по умолчанию и перезаписывать другое объявление стиля в зависимости от уровня приоритета селекторов. .
Это наиболее рекомендуемый способ прикрепления стилей, особенно когда у вас есть тысячи строк кода CSS с множеством страниц для прикрепления.
Таким образом, стили также станут легко управляемыми, например, вы можете разделить файлы CSS на несколько файлов в зависимости от их конкретной роли, например, typography.css для управления всеми стилями, связанными с типографикой и так далее.
Внутренние стили
Внутренние стили — это стили, которые встроены непосредственно в документ HTML, обычно внутри тега
.
Но эта практика не рекомендуется, если у вас будут сотни строк стилей, так как ваша HTML-страница будет слишком длинной, и стиль будет влиять только на то, где стили встроены. Когда вы, скажем, создали десять страниц, вам нужно будет скопировать эти стили и встроить их на все страницы, а когда вам нужно изменить стили, вы должны изменить их на десять разных страниц, что, очевидно, является утомительной задачей.
Исходя из уровня приоритета, внутренний стиль выше, поэтому он перезаписывает внешние стили.
Встроенные стили
Встроенные стили — это стили, которые непосредственно встраиваются в элемент HTML.
Это абзац
В приведенном выше примере к элементу абзаца добавится поле 5px
, а также будут перезаписаны поля, объявленные для этого элемента как во внутреннем, так и во внешнем стилях.
Но не делайте этого, так как ваша разметка будет загромождена всеми этими объявлениями стилей; если у вас есть несколько встроенных стилей, вам даже станет кошмаром видеть и поддерживать все ваши html и стили.
Дополнительная литература : Три способа вставки CSS — W3CSchools.
Правило! Important
Есть некоторые обстоятельства, когда нам нужно применить определенный стиль для элемента, но тот же стиль для этого элемента также был объявлен в другом месте таблицы стилей или в документе.Например:
У нас есть следующий тег привязки со встроенными стилями
Это ссылка
И у нас также есть отдельный стиль для этого тега привязки в таблице стилей.
a { граница: 1px solid # 333; цвет фона: # 555; }
В этом примере мы можем использовать правило ! Important
, чтобы заставить браузер использовать стили в таблице стилей, а не в элементе.
a { граница: 1px solid # 333! important; цвет фона: # 555! important; }
Правило ! Important
указывает, что этот стиль является наиболее важным и должен применяться поверх других стилей, даже если он непосредственно встроен в элемент (встроенные стили) .
Дополнительная литература :! Important CSS-объявления: как и когда их использовать — Smashing Magazine.
Заключение
В этой статье мы рассмотрели всю тему.Теперь мы видим, что каждый селектор и способ встраивания стилей имеют разные уровни приоритета в механизме браузера. Как я уже упоминал ранее, эти предметы предназначены для начинающих, поэтому они определенно не являются чем-то новым для опытных веб-дизайнеров.
Но, я думаю, каждый веб-дизайнер в целом согласится с тем, что иногда необходимо возвращаться к основам, чтобы пересмотреть наши фундаментальные знания по предмету. На самом деле, мы часто упускаем из виду некоторые базовые вещи, так как нас больше впечатляют такие классные (и сумасшедшие) вещи.
Наконец, я предоставил вам демонстрацию и исходный файл для дальнейшего изучения нашего обсуждения в этой статье.
Надеюсь, вам понравится этот пост, и если вы обнаружите в нем какие-то неточности, или я пропустил некоторые важные моменты, не стесняйтесь сообщить мне в разделе комментариев ниже.
Приоритет значений CSS для HTML-документа
Ниже приведен CSS:
- body {background: # 6CC7E1}
- .textbox {высота: 100 пикселей; размер шрифта: 35 пикселей; фон: # 488921; дисплей: встроенный блок}
Выход
Примечание: Здесь обратите внимание, что свойства, определенные во внешнем CSS, переопределяют свойства, определенные во встроенном CSS, потому что он использует подход сверху вниз.
Шаг 6
Теперь я изменю селектор во внешнем CSS. Я заменю селектор класса селектором тега (div).
Выход
Примечание: здесь обратите внимание, что свойства, определенные во встроенном CSS, переопределяют свойства, определенные во внешнем CSS, потому что селектор класса имеет более высокий приоритет, чем селектор тегов, и здесь подход сверху вниз не используется.
Шаг 7
Значение CSS, указанное с пометкой «важно», имеет более высокий приоритет для документа HTML.Во внешнем CSS для свойства Height я предоставлю значение с important и inline, встроенный CSS останется прежним.
Внешний CSS
Ниже приведен внешний CSS:
- body {background: # 6CC7E1}
- div {height: 100px! Important; размер шрифта: 35 пикселей; фон: # 488921; дисплей: встроенный блок}
Выход
Примечание: Здесь обратите внимание, что значение, указанное для свойства высоты во внешнем CSS, переопределяет значения, заданные этому свойству во встроенном и встроенном CSS, потому что во внешнем CSS это значение определяется как важное значение.
Сводка
Теперь мы можем сказать, что приоритет свойства CSS в документе HTML применяется сверху вниз и слева направо.
Значения, определенные как важные, будут иметь наивысший приоритет.
Встроенный CSS имеет более высокий приоритет, чем встроенный и внешний CSS.
Итак, окончательный порядок:
Значение определено как Важное> Встроенное> Вложение идентификатора> Идентификатор> Вложение класса> Класс> Вложение тега> тег.
Не стесняйтесь оставлять свое мнение по этой теме, нажав на комментарий публикации.
Приоритеты стиля: CSS для электронных книг # 3
Итак, я рассказал о том, как вызывать стиль в HTML-коде электронной книги, и о типах правил, которые вы можете использовать.
На этот раз мы рассмотрим, какие правила имеют приоритет и над какими — и я также поделюсь некоторыми забавными примерами того, как вы можете использовать CSS, чтобы сделать вашу электронную книгу красивой.
Порядок подчинения: приоритеты правил CSS
Итак, в этом суть всех различных способов применения стиля к элементу HTML — иногда (ну, часто) правила могут перекрываться и противоречить друг другу.Допустим, у вас есть эти два правила, одно в элементе
<тело> Это контент, и его стиль определен
во внутренней таблице стилей