Лекция № 8. Каскадные таблицы стилей

advertisement
Лекция № 8. Каскадные таблицы стилей
1. Каскадные таблицы стилей
Каскадные таблицы стилей представляют собой декларативный язык для описания
форматирования элементов веб-страницы. Таблицы стилей называются «каскадными», потому
что к каждой веб-странице может применяться не одна таблица стилей, а целый каскад таблиц.
Таблица стилей состоит из набора правил. Каждое правило определяет одно или
несколько свойств для одного или нескольких элементов. Правило имеет следующий синтаксис:
<селектор> { <свойство>: <значение> [!important]; ... }
Неизвестные селекторы, неизвестные свойства и их значения, а также синтаксически
некорректные части правил игнорируются браузерами. Никаких сообщений об ошибках при этом
не выдаётся.
Свойства, определяющие параметры шрифта и параметра текста, а также некоторые
другие свойства наследуются дочерними элементами.
Таблица стилей может включать комментарии, которые начинаются с сочетания
символов /* и заканчиваются сочетанием символов */.
Для задания таблицы стилей в HTML-файле можно использовать элемент style, однако
сайты обычно содержат много веб-страниц и желательно использовать один и тот же стиль
оформления для всех страниц сайта. Поэтому удобнее записывать таблицу стилей в отдельном
файле и подключать этот CSS-файл во все HTML-файлы сайта с помощью элемента link.
<link rel = stylesheet href = url type = "text/css" [media = media-type]>
Стиль элемента можно также задавать с помощью атрибута style, но этот способ
предназначен для задания стиля отдельных элементов, а не для общего оформления страницы.
Элемент link может иметь атрибут media, который определяет тип устройства, для
которого предназначена таблица стилей. К каждому HTML-файлу можно подключить несколько
таблиц стилей и с их помощью задать различное форматирование для разных устройств. Тип
устройства можно также задать для некоторых правил непосредственно в таблице стилей.
@media media-type { правила }
Таблицы стилей можно разделить на три типа в соответствии с происхождением таблицы:
авторские – создаются автором веб-страницы и поставляются вместе со страницей;
пользовательские – таблицы, которые создаются пользователем и подключаются в браузере
на компьютере клиента;
 стандартные – таблицы стилей, определённые в браузере.
Кроме того, таблицы стилей можно разделить по типу устройств, для которых они
предназначены. Как было сказано выше, при связывании таблицы с HTML-файлом или для
некоторых правил можно указать параметр, определяющий тип устройств. Этот параметр может
иметь следующие значения:
 all – таблица применяется для всех типов устройств;
 screen – таблица применяется при отображении веб-страницы на экране компьютера;
 print – таблица применяется при печати документа, а также при предварительном просмотре;
 speech – таблица применяется в синтезаторах речи;
 handheld – таблица применяется при отображении веб-страницы на портативных устройствах.
В итоге получается, что для каждого элемента может существовать несколько правил. Для
выбора применяемого правила используется следующий алгоритм.
1. Прежде всего, выбираются правила, предназначенные для устройств нужного типа. Если
специфической таблицы нет, то применяются правила из таблицы, применяемой ко всем
типам устройств.
2. Далее из всех правил выбираются более приоритетные. Правила сортируются следующим
образом (в порядке уменьшения приоритета):
 пользовательские правила с пометкой !important;
 авторские правила с пометкой !important;
 обычные авторские правила;
 обычные пользовательские правила;
35


 стандартные правила.
3. Если правил с одинаковым приоритетом несколько, то выбираются самые специфичные
правила. Наиболее специфичными считаются правила, предназначенные для элементов с
определённым идентификатором, затем – правила, предназначенные для элементов,
принадлежащих определённому классу или псевдоклассу, затем – правила, предназначенные
для элементов, вложенных в другие элементы, и, наконец, правила, предназначенные для
элементов без каких-либо дополнительных характеристик.
4. Если правил с одинаковой специфичностью несколько, то выбирается правило, которое
оказывается самым последним.
2. Свойства и их значения
2.1. Значения свойств
Свойства могут иметь некоторые предопределённые значения, которые записываются без
кавычек. В кавычках записываются только имена файлов и имена шрифтов, содержащие
пробелы. Строковые значения, которые также нужно записывать в кавычках, редко встречаются
в таблицах стилей.
Значения свойств могут быть числовыми. При этом они определяются с использованием
ряда единиц измерения. Абсолютные значения измеряются в следующих единицах:
 in – дюйм (2.54 см);
 cm – сантиметр;
 mm – миллиметр;
 pt – пункт (1/72 дюйма ≈ 0.35 мм);
 px – пиксел (0.75 пункта).
Относительные значения измеряются либо в процентах, либо в относительных единицах,
обозначаемых em, которые задают размеры относительно размера используемого шрифта.
Некоторые свойства задают цвет той или иной части элемента. Для представления цвета
используются следующие способы:
 ключевые слова, задающие название цвета;
 шестнадцатеричное представление, например, #ffffff;
 цветовая модель RGB, например, rgb(255, 0, 128);
 цветовая модель HSL (тон – насыщенность – яркость), например, hsl(120, 100%, 50%).
Для большинства свойств можно также использовать значение inherit, что заставляет
браузер использовать для данного свойства элемента такое же значение, какое имеет данное
свойство родительского элемента.
2.2. Свойства фона
Имя
Значения
Начальное
значение
background-attachment
scroll | fixed
scroll
<color>
<url> | none
<%> <length> top bottom
left right center
repeat-x | repeat-y |
repeat | no-repeat
color image repeat
attachment position
transparent
none
0% 0%
background-color
background-image
background-position
background-repeat
background
repeat
Описание
Определяет, будет ли фоновый
прокручиваться вместе с содержимым.
Задаёт цвет фона элемента.
Задаёт фоновый рисунок.
Задаёт позицию фонового рисунка.
рисунок
Определяет способ повтора фонового рисунка.
Свойство, объединяющее все характеристики
фона.
body { background-image: url(Background.gif); background-color: indianred; background-attachment: fixed }
body { background: lightcoral url("Background.gif") repeat-x fixed left 30pt }
2.3. Высота и ширина
Имя
height
width
overflow
Значения
Начальное
значение
<%> | <length> | auto
<%> | <length> | auto
visible | hidden | scroll | auto
auto
auto
visible
36
Описание
Задаёт высоту элемента.
Задаёт ширину элемента.
Определяет, что происходит, когда содержимое
элемента превосходит его высоту или ширину.
pre { height: 100pt; width: 220pt; overflow: scroll }
pre { height: 100pt; width: 220pt; overflow: auto }
2.4. Поля и отступы
Имя
margin-top
margin-right
margin-bottom
margin-left
margin
padding-top
padding-right
padding-bottom
padding-left
padding
p
p
p
p
{
{
{
{
margin:
margin:
margin:
margin:
Значения
Начальное
значение
<width>
0
Задают поля элемента.
<width>{1, 4}
<width>
0
Свойство, объединяющее все поля элемента.
Задают отступы элемента.
Свойство, объединяющее все отступы элемента.
<width>{1, 4}
10pt }
15pt 5pt }
5pt 7pt 10pt }
5pt 7pt 8pt 10pt }
/*
/*
/*
/*
Описание
Все поля равны 10pt */
Верхнее и нижнее поле равны 15pt, правое и левое - 5pt */
Верхнее поле равно 5pt, нижнее – 10pt, правое и левое – 7pt */
Верхнее поле равно 5pt, правое – 7pt, нижнее – 8pt, левое – 10pt */
2.5. Границы
Имя
Значения
border-width
border-style
border-color
border-top
border-right
border-bottom
border-left
border
border-radius









<width>{1,
<style>{1,
<color>{1,
<width> <style>
Начальное
значение
4}
4}
4}
<color>
0
none
<width> <style> <color>
<length>{1, 4}
Описание
Задаёт ширину границ.
Задаёт стиль границ.
Задаёт цвет границ.
Задают ширину, стиль и цвет верхней, правой,
нижней и левой границы.
Задаёт ширину, стиль и цвет всех границ.
Задаёт радиус закругления углов границы.
0
Стиль границ может быть следующим:
none – граница отсутствует;
solid – сплошная граница;
dotted – точечная граница;
dashed – штриховая граница;
double – двойная граница;
groove – граница выглядит так, как будто она вдавлена в холст;
ridge – граница выглядит так, как будто она выступает над холстом;
inset – граница заставляет элемент выглядеть так, как будто он вдавлен в холст;
outset – граница заставляет элемент выглядеть так, как будто он выступает над холстом.
section
section
section
section
section
section
section
{
{
{
{
{
{
{
border: 5pt solid indigo }
border: 5pt groove }
border: 5pt ridge }
border: 5pt inset }
border: 5pt outset }
border-top: 2pt dotted darkgreen; border-right: 2pt dashed darkolivegreen }
border-width: 3pt; border-style: dashed dotted;
border-color: darkviolet darkmagenta darkgreen darkslateblue }
section { border: 2pt solid; border-radius: 5pt 10pt 15pt 20pt }
2.6. Позиционирование
Имя
float
clear
position
top
right
bottom
left
display
Значения
Начальное
значение
none | left | right
none | left | right | both
none
none
static | absolute | relative | fixed
<%> | <length> | auto
static
auto
Описание
Создаёт плавающий элемент.
Определяет, будет ли элемент перекрываться
плавающими элементами.
Задаёт способ позиционирования элемента.
Задаёт позицию элемента для позиционированных
элементов, т.е. элементов, для которых свойство
position имеет значение absolute, relative или fixed.
Определяет способ отображения элемента.
none | block | inline | list-item
37
2.7. Шрифт
Имя
Значения
Начальное
значение
font-style
font-variant
normal | italic | oblique
normal | small-caps
normal
normal
font-weight
normal | bold | bolder| lighter
normal
<absolute-size> | <relative-size>
| <length> | <%>
normal | <length> | <number> | <%>
medium
font-size
line-height
font-family
font
color
normal
<font-style> <font-variant>
<font-weight> <font-size> / <lineheight> <font-family>
<color>
Описание
Задаёт стиль шрифта.
Определяет написание слов обычным способом
или с использованием малых прописных букв.
Задаёт плотность шрифта. Значения bolder и
lighter используются для задания плотности
шрифта некоторого элемента относительно
плотности шрифта его родительского элемента.
Задаёт размер шрифта.
Задаёт высоту строки текста.
Задаёт шрифт или семейство шрифтов.
Задаёт все характеристики шрифта. Выделенные
составляющие являются обязательными.
Задаёт цвет текста элемента.
Свойство font-size может быть выражено в абсолютных значениях, например, 12pt, в
процентах относительно размера шрифта родительского элемента, а также с помощью ряда
ключевых слов, которые также задают абсолютный (xx-small, x-small, small, medium, large, x-large,
xx-large) или относительный (smaller, larger) размер шрифта.
Свойство font-family может задавать несколько шрифтов. Значение свойства состоит из
имён конкретных шрифтов и обобщённого имени группы шрифтов, а именно, serif, sans-serif,
monospace, cursive и fantasy. Если первый из перечисленных шрифтов не установлен на
компьютере пользователя, браузер пытается использовать второй шрифт. Если второй шрифт
также не установлен, браузер будет использовать третий шрифт, и т.д. Если никакой из
перечисленных шрифтов не установлен на компьютере пользователя, будет использоваться
любой шрифт из заданной группы шрифтов.
p { font-style: italic; font-family: Cambria, "Times New Roman", serif }
p { font: italic small-caps bold 14pt/200% Verdana, Arial, sans-serif }
p { font: bold 16pt Verdana, Arial, sans-serif; color: forestgreen }
2.8. Свойства текста
Начальное
значение
Имя
Значения
text-indent
text-align
text-decoration
<length> | <%>
left | right | center | justify
none | underline | overline |
line-through | blink
0
left
none
text-transform
none | capitalize | uppercase |
lowercase
normal | <length>
normal | <length>
normal | pre | nowrap |
pre-wrap | pre-line
none
letter-spacing
word-spacing
white-space
Описание
Задаёт отступ первой строки текста элемента.
Задаёт способ выравнивания текста элемента.
Задаёт
дополнительные
элементы
текста.
Значение blink работает не во всех браузерах.
Задаёт вид букв текста элемента.
normal
normal
normal
Изменяет расстояние между буквами текста.
Изменяет расстояние между словами текста.
Определяет, как браузер будет обрабатывать
разделители и перевод строки.
p { text-indent: 10%; text-align: justify }
p { text-align: center; text-decoration: underline; letter-spacing: 0.5em }
2.9. Тени
Имя
box-shadow
text-shadow
Значения
none | inset <length> <length>
<length> <color>
none | <length> <length>
<length> <color>
Начальное
значение
Описание
none
Определяет тень элемента.
none
Определяет тень текста.
Первое число length задаёт горизонтальное смещение, при этом положительное число
определяет смещение направо, отрицательное – налево. Второе число задаёт вертикальное
смещение, при этом положительно число определяет смещение вниз, отрицательное – вверх.
Третье число задаёт размытие тени. Добавление ключевого слова inset преобразует внешнюю
тень во внутреннюю.
div { border: 2pt solid hsl(240, 100%, 20%); box-shadow: 10pt 10pt 5pt hsl(240, 80%, 80%) }
38
div { border: 2pt solid hsl(240, 100%, 20%); box-shadow: inset 10pt 10pt 5pt hsl(240, 80%, 80%) }
div { box-shadow: 10pt 10pt 5pt hsl(240, 80%, 80%) }
h1 { font: bold 24pt Cambria; color: hsl(30, 90%, 50%); text-shadow: 3pt 3pt 0 hsl(20, 75%, 25%) }
2.10. Другие свойства
Значения
Начальное
значение
border-collapse
collapse | separate
separate
border-spacing
<length> <length>
0
<number>
1
none | disc | circle | square |
decimal | decimal-leading-zero |
lower-roman | upper-roman |
lower-greek | lower-latin |
upper-latin | armenian | georgian
none | <url>
disc
Имя
opacity
list-style-type
list-style-image
table
table
img
ul
ol
{
{
{
{
{
border-collapse:
border-collapse:
opacity: 0.4 }
list-style-type:
list-style-type:
none
Описание
Определяет, будут ли сливаться границы
соседних ячеек таблицы.
Определяет расстояние между границами
соседних ячеек таблицы.
Определяет прозрачность элемента. Значение
0 соответствует полностью прозрачному
состоянию,
значение
1
–
полностью
непрозрачному.
Задаёт маркер или способ нумерации списка.
Определяет рисунок, который будет использоваться как маркер списка.
collapse }
separate; border-spacing: 5pt 10pt }
square }
lower-greek }
3. Селекторы
Правила, приведённые выше в примерах, будут применяться ко всем элементам
указанного типа. Но в документе может потребоваться выделить элементы с заданным идентификатором, элементы, принадлежащие определённому классу, элементы, входящие в другие
элементы и т.п. Для этого в правилах можно использовать более сложные селекторы.
Селектор
*
E
E.class
E#id
E F
E > F
E ~ F
E + F
Описание
Универсальный селектор – соответствует любому элементу
Любой элемент типа E
Элемент типа E, принадлежащий классу class
Элемент типа E с идентификатором id
Элемент типа F, вложенный в элемент типа E
Элемент типа F, непосредственно вложенный в элемент типа E
Элемент типа F, которому предшествует элемент типа E
Элемент типа F, которому непосредственно предшествует элемент типа E
Разные типы выделения элементов могут быть скомбинированы друг с другом. Кроме
того, несколько селекторов можно написать через запятую.
p, a { … }
p.attr { … }
.attr { … }
div#ref { … }
#ref { … }
p span.elem { … }
/*
/*
/*
/*
/*
/*
Правило будет применяться ко всем абзацам и ко всем ссылкам */
Правило будет применяться ко всем абзацам, принадлежащим классу attr */
Правило будет применяться ко всем элементам, принадлежащим классу attr */
Правило будет применяться ко всем элементам div с идентификатором ref */
Правило будет применяться к элементам любого типа с идентификатором ref */
Правило будет применяться к элементам span, принадлежащим классу elem,
которые при этом вложены в элемент p */
p.attr span.elem { … }
/* Правило будет применяться к элементам span, принадлежащим классу elem,
которые при этом вложены в элемент p, принадлежащий классу attr */
div ol span { … }
/* Правило будет применяться к элементу span, вложенному в элемент ol,
который, в свою очередь, вложен в элемент div */
section > p { … }
/* Правило будет применяться к элементу p, который вложен непосредственно
в элемент section (см. пример ниже) */
/* Правило из предыдущего примера будет применяться к первому абзацу и не будет применяться ко второму абзацу */
<section>
<p> Текст </p>
<div>
<p> Текст </p>
</div>
</section>
a ~ p { … }
/* Правило будет применяться к абзацу, который находится после ссылки */
a + p { … }
/* Правило будет применяться к абзацу, который находится сразу после ссылки */
39
/* Первое правило из предыдущего примера будет применяться к обоим абзацам, второе правило – только к первому */
<a> Ссылка </a>
<p> Первый абзац </p>
<p> Второй абзац </p>
4. Псевдоклассы и псевдоэлементы
Кроме обычных элементов и классов существуют также так называемые псевдоклассы и
псевдоэлементы. Обычные селекторы позволяют выделять элементы на основе классов и идентификаторов и информации об относительном расположении элементов. Псевдоклассы и псевдоэлементы позволяют выделять элементы на основе информации, которая не входит непосредственно в HTML-файл. Кроме того, принадлежность элемента к псевдоклассу может меняться динамически. Псевдоклассы и псевдоэлементы могут комбинироваться с обычными селекторами.
Псевдокласс
:link
:visited
:hover
:empty
:first-of-type
:last-of-type
:nth-of-type(N)
:nth-last-of-type(N)
:not(X)
Псевдоэлемент
:first-line
:first-letter
:before
:after
Описание
Непосещённая ссылка
Посещённая ссылка
Элемент принадлежит к данному псевдоклассу, когда на него наведён курсор
Элемент, не имеющий содержимого
Первый элемент некоторого типа
Последний элемент некоторого типа
N-ый элемент некоторого типа
N-ый с конца элемент некоторого типа
Элемент, не являющийся X, где X – простой селектор
Описание
Первая строка
Первая буква
Псевдоэлемент, представляющий дополнительный текст перед содержимым элемента
Псевдоэлемент, представляющий дополнительный текст после содержимого элемента
/* Выделяем первую строку абзаца */
p:first-line { background-color: lightskyblue }
/* Выделяем первую букву абзаца */
p:first-letter { font: bold italic 28pt Cambria }
/* Добавляем текст перед содержимым абзаца */
p:before { content: "Дополнение"; color: darkred }
/* Выделяем первую и последнюю строку таблицы */
tr:first-of-type { background-color: gray }
tr:last-of-type { background-color: silver }
/* Чётные строки таблицы будут иметь один цвет фона, нечётные – другой */
tr:nth-of-type(2n)
{ background-color: goldenrod }
tr:nth-of-type(2n+1) { background-color: silver }
/* С помощью цвета фона строки таблицы будут разделены
tr:nth-of-type(3n+1) { background-color: hsl(270, 50%,
tr:nth-of-type(3n+2) { background-color: hsl(270, 50%,
tr:nth-of-type(3n)
{ background-color: hsl(270, 50%,
на группы по три строки */
40%) }
60%) }
80%) }
/* Выбираем все элементы, не являющиеся абзацами */
*:not(p) { … }
/* Выбираем все абзацы, не принадлежащие классу attr */
p:not(.attr) { … }
/* Выбираем все элементы, не являющиеся ссылками */
*:not(:link):not(:visited) { … }
5. Развитие стандарта CSS3
Рассмотренные возможности в большинстве своём относятся к стандарту CSS2.1. Стандарт
CSS3 находится в разработке и предполагает добавление множества интересных возможностей.
Будут добавлены возможности создания сложных границ и различных линий под текстом/над
текстом, размещения документа в несколько колонок, создания градиентов, трансформации
объектов, анимации, создания условных правил в каскадных таблицах стилей.
40
Download