Перейти к содержимому

В чем заключается каскадность стилей в css

  • автор:

Cascade

Каскадность это алгоритм, который определяет как совмещать и сочетать значения свойств происходящих из различных источников(CSS-правила могут располагаться как в самом веб-документе, так и во внешних файлах). Данный алгоритм лежит в основе CSS, как можно понять из его названия: Cascading Style Sheets(Каскадные Таблицы Стилей). Данная статья объясняет что такое каскадность, порядок в котором определяется какие свойства будут в конечном итоге выполнены и как это затрагивает вас, веб разработчика.

What CSS entities participate in the cascade

Only CSS declarations, that is property/value pairs, participate in the cascade. That means that at-rules containing entities other than declarations, like @font-face containing descriptors don’t participate in the cascade. In these case, only the at-rule as the whole participates in the cascade; here the @font-face identified by its font-family descriptor. If several @font-face with the same descriptor are defined, only the most adequate @font-face , as a whole, is considered.

If the declarations contained in most at-rules (en-US) participate in the cascade, like declarations contained in @media , @documents , or @supports , declarations contained in @keyframes (en-US) doesn’t. Like for @font-face , only the at-rule as a whole is selected via the cascade algorithm.

Finally note that @import (en-US) and @charset (en-US) obey specific algorithms and aren’t affected by the cascade algorithm.

Origin of CSS declarations

The CSS cascade algorithm wants to select CSS declarations to set the correct value for CSS properties. CSS declarations originate from different origins:

  • The browser has a basic style sheet that gives a default style to any document. These style sheets are named user-agent stylesheets. Some browsers uses actual style sheets to perform this, while others simulate them in code, but both cases should be indetectable. Some browsers also allow users to modify the user-agent stylesheet. Although some constraints on user-agent stylesheets are set by the HTML specification, browsers still have a lot of latitude: that means that significant differences exist from one browser to another. To ease their development and lower the basic ground on which to work, Web developers often use a CSS reset style sheet, forcing common properties values to a known state.
  • The author of the Web page define styles for the document. These are the most common style sheets. Most of the time several of them are defined and they make the look and feel of the Web site — its theme.
  • The reader, the user of the browser, may have a custom style sheet to tailor its experience.

Though style sheets come from these different origins, they overlap in scope: the cascade algorithm defines how they interact.

Cascading order

The cascading algorithm determines how to find the value to apply for each property for each document element.

  1. It first filters all the rules from the different sources to keep only the rules that apply to a given element. That means rules whose selector matches the given element and which are part of an appropriate media at-rule.
  2. Then it sorts these rules according to their importance, that is, whether or not they are followed by !important , and by their origin. The cascade is in ascending order, which means that !important values from a user-defined style sheet have precedence over normal values originated from a user-agent style sheet:
    Origin Importance
    1 user agent normal
    2 user normal
    3 author normal
    4 CSS Animations see below
    5 author !important
    6 user !important
    7 user agent* !important

    * based on w3.org CSS3 specs

  3. In case of equality, the specificity (en-US) of a value is considered to choose one or the other.

CSS animations and the cascade

CSS Animations (en-US) , using @keyframes (en-US) at-rules defines animations between states. Keyframes don’t cascade, meaning that at any time CSS takes values from one single @keyframes and never mixes several of them.

When several keyframes are appropriate, it chooses the latest defined in the most important document, but never combined all together.

Also note that values within @keyframes at-rules overwrite all normal values but are overwritten by !important values.

Example

User-agent CSS:

li  margin-left: 10px; > 

Author CSS 1:

li  margin-left: 0; > /* This is a reset */ 

Author CSS 2:

@media screen  li  margin-left: 3px; > > @media print  li  margin-left: 1px; > > 

User CSS:

.specific  margin-left: 1em; > 

HTML:

ul> li class="specific">1sup>stsup>li> li>2sup>ndsup>li> ul> 

In this case, declarations inside li and .specific rules should apply. No declaration is marked as !important so the precedence order is author style sheets before user style sheets or user-agent stylesheet.

So three declarations are in competition:

margin-left: 0; 
margin-left: 3px; 
margin-left: 1px; 

The last one is ignored (on a screen), and the two first have the same selector, hence the same specificity: it is the last one that is then selected:

margin-left: 3px; 

Note that the declaration defined in the user CSS, though having a greater specifity, is not chosen as the cascade algorithm is applied before the specifity algorithm.

See also

  • The very simple introduction (en-US) of cascading in the CSS Tutorial.
  • Ключевые концепции CSS
    • Синтаксис CSS
    • @-правила
    • комментарии
    • специфичность
    • наследование
    • блочная модель
    • режимы компоновки
    • модели визуального форматирования
    • Схлопывание отступов
    • Значения
      • начальные
      • вычисленные
      • используемые
      • действительные

      Found a content problem with this page?

      • Edit the page on GitHub.
      • Report the content issue.
      • View the source on GitHub.

      This page was last modified on 7 авг. 2023 г. by MDN contributors.

      Your blueprint for a better internet.

      Каскадные таблицы стилей¶

      CSS (англ. Cascading Style Sheets — каскадные таблицы стилей) — технология описания внешнего вида документа, оформленного языком разметки.

      Преимущественно используется как средство оформления веб-страниц в формате HTML и XHTML, но может применяться с любыми видами документов в формате XML, включая SVG и XUL.

      Каскадные таблицы стилей используются создателями веб-страниц для задания цветов, шрифтов, расположения и других аспектов представления веб-документа. Основной целью разработки CSS являлось разделение содержимого (написанного на HTML или другом языке разметки) и оформления документа (написанного на CSS). Это разделение может увеличить доступность документа, предоставить большую гибкость и возможность управления его представлением, а также уменьшить сложность и повторяемость в структурном содержимом. Кроме того, CSS позволяет представлять один и тот же документ в различных стилях или методах вывода, таких как экранное представление, печать, чтение голосом (специальным голосовым браузером или программой чтения с экрана), или при выводе устройствами, использующими шрифт Брайля.

      Что такое CSS?¶

      Каскадные таблицы стилей (Cascading Style Sheets, CSS) — это стандарт, определяющий представление данных в браузере. Если HTML предоставляет информацию о структуре документа, то таблицы стилей сообщают как он должен выглядеть.

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

      Таблица стилей — это совокупность стилей, применимых к гипертекстовому документу.

      Каскадирование — это порядок применения различных стилей к веб-странице. Браузер, поддерживающий таблицы стилей, будет последовательно применять их в соответствии с приоритетом: сначала связанные, затем внедренные и, наконец, встроенные стили. Другой аспект каскадирования — наследование (inheritance), — означает, что если не указано иное, то конкретный стиль будет применен ко всем дочерним элементами гипертекстового документа. Например, если вы примените определенный цвет текста в теге , то все теги внутри этого блока будут отображаться этим же цветом.

      Использование каскадных таблиц дает возможность разделить содержимое и его представление и гибко управлять отображением гипертекстовых документов путем изменения стилей.

      Официальная информация о спецификации Cascading Style Sheets всегда доступна по адресу http://www.w3.org/Style/CSS/

      Общий синтаксис таблиц стилей¶

      Таблицы стилей строятся в соответствии с определенным порядком (синтаксисом), в противном случае они не могут нормально работать. Таблицы стилей составляются из определенных частей (рис. 1):

      ../_images/css-rule.png

      Рис. 1. Синтаксис описания стиля CSS

      • Селектор (Selector). Селектор — это элемент, к которому будут применяться назначаемые стили. Это может быть тег, класс или идентификатор объекта гипертекстового документа.
      • Свойство (Property). Свойство определяет одну или несколько характеристик селектора. Свойства задают формат отображения селектора: отступы, шрифты, выравнивание, размеры и т.д.
      • Значение (Value). Значения — это фактические числовые или строковые константы, определяющие свойство селектора.
      • Описание (Declaration). Совокупность свойств и их значений.
      • Правило (Rule). Полное описание стиля (селектор + описание).

      Таким образом, таблица стилей — это набор правил, задающих значения свойств селекторов, перечисленных в этой таблице. Общий синтаксис описания правила выглядит так:

      Регистр символов значения не имеет, порядок перечисления селекторов в таблице и свойств в определении не регламентирован.

      Правила CSS¶

      Итак, каскадная таблица стилей — это набор правил форматирования тегов HTML. Приведем несколько примеров написания таких правил:

      1. Основной текст с выравниванием по ширине, абзацный отступ 30px, гарнитура (шрифт) — Serif, кегль (размер шрифта) — 14px:
      p  text-align: justify; text-indent: 30px; font-family: Serif; font-size: 14px; > 

      Это правило будет применено ко всем тегам

      .

      1. Синий цвет для заголовков с первого по третий уровень:
      h1, h2, h3  color: blue; /* тоже самое, что и #0000FF */ > 
      1. Таблицы и изображения выводить без обрамления:
      table, img border: none;> 
      1. Ссылки в элементах списков показывать без подчеркивания:
      li a text-decoration: none;> 
      1. Внутренние отступы слева и справа для блоков (), заголовков таблиц и ячеек таблиц установить в 10px и залить фон желтым цветом:
      div, th, td  padding-left: 10px; padding-right: 10px; background-color: yellow; > 
      1. Все ссылки в документе отображать черным цветом и полужирным шрифтом, а в основном тексте и списках — обычным, а также выделять их зеленым цветом и подчеркивать только при наведении курсора (в описании правил использован псевдоэлемент a:hover).
      a color: black; font-weight: bold;> p a, li a font-weight: normal; text-decoration: none;> p a:hover, li a:hover  color: #00FF00; text-decoration: underline; > 

      Классы¶

      Стандарт CSS представляет возможности создания именованных стилей — стилевых классов. Это позволяет ответить на такой, например, вопрос: Как применить разные стили к одному и тому же селектору?

      Предположим, что в документе вам нужны два различных вида основного текста — один без отступа, второй — с левым отступом и шрифтом красного цвета. Для этого нужно создать правила для каждого из них, например так:

      p margin-left: 0;> p.warn margin-left: 40px; color: #FF00;> 

      Для применения созданного класса его имя нужно указать в атрибуте class для выбранных абзацев:

      Общий синтаксис описания класса:

      При создании класса селектор можно не указывать, тогда это правило можно применять к любому селектору, поддерживающему тот же набор свойств.

      Вот несколько примеров:

      .solid_blue color: blue;> 
      h1.bigsans font-family: Sans; font-size: 1.5em;> h1.smallserif font-family: Serif; font-size: .84em;> 

      Идентификаторы¶

      В качестве селектора может выступать идентификатор элемента гипертекста, указанный в атрибуте id. Для назначения стилей таким элементам используется синтаксис, аналогичный описанию классов, но вместо точки ставится знак # (“решетка”). Например:

      div#content position: absolute; top: 10px; left: 10%; right: 10%; border: solid 1px silver; > . div id="content">Текстdiv> 

      Следует помнить, что идентификаторы элементов должны быть уникальны в пределах документа.

      Группировка свойств¶

      Группировка (grouping) состоит в объединении значений родственных свойств. При этом таблица стилей становится более компактной, но предъявляются более жесткие требования к описанию правил. Ниже приведен пример обычного стиля, задающего отступы:

      div  margin-left: 10px; margin-top: 5px; margin-right: 40px; margin-bottom: 15px; > 

      Это же правило можно переписать с группировкой в следующем виде:

      div margin: 5px 40px 15px 10px;> /*порядок: top right bottom left*/ 

      Оба стиля будут отображаться одинаково.

      Группировка может применяться для таких свойств, как padding, font, border, background и еще некоторых (см. документацию CSS)

      Использование в веб-страницах¶

      Существует три способа применения таблицы стилей к документу HTML:

      • Встраивание (Inline). Этот метод позволяет применить стиль к заданному тегу HTML.
      • Внедрение (Embedded). Внедрение позволяет управлять стилями страницы целиком.
      • Связывание (Linked или External). Связанная таблица стилей позволяет вынести описание стилей во внешний файл, ссылаясь на который можно контролировать отображение всех страниц сайта.

      Встроенные стили¶

      Встраивание стилей предоставляет максимальный контроль над всеми элементами веб-страницы. Встроенный стиль применяется к любому тегу HTML с помощью атрибута style следующим образом:

      p style="font: 12pt Courier">Это текст с кеглем 12 точек и гарнитурой CourierP> 
      div style="font-family: Garamond; font-size: 18 pt;>" Весь текст в этом разделе имеет размер 18 точек и шрифт Garamond. span style="color:#ff3300;"> А этот фрагмент еще и выделен красным цветом.span> div> 

      Встроенные стили полезны, когда необходима тонкая настройка отображения некоторого элемента страницы или небольшой веб-страницы.

      Внедренные стили¶

      Внедренные стили используют тег , который обычно размещают в заголовке HTML-документа (. ):

      html> head> . style> правила CSS style> . head> body> . 

      Связанные таблицы стилей¶

      Связанные (linked), или внешние (external) таблицы стилей — наиболее удобное решение, когда речь идет об оформлении целого сайта. Описание правил помещается в отдельный файл (обычно, но не обязательно, с расширением .css). С помощью тега выполняется связывание этой таблицы стилей с каждой страницей, где ее необходимо применить, например так:

      link rel=stylesheet href="sample.css" type="text/css"> 

      Любая страница, содержащая такую связь, будет оформлена в соответствии со стилями, указанными в файле sample.css. Следует отметить, что файл со стилями физически может находиться на другом веб-сервере, тогда в href нужно указать абсолютный путь к нему.

      Проблемы с браузерами

      Обязательно просматривайте страницы с таблицами стилей в различных браузерах. Это связано с тем, что разные браузеры могут по разному интерпретировать одно и то же правило, а некоторые свойства и/или значения и вовсе не поддерживать. Следует также тестировать страницы с отключенными стилями (например, в текстовых браузерах), чтобы убедиться, что страница читабельна.

      И снова каскадирование¶

      Если вам нужна сотня-другая-третья страниц HTML — используйте внешнюю, глобальную, таблицу стилей. Если некоторые из этих страниц требуют корректировки общего оформления — используйте внедренный стиль. А если на странице нужно явно изменить оформление одного-двух элементов, то применяйте встроенные стили. Именно в таком порядке происходит перекрытие стилей при каскадировании, схематично это можно представить так: связанные стили -> внедренные стили -> встроенные стили

      Аппаратно-зависимые стили¶

      Таблицы стилей могут применяться для управления отображением содержимого в зависимости от используемого устройства вывода (монитор, проектор, устройство печати, звуковой синтезатор и т.п.). Для этого в описание стилей включить тип устройства, например так:

      @media print /* печатающее устройство */ BODY  font-size: 10pt; > > @media screen  /* монитор */ BODY  font-size: 12pt; > > @media screen, print  BODY  line-height: 1.2; > > @media all  BODY  margin: 1pt; > > 

      Как видно из примера, вся таблица разбивается на секции, каждая из которых начинается со слова @media, за которым следует название класса устройств и далее, в фигурных скобках, непосредственно описание стилей.

      Можно разделить таблицы стилей иначе, указав тип устройства в теге :

      Свойства CSS¶

      В таблице ниже перечислены некоторые часто используемые свойства CSS и их назначение.

      Имя Значения Описание
      background [background-color || background-image || background-repeat || background-attachment || background-position] | inherit Управление фоном элемента
      background-color | transparent | inherit Цвет фона
      background-image | none | inherit Фоновое изображение
      background-position [ [ | ] | [ [top | center | bottom] || [left | center | right] ] ] | inherit Положение фоновой картинки
      background-repeat repeat | repeat-x | repeat-y | no-repeat | inherit Повторение фоновой картинки
      border [ border-width || border-style || ] | inherit Границы элемента
      border-collapse collapse | separate | inherit Объединение/разделение смежных границ
      border-color | transparent | inherit Цвет границы
      border-style | inherit Стиль линии границы
      border-top border-right border-bottom border-left [ border-top-width || border-style || ] | inherit Управление стилем заданной границы
      border-width | inherit Толщина линии границы
      bottom | | auto | inherit Низ элемента
      clear none | left | right | both | inherit Запрет заполнения свободного пространства рядом с элементом
      clip | auto | inherit Обрезка содержимого элемента
      color | inherit Цвет содержимого
      cursor [ [ ,]* [ auto | crosshair | default | pointer | move | e-resize | ne-resize | nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize| text | wait | help ] ] | inherit Форма курсора
      display inline | block | list-item | run-in | compact | marker | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | none | inherit Способ отображения элемента
      empty-cells show | hide | inherit Отображение пустых ячеек таблицы
      float left | right | none | inherit Свободное размещение элемента
      font [ [ font-style || font-variant || font-weight ]? font-size [ / line-height ]? font-family ] | caption | icon | menu | message-box | small-caption | status-bar | inherit Управление шрифтом
      font-family [[ | ],]* [ | ] | inherit Гарнитура
      font-size | | | | inherit Кегль
      font-style normal | italic | oblique | inherit Стиль шрифта
      font-variant normal | small-caps | inherit Варианты отображения шрифта
      font-weight normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit Толщина шрифта
      height | | auto | inherit Ширина элемента
      left | | auto | inherit Положение левой границы элемента
      line-height normal | | | | inherit Высота строки
      list-style [ list-style-type || list-style-position || list-style-image ] | inherit Стиль списка
      margin | inherit Внешний отступ
      margin-top margin-right margin-bottom margin-left | inherit Внешний отступ по заданной стороне
      padding | inherit Внутренний отступ
      padding-top padding-right padding-bottom padding-left | inherit Внутренний отступ по заданной стороне
      position static | relative | absolute | fixed | inherit Позиционирование элемента
      right | | auto | inherit Положение правой границы
      text-align left | right | center | justify | | inherit Выравнивание текстового блока
      text-decoration none | [ underline || overline || line-through || blink ] | inherit Текстовые эффекты
      text-indent | | inherit Абзацный отступ
      text-transform capitalize | uppercase | lowercase | none | inherit Начертание текста
      top | | auto | inherit Положение верхней границы элемента
      vertical-align baseline | sub | super | top | text-top | middle | bottom | text-bottom | | | inherit Вертикальное выравнивание в пределах блока
      visibility visible | hidden | collapse | inherit Управление видимостью элемента
      white-space normal | pre | nowrap | inherit Управление пробелами между словами
      width | | auto | inherit Ширина элемента
      z-index auto | | inherit Порядок перехода по клавише Tab

      Позиционирование элементов¶

      Рассмотрим пример, приведенный в Листинге 4 из ЛР №1. В этом примере фрагменты содержимого размещены в блочных элементах , для которых переопределены стили свойств, определяющих положение на странице. Если отключить эти стили, то вид страницы сильно изменится (рис. 2).

      ../_images/no-styles.png

      Рис. 2. Вид страницы с отключенными стилями

      Такое влияние на внешний вид оказывает свойство position. Это свойство в сочетании со свойствами left, top, right, bottom, display, clear и ряда других позволяет управлять положением элементов на странице и порядком их вывода. Свойство position может принимать такие значения:

      static — нормальное положение Данный блок является обычным блоком, он отображается согласно общим правилам. Свойства ‘left’ и ‘top’ не применяются. relative — относительное позиционирование Положение блока рассчитывается в соответствии с нормальным потоком вывода. Затем блок смещается относительно своего нормального (static) положения. absolute — абсолютное позиционирование Положение блока (возможно и размер) указывается с помощью свойств ‘left’, ‘right’, ‘top’ и ‘bottom’. Они указывают величину смещения относительно контейнера блока. Абсолютно позиционируемые блоки изымаются из нормального потока. Это значит, что они не влияют на размещение последующих элементов того же уровня. fixed — фиксированное положение Положение блока рассчитывается в соответствии с моделью абсолютного позиционирования, а затем он фиксируется относительно области просмотра или страницы. Два объявления могут быть отделены друг от друга с помощью правила @media, как это показано в примере:

      @media screen  H1#first < position: fixed; >> @media print  H1#first < position: static; >> 

      Управляя позиционированием, можно различным образом размещать блоки информации на странице, вплоть до создания эффектов наложения, перетекания, градиента и т.п.

      Что такое CSS или каскадные таблицы стилей?

      CSS расшифровывается как «Cascading Style Sheets», что в переводе означает «Каскадные таблицы стилей». Используется для оформления веб-страниц. Если в HTML-коде находится содержимое (то, что покажет браузер), то CSS определяет его оформление (то, как браузер это покажет). Прелесть CSS в том, что с помощью одного стиля можно оформить сразу все однотипные элементы страницы или целого сайта (сразу все ссылки, абзацы, списки). CSS-стилем вы один раз определяете, как должен выглядеть тот или иной элемент, например, картинки, и они меняют свое оформление сразу во всех документах. Чтобы изменить форматирование текста по всему сайту, вам достаточно изменить CSS-код всего один раз.

      Основные элементы CSS

      Как HTML состоит из тегов, атрибутов и значений, так и CSS состоит из своих собственных элементов. Суть конструкций CSS можно объяснить так: «Указать, какой элемент страницы оформить, и указать, как его оформлять». Вот составляющие конструкции CSS.

      Схема CSS

      • Селектор. Идентификатор, который указывает браузеру, к какому именно элементу страницы применить оформление. Благодаря ему обозреватель «понимает», что стиль предназначен, например, для оформления списков или таблиц.
      • Блок объявления стилей. Пишется после селектора и заключается в фигурные скобки. В нём задаётся стиль элемента (его оформление). Блок объявления стилей состоит из двух частей.
      • Свойство. Аналог атрибута в HTML. Определяет, какое именно свойство оформления будет изменено.
      • Значение. Задаётся свойству через двоеточие и определяет, как именно свойство будет изменено.

      Свойств и значений в блоке объявления стилей может быть несколько, в таком случае они перечисляются через точку с запятой.

      Типы селекторов

      В зависимости от того, свойства каких элементов страницы они определяют, селекторы бывают разных типов.

      • Универсальный. Задаёт правила всем элементам страницы, для которых не установлены другие правила.
        Код * устанавливает размер шрифта 14 пикселей всем элементам документа, для которых не заданы другие правила с помощью других селекторов.
      • Тега. Этот тип селектора задаёт правила форматирования для содержимого определённого HTML-тега. Название селектора совпадает с именем дескриптора, только пишется без угловых скобок: p, h1, ul.
        Например, код h2устанавливает зелёный цвет текста для всех заголовков второго уровня, то есть содержимого тегов .
      • Атрибута. С помощью этой группы селекторов можно определить стиль оформления содержимого всех тегов, которым задан определённый атрибут. Селекторы можно задавать более точно, указывая не только имя атрибута, но и присвоенное ему значение, а также название содержащего его тега. Этим можно пользоваться, чтобы делать оформление более индивидуальным.
      • Класса. Вид селекторов на случай, когда нужно по-разному оформить содержимое тегов одного типа. Например, ссылки в нижней части сайта вы хотите сделать красными, тогда как все остальные должны оставаться синими, как и были. Чтобы применить правила класса к элементу сайта, нужно указать имя класса в атрибуте class соответствующего тега.

      Предположим, с помощью класса step отдельным элементам нужно задать отступ слева в 15 пикселей.

      CSS-код будет таким:

      step

      HTML-код, который привяжет элемент к правилу, будет следующим:

      • Идентификатора. Используется совместно с атрибутом id HTML-тега и используется, когда свойства нужно задать единственному элементу. В отличие от селектора класса, перед именем которого ставится точка, пишется через «решётку»:

      #exclusive

      • Контекстный. В HTML одни теги часто находятся внутри других, и контекстные селекторы помогают задать правила как раз на такой случай. С помощью них, например, можно отформатировать элементы внутри нумерованных списков или курсивный текст внутри абзацев:

      Остальные группы селекторов основаны на совмещении перечисленных типов, а также на принципе наследования, когда дочерний элемент берёт свойства родительского.

      Комбинировать и группировать селекторы удобно во многих ситуациях. Например, чтобы задать правила класса step только для ссылок, нужно указать оба селектора через точку (сначала тег, потом класс):

      a.step

      Как подключить CSS к HTML-странице?

      Заставить инструменты создания сайтов взаимодействовать друг с другом можно несколькими способами. По методу добавления стили делятся на следующие категории.

      Встроенные стили

      Задаются в документе прямо внутри HTML-тега с помощью атрибута style. Имеют наивысший приоритет. Это значит, что если для одного и того же элемента задано разное оформление, то предпочтение будет отдано правилу, которое прописано внутри тега. Селектор для встроенного стиля не нужен, так как связь стиля и тега очевидна — оформление тега в нём и задано.

      Следующий код задаёт размер и цвет шрифта тексту внутри тега :

      Текст, оформленный с помощью внутреннего стиля.

      Глобальные стили

      Задаются тегом , расположенным в контейнере , и определяют оформление всех указанных элементов документа, а не оного, как в случае с внутренним стилем.

      Связанные стили

      Самые удобные, потому что с их помощью можно легко оформить в едином стиле целый сайт. Связанный стиль подразумевает, что всё CSS-оформление находится в отдельном файле с расширением .css.

      Такой подход удобен ещё и тем, что он отделяет правила оформления страниц от их содержимого, CSS-код можно легко менять, не вмешиваясь в HTML-файлы, а принцип разделения кода очень важен, особенно в больших проектах.

      Чтобы связать правила из CSS-файла с HTML-страницей, используется тег , добавленный в контейнер , и его атрибуты.

      Вот строка, связывающая правила из файла mystyle.css с HTML-страницей:

      rel=»stylesheet» определяет, что тег ссылается на файл таблицы стилей, href=»mysyle.css» задаёт его адрес. Правила адресации такие же, как у обычных ссылок – путь может быть абсолютным, относительным и т. д.

      Импортированные стили

      С помощью команды @import можно добавить стили из CSS-файла в текущую таблицу. Это может потребоваться, например, если вы хотите дополнить индивидуальное оформление документа, заданное с помощью глобальных стилей, универсальными правилами из отдельного файла. Со встроенными стилями метод использовать нельзя.

      Код ниже импортирует в документ таблицу файла any.css, которая находится в папке с редактируемым HTML-документом:

      @import url(any.css);

      Команда прописывается строкой ниже открывающего тега , до первой строки глобального стиля:

       @import url(mobile.css); a

      Чтобы редактировать HTML online воспользуйтесь визуальным редактором по ссылке.

      Полезные ссылки:

      • Основы HTML — бесплатный 2-х часовой видеокурс по основам HTML;
      • Бесплатный курс по верстке сайта — пример блочной вёрстки с чистого листа;
      • Вёрстка сайта с нуля 2.0 — полноценный платный курс;
      • Создание приложений для Android — для тех, кто давно хотел попробовать себя в мобильной разработке (не для новичков).

      Каскадность в CSS — Основы современной верстки

      В прошлом уроке была разобрана вторая часть словосочетания Каскадные таблицы стилей, а именно таблицы стилей. Мы изучили, как записываются и применяются стили к различным HTML элементам. В этом уроке поговорим о значении слова каскадные.

      Что такое каскадность? Представьте себе каскад водопадов. В них вода перетекает из одного водопада в другой и так до тех пор, пока это все не уйдет в общий бассейн.

      В CSS слово каскадность имеет такое же значение. В качестве воды у нас CSS свойства. Они могут накладываться и перекрывать друг друга. Другими словами каскадность — возможность языка CSS накладывать свойства друг на друга, а также расширять свойства в селекторах.

      Возможно такое описание достаточно сложное, но давайте посмотрим на примере. Создадим параграф с двумя классами: text-bold и text-dark . Первый класс будет отвечать за жирное начертание текста, а второй за установку темного цвета шрифта. Также добавим селектор по тегу и укажем размер шрифта 24 пикселя.

       class="text-bold text-dark"> Какой-то очень интересный текст об интересной вещи. Очень интересно. 

      В CSS файле укажем следующие стили:

      p  font-size: 24px; > .text-bold  font-weight: bold; > .text-dark  color: #333333; > 

      Попробуйте воспроизвести этот пример, и вы увидите, что текст выводится темного цвета и с жирным начертанием. Стили от классов text-bold и text-dark сложились и применились к нашему параграфу. Также текст имеет размер 24 пикселя, которые мы указали для селектора по тегу.

      Итоговыми стилями для нашего параграфа будут:

       color: #333333; font-weight: bold; font-size: 24px; > 

      Это и есть каскадность стилей CSS. Хоть мы и использовали разные селекторы и классы для описания, но в конечном итоге они суммировались.

      Приоритет селекторов

      Важной чертой CSS является то, что разные типы селекторов имеют разный приоритет. Если стили противоречат друг другу в разных селекторах, то вступает в дело принцип приоритета. Разберем на примере. Возьмем параграф с классом red и идентификатором blue . Установим соответствующие цвета для текста. Для всех же параграфов в тексте установим зеленый цвет.

      p  color: green; > .red  color: red; > #blue  color: blue; > 
       id="blue" class="red">Какого же цвета будет параграф? 

      Перед тем, как читать дальше попробуйте выполнить этот пример в любом удобном вам месте.

      Как вы смогли заметить, текст параграфа будет синим. Но почему так? Может быть, дело в том, что синий цвет в CSS указан самым последним? В данном случае нет. Даже если мы переместим селектор по идентификатору в самый вверх, параграф все равно останется синим.

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

      Условно можно расставить селекторы в следующем порядке по приоритету:

      1. Селектор по идентификатору ( #blue )
      2. Селектор по классу ( .red )
      3. Селектор по тегу ( p )

      Где 1 — самый высокий приоритет, а 3 — самый низкий.

      Разберем еще один пример:

      p  color: blue; font-weight: bold; > .important  color: purple; font-style: italic; > #intro  color: green; > 
       class="important" id="intro">Индейские племена Манахаттоу и Канарси. 

      Этот текст будет наклонным, жирным и зеленым . И вот почему:

      • Селектор по тегу p :
        • Добавит синий цвет
        • Добавит жирное начертание
        • Заменит синий цвет на пурпурный
        • Сделает текст курсивным
        • Заменит пурпурный цвет на зеленый

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

         color: green; font-weight: bold; font-style: italic; > 

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

        Переопределение свойств

        Возможно, у вас возник вопрос, а что случится, если элемент будет иметь несколько классов, свойства которых противоречат друг другу? Здесь каскадность работает по принципу «Кто последний, тот и прав». Проще всего это так же посмотреть на примере:

        .alert  color: gray; > .alert-error  color: red; > 
         class="alert alert-error">Важное сообщение! Сообщение красного цвета 

        Отталкиваясь от принципа каскадности, браузер вначале увидит селектор .alert и установит серый цвет текста. Далее ему встретится селектор .alert-error , который говорит установить красный цвет. И браузер просто перезапишет серый цвет на красный. Порядок классов в HTML в данном случае не играет никакой роли. Даже в таком случае

         class="alert-error alert">Важное сообщение! Сообщение красного цвета 

        цвет текста будет красным. Это наглядно показывает независимость CSS от HTML. Если же поменять местами селекторы в CSS, то поменяются и итоговые стили.

        .alert-error  color: red; > .alert  color: gray; > 
         class="alert alert-error">Важное сообщение! Сообщение серого цвета 

        Вес селекторов

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

         class="form-input"> 
        .form-input  height: 50px; > textarea  height: 200px; > 

        Какой высоты будет элемент ? Правильный ответ — 50px, так как селектор по классу имеет больший приоритет, чем селектор по тегу. Но как же задать высоту в 200px и не вводить новые классы? Достаточно подставить к тегу еще и название класса:

        .form-input  height: 50px; > textarea.form-input  height: 200px; > 

        Теперь для элемента будет установлена высота в 200px. Это произошло благодаря тому, что приоритеты «складываются» в рамках одного селектора. Для большего понимания таких сложений можно представить, что общий вес селектора определяется тремя цифрами, где:

        1. Первая цифра показывает количество идентификаторов в селекторе
        2. Вторая цифра показывает количество классов в селекторе
        3. Третья цифра показывает количество тегов в селекторе

        Может звучать сложно, но концепция простая. Разберем прошлый пример:

         class="form-input"> 
        .form-input  height: 50px; > textarea  height: 200px; > 
        • Селектор .form-input состоит из одного класса, поэтому в качестве второй цифры поставим единицу и получим: 010
        • Селектор textarea состоит из одного тега. Записываем единицу в третий разряд нашего числа: 001

        Визуально понятно, что 010 > 001, поэтому свойства внутри такого правила имеют больший приоритет. Мы захотели это исправить и дополнили наш селектор:

        .form-input  height: 50px; > textarea.form-input  height: 200px; > 

        Теперь порядок сил во вселенной немного изменился:

        • Селектор .form-input состоит из одного класса, поэтому в качестве второй цифры поставим единицу и получим: 010
        • Селектор textarea.form-input состоит из одного класса и тега. Записываем единицу во второй и третий разряд нашего числа: 011

        Получаем, что 010 < 011, а значит свойства внутри селектора textarea.form-input будут иметь больший приоритет.

        Такой подход поможет вам лучше понимать, как действуют те или иные правила, а также почему все разработчики стараются максимально уйти от сложных селекторов. При получении опыта вы все реже будете считать вес таким образом, а уже будете изначально понимать, как расставлены приоритеты.

        Самостоятельная работа

        Создайте файл index.html на своем компьютере.

        Внутри HTML расположите следующую запись:

          lang="en">  charset="UTF-8"> Небольшая вёрстка div  width: 500px; height: 500px; background: #333333; > #main  color: white; width: 750px; > .text-white  color: white; > .alert  height: 350px; color: gray; > div  background: blue; > .alert-warning  background: #000000; color: yellow; >    id="main" class="text-white alert alert-warning">Какой-то текст   

        Проанализируйте получившийся результат

        Аватары экспертов Хекслета

        Остались вопросы? Задайте их в разделе «Обсуждение»

        Вам ответят команда поддержки Хекслета или другие студенты

        Об обучении на Хекслете

        • Статья «Как учиться и справляться с негативными мыслями»
        • Статья «Ловушки обучения»
        • Статья «Сложные простые задачи по программированию»
        • Урок «Как эффективно учиться на Хекслете»
        • Вебинар « Как самостоятельно учиться »

        Открыть доступ

        Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

        • 130 курсов, 2000+ часов теории
        • 1000 практических заданий в браузере
        • 360 000 студентов

        Наши выпускники работают в компаниях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *