В предыдущих руководствах этого курса мы говорили о контенте Web-сайтов и о том, как структурировать этот контент с помощью HTML. Это очень важно, так как означает, что мы задаем для документов значение и структуру, позволяющие легко объединяться с другими технологиями. Наиболее важной обсуждаемой далее технологией Web является
В то время как HTML структурирует документ и говорит браузеру, какую функцию имеет определенный элемент (будет ли это ссылка на другую страницу или заголовок), CSS выдает браузеру инструкции о том, как вывести определенный элемент — оформление, размещение пробелов и позиционирование. Если HTML является балками и кирпичами, которые составляют структуру дома, CSS является штукатуркой и покраской для его отделки.
Это реализуется с помощью системы h2 и сделать их зелеными", или "я хочу найти все параграфы с именем класса author-name, сделать их фон красным, увеличить размер шрифта в них в два раза по сравнению с обычным текстом параграфа, и создать пробел в 10 пикселей вокруг каждого".
CSS не является языком программирования, таким как JavaScript, и не является языком разметки, таким как HTML — в действительности нет ничего, с чем его можно было бы сравнить. Технологии, которые определяли интерфейсы до развития Web, всегда смешивали представление и структуру. Это не слишком разумно делать в такой изменчивой среде, какой является Web, именно поэтому и был придуман CSS.
Без дальнейших рассуждений давайте посмотрим на пример кода CSS, а затем проанализируем его:
селектор {
свойство1:значение;
свойство2:значение;
свойство3:значение;
}
В данном случае можно видеть следующие детали:
body, или другими средствами, такими как значения атрибута class - мы вернемся к этому позже.Свойства, которые влияют на положение, поля, ширину, высоту и т.д. могут измеряться в пикселях, em, процентах, сантиметрах или других аналогичных единицах измерения.
Теперь давайте посмотрим на конкретный пример:
p {
margin:5px;
font-family:arial;
color:blue;
}
Это p — для каждого элемента p в документах HTML, которые используют этот код CSS, будет применяться это margin ), шрифт текста в параграфе ( font-family ), и цвет этого текста ( color ). Поля задаются размером в 5 пикселей, шрифт задается как Arial, а цвет текста задается как blue.
Мы вернемся ко всем этим конкретным вопросам позже — основная цель этого руководства представить основы CSS, а не мельчайшие подробности.
Все множество этих
Прежде всего необходимо узнать, как создавать в CSS /* и */.
/* Это базовые селекторы элементов */
селектор {
свойство1:значение;
свойство2:значение;
свойство3:значение;
}
селектор {
свойство1:значение;
/*
свойство2:значение;
свойство3:значение;
*/
}
В отличие от других языков, CSS имеет только
Можно, конечно, при желании ограничить /* и */ ).
Можно также объеднить в группу различные h1 и p, тогда можно было бы написать следующий CSS:
h1 {color:red}
p {color:red}
Это, однако, не очень хорошо, так как повторяется одинаковая информация. Поэтому можно сократить код CSS, группируя
h1, p {color:red}
Существует несколько различных
p {}: селектор элемента
соответствует всем элементам на странице с указанным названием (элементам p, в приведенном выше случае)
.example{}: селектор класса
соответствует всем элементам, которые имеют атрибут class с указанным значением, так что пример выше будет соответствовать <p class="example">, <li class="example"> или <div class="example">, или любому другому элементу со значением class равным example. Отметим, что
#example{}: селектор id
соответствует всем элементам, которые имеют атрибут id с указанным значением, так что пример выше будет соотвествовать <p id="example">, <li id="example"> или <div id="example">, или любому другому элементу со значением id равным example. Отметим, что
Вы можете увидеть приведенные выше
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Selectors Example</title>
<link rel="stylesheet" href="selectors.css" type="text/css" media="screen">
</head>
<body>
<h1>CSS Basics Example</h1>
<ul id="menu">
<li>Item</li>
<li class="warning">Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p class="warning">Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li id="extra">Item</li>
<li>Item</li>
</ul>
</body>
</html>
#menu{
border-style:solid;
border-color:rgb(0,0,0);
border-width:1px;
}
.warning{
background:red;
color:white;
}
li{
font-family:arial,sans-serif;
}
Можно соединять несколько
p.warning{}
соответствует всем параграфам со значением class равным warning
div#example{}
соответствует элементу со значением атрибута id равным example, но только когда он является div
p.info, li.highlight{}
соответствует параграфам со значением class равным info и элементам списка со значением class равным highlight
В следующем примере это используется для различия между разными стилями предупреждений:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 1//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Specific Selectors Example</title>
<link rel="stylesheet" href="specificselectors.css" type="text/css" media="screen">
</head>
<body>
<h1>CSS Basics Example</h1>
<ul id="menu">
<li>Item</li>
<li class="warning">Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p class="warning">Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li id="extra">Item</li>
<li>Item</li>
</ul>
</body>
</html>
#menu{
border-style:solid;
border-color:rgb(0,0,0);
border-width:1px;
}
.warning{
background:red;
color:white;
}
p.warning{
background:#fcc;
color:red;
}
li{
font-family:arial,sans-serif;
}
li#extra{
padding:10px;
}
В разделе выше мы познакомились с самыми общими селекторами CSS,
Говоря просто, универсальные
* {
border: 1px solid #000000;
}
img с атрибутом alt с помощью следующего
img[alt] {
border: 1px solid #000000;
}
Обратите внимание на квадратные скобки.
Используя приведенный выше alt, и оформить другие изображения ярко-красной границей — что было бы полезно при тестировании доступности.
Но атрибуты мгновенно станут еще полезнее, когда вы поймете, что можно выбирать по значению атрибута, а не только по названию атрибута. Следующее src со значением alert.gif:
img[src="alert.gif"] {
border: 1px solid #000000;
}
Вы можете не считать, что это очень полезно, но опять же это может быть полезно для целей отладки. Значительно более полезной является возможность выбирать определенные части атрибутов, например, расширения файлов. И такая возможность на подходе — CSS 3 фактически вводит три новых типа
Можно использовать strong элементов, которые являются потомками элементов h3, как blue, но никакие другие элементы strong:
h3 > strong {
color: blue;
}
<div>
<em>hello</em>
<p>In this paragraph I will say
<em>goodbye</em>.
</p>
</div>
В этом фрагменте элемент div является предком всех других элементов. Он имеет двух потомоков, em и p. Элемент p имеет один элемент потомок, еще один em.
Можно использовать em непосредственно внутри div следующим образом:
div > em {
...
}
Если вместо этого использовать
div em {
...
}
будут выбраны оба элемента em.
Эти p, которые следуют непосредственно после элементов h2, но никакие другие элементы p, можно воспользоваться следующим
h2 + p {
...
}
Псевдо-классы используются для обеспечения стилевого оформления не для элементов, а для различных состояний элементов. Наиболее обычным применением, которое можно встретить, является оформление состояний ссылок, поэтому рассмотрим прежде всего это.
Следующий список представляет различные псевдо-классы и описание состояния ссылки, которое они выбирают:
:link - обычное состояние ссылок по умолчанию, когда вы впервые их находите.:visited - ссылки, которые вы уже посетили в используемом в данный момент браузере.:focus - ссылка (или поле формы, или что-то еще), в которой в данный момент находится курсор клавиатуры.:hover - ссылка, на которой в данный момент находится указатель мыши.:active - ссылка, на которой в данный момент происходит щелчок.Следующие :hover c использованием :focus. Когда ссылка будет посещена, она станет серой. Наконец, когда ссылка активна, она становится жирной, как дополнительный признак, что что-то сейчас произойдет.
a:link{
color: blue;
}
a:visited{
color: gray;
}
a:hover{
text-decoration: none;
}
a:active{
font-weight: bold;
}
Псевдо-класс :focus будет полезен также для обеспечения дополнительной помощи при использовании форм. Например, можно выделить поле ввода, которое содержит активный мигающий курсор с помощью следующего
input:focus {
border: 2px solid black;
background-color: lightgray;
}
Затем я должен взглянуть на :first-child - этот псевдо-класс выбирает все экземпляры элемента, который является первым элементом-потомком своего предка, поэтому, например, следующее
li:first-child {
font-weight: bold;
}
И последнее, я кратко упомяну псевдо-класс :lang, который выбирает элементы, язык которых был задан как определенный язык с помощью атрибута lang. Например, следующий элемент:
<p lang="en-US">A paragraph of American text, gee whiz!<p>
можно было бы выбрать с помощью кода:
p:lang(en-US) {
...
}
Псевдо-элементы имеют два назначения. Прежде всего, можно использовать их для выбора первой буквы или первой строки текста в заданном элементе. Чтобы легко создать буквицу в начале каждого параграфа документа, можно использовать следующее
p:first-letter {
font-weight: bold;
font-size: 300%;
background-color: red;
}
Первая буква каждого параграфа будет теперь жирной и на 300% больше остального параграфа, и будет иметь красный фон.
Чтобы сделать первую строку каждого параграфа жирной, можно использовать следующее
p:first-line {
font-weight: bold;
}
Вторым применением псевдо-элементов является генерация контента с помощью CSS, что является более сложным. Можно использовать псевдо-элементы :before или :after для определения, что контент должен быть вставлен перед или после элемента, который вы выбираете. Затем определяют то, что должно быть вставлено. В качестве простого примера можно использовать следующее
a:after{
content: " " url(flower.gif);
}
Можно также использовать функцию attr() для вставки значений атрибутов элементов после элемента. Например, можно вставить цель каждой ссылки в документ в скобках с помощью следующего кода:
a:after{
content: "(" attr(href) ")";
}
Такие
Можно также вставить увеличивающиеся цифровые значения после повторяющихся элементов (таких как маркеры списка или параграфы), используя функцию article по счетчикам CSS (http://dev.opera.com/articles/view/automatic-numbering-with-css-counters/).
Еще одной вещью, с чем вы будете регулярно cталкиваться в этом курсе, является сокращенная запись CSS. Можно объединить несколько связанных свойств CSS в одно свойство, чтобы сберечь свое время и усилия. В этом разделе мы рассмотрим доступные типы сокращений.
border: 2px solid black; является сокращением для отдельно определяемых border-width: 2px;, border-style : solid; border-color : black;.Рассмотрим следующее
div.foo {
margin-top: 1em;
margin-right: 1.5em;
margin-bottom: 2em;
margin-left: 2.5em;
}
Это
div.foo {
margin: 1em 1.5em 2em 2.5em;
}
Сокращенное значение может иметь менее четырех значений, согласно приведенному ниже списку. Результаты упорядочены по числу предоставленных значений:
margin: 2px ;.margin: 2px 5px;.margin: 2px 5px 1px;.Обычно разумнее всего предоставлять все четыре значения для сокращенных свойств, по причинам удобочитаемости. Этот совет применим также к сокращенному свойству заполнения.
Сокращенные свойства полей и заполнений составляют обычно наибольшую долю применения, хотя существуют ситуации, когда сокращенные свойства лучше не использовать, или, по крайней мере, использовать с осторожностью, как в следующих случаях:
border ) только для одной границы элемента следующим образом:border-left-width: 2px; border-left-style: solid; border-left-color: black;
margin ), заполнения ( padding ) и границы ( border ): Все это действует таким же образом как было показано выше в разделе "Выбор между одиночным свойством и сокращенным значением".font-size: 1.5em; line-height: 200%; font-weight: bold; font-style: italic; font-family: Georgia, "Times New Roman", serif;
Можно определить все это с помощью следующей строки:
font: 1.5em/200% bold italic Georgia,"Times New Roman",serif;
background-color: #000; background-image: url(image.gif); background-repeat: no-repeat; background-position: top left;Это можно представить с помощью следующего сокращения:
background:#000 url(image.gif) no-repeat top left;
list-style-type: circle; list-style-position: inside; list-style-image: url(bullet.gif);
Это эквивалентно следующему:
list-style: circle inside url(bullet.gif);
Существует три способа применения CSS к документу HTML: строковые,
Можно применить таблицу стилей к элементу, используя атрибут style следующим образом:
<p style="background:blue; color:white; padding:5px;">Paragraph</p>
Внутри этого атрибута перечисляются все свойства CSS и их значения (каждая пара свойство/значение отделяется друг от друга точкой с запятой, и каждое свойство отделяется от своего значения в каждой паре двоеточием). Таким образом определяют стили в CSS. В качестве примера можно рассмотреть следующий код страницы.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 1//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Inline Styles Example</title>
</head>
<body>
<h1>CSS Basics Example</h1>
<ul id="menu">
<li>Item</li>
<li class="warning">Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
<p>Paragraph</p>
<p style="background:blue;color:white;padding:5px;">Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p class="warning">Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li id="extra">Item</li>
<li>Item</li>
</ul>
</body>
</html>
Если открыть этот пример в браузере, то можно видеть, что параграф с атрибутом style будет синим с белым текстом и будет иметь другой размер по сравнению с другими, как показано на рисунке 27.1.
(рис 27.1) Браузер Opera показывает параграф с примененной строковой таблицей стилей иначе, чем другие параграфыПреимущество строковых стилей состоит в том, что браузер будет вынужден использовать эти настройки. Все другие стили, определенные в других таблицах стилей, или даже
Большая проблема строковых стилей состоит в том, что они делают обслуживание значительно труднее, чем это должно быть. Использование CSS предназначено для разделения представления документа и его структуры, но строковые стили делают именно обратное — рассеивают
Кроме проблем с обслуживанием, вы не получите никаких преимуществ самой мощной части CSS: каскадирования. Мы вернемся к более подробному рассмотрению каскадирования в следующей лекции, но пока достаточно знать, что использование каскадирования означает, что вы определяете внешний вид в одном месте, а браузер применяет его ко всем элементам, которые соответствуют определенному
style, как в следующем примере страницы:
<style type="text/css" media="screen">
p {
color:white;
background:blue;
padding:5px;
}
</style>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 1//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Embedded Styles Example</title>
<style type="text/css" media="screen">
p{
color:white;
background:blue;
padding:5px;
}
</style>
</head>
<body>
<h1>CSS Basics Example</h1>
<ul id="menu">
<li>Item</li>
<li class="warning">Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p class="warning">Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li id="extra">Item</li>
<li>Item</li>
</ul>
</body>
</html>
Если открыть эту страницу в браузере, то вы увидите, что определенные стили применяются ко всем параграфам в документе, как показано на рисунке 27.2. Просмотрите также исходный код примера страницы, чтобы увидеть код CSS в заголовке.
(рис 27.2) Браузер Opera показывает все параграфы со стилями, определенными во вложенной таблице стилейПреимущество style в каждый параграф — можно оформить их все с помощью одного единственного определения. Это означает также, что если потребуется изменить внешний вид всех параграфов, это можно будет сделать в одном единственном месте, однако все это, тем не менее, ограничено одним документом — как быть, если вы захотите определить внешний вид параграфов всего сайта? Воспользуйтесь
link в заголовке документа.
Рассмотрите исходный код примера страницы:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 1//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>External Styles Example</title>
<link rel="stylesheet" href="styles.css" type="text/css" media="screen">
</head>
<body>
<h1>CSS Basics Example</h1>
<ul id="menu">
<li>Item</li>
<li class="warning">Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p class="warning">Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li id="extra">Item</li>
<li>Item</li>
</ul>
</body>
</html>
и обратите внимание, что заголовок содержит элемент link, который ссылается на этот внешний файл CSS,
h1{
background:gray;
padding:1em;
}
p{
color:green;
padding:.5em;
}
и проверьте, что стили оформления, определенные во внешнем файле CSS, применены к коду HTML. Давайте внимательнее посмотрим на элемент link:
<link rel="stylesheet" href="styles.css" type="text/css" media="screen">
Мы говорили об элементе link раньше в курсе. Напомним, что атрибут href указывает на файл CSS, атрибут media определяет какой носитель информации должен использовать эти стили оформления (в данном случае это будет screen (экран), так как мы не собираемся выводить документ на печать в таком виде), а атрибут type определяет, чем является присоединенный ресурс (расширения файла будет для определения этого недостаточно).
(рис 27.3) Браузер Opera использует стили, определенные во внешней таблице стилей, когда она соединяется с элементом linkЭто лучший из всех способов: вы храните все определения оформления в одном единственном файле, что означает, что можно делать изменения по всему сайту, изменяя только один файл, а браузер может загрузить его один раз и затем кешировать для всех других документов, которые на него ссылаются, что уменьшает объем загружаемой информации.
Существует в действительности другой способ импорта @import. Он вставляется во вложенную таблицу стилей, таким же образом, как показанный выше
<style type="text/css" media="screen">
@import url("styles.css");
...другие операторы импорта или стили CSS могут находиться здесь ...
</style>
Иногда вы увидите операторы импорта без скобок, но это означает то же самое. Необходимо знать еще, что оператор @import должен всегда быть первым во вложенной таблице стилей. Наконец, вы можете определить, что импортированная таблица стилей будет применена только к определенным типам носителей информации (медиа), включая тип медиа в конце оператора импорта (это работает во всех браузерах, за исключением IE6 и младших версий). Следующий пример делает то же самое, что предыдущий пример кода:
<style type="text/css">
@import url("styles.css") screen;
...другие операторы импорта или стили CSS могут находиться здесь ...
</style>
Первый вопрос, который вы зададите, будет следующим: "зачем мне нужен другой способ применения @import включена здесь скорее для полноты. Существуют небольшие незначительные достоинства/недостатки использования @import или элементов link, но они очень небольшие, поэтому вы можете выбрать, какой способ вам больше нравится. Хотя элементы link считаются сегодня лучшим способом.
@import, поэтому полностью его игнорируют (Netscape 4 и более старые, и IE 4 и более старые, если вы пропустите скобки вокруг имени файла). Можно, поэтому, использовать оператор @import для скрытия стилей от старых браузеров, которые будут использовать их неправильно. Можно поместить современные стили оформления во внешней таблице стилей и импортировать их с помощью @import, а затем предоставить несколько самых базовых стилей оформления, которые не вызовут проблем у IE/Netscape 4. Это полезно, но сегодня крайне редко может понадобиться обеспечивать совместимость с IE/Netscape 4!@import, поэтому это не лучший способ для использования нескольких таблиц стилей для различных информационных носителей.@import меньше, чем код для нескольких элементов link, но это крайне незначительно.В этом руководстве мы познакомились с применением CSS к документам HTML, либо как строковых стилей с помощью атрибута style, либо как style в заголовке документа, либо как link — имеет наибольший смысл, как с точки зрения обслуживания, так и
В следующем руководстве мы углубимся в детали CSS, рассматривая каскадирование и более подробно особенности
Крис Хайлман проработал Web-разработчиком в течение десяти лет, после того как бросил радио-журналистику. Он работает для Yahoo! в Великобритании в качестве инструктора и ведущего разработчика, и осуществляет надзор за качеством кода внешнего представления для Европы и Азии.
Крис поддерживает блог на сайте Wait till I come (http://wait-till-i.com/) и доступен во многих социальных сетях под ником "codepo8".
Bluesmoon (http://www.flickr.com/photos/bluesmoon/1545636474/)
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.