Курс "WEB-master" модуль WEB-1 - занятие 7

Выбор занятия

Выберите текущее занятие

Все материалы предоставлены в образовательных целях. Для пополнения базы материалов или цитат присылайте свои тексты на эл. почту (внизу страницы).

CSS

Встраивание в HTML

Один из самых простых способов это привязка стилей к элементу при помощи атрибута style. Атрибут style может использоваться для любого тега, расположенного в теле документа. Форма записи свойства следующая: < элемент style="свойство1: значение1; свойство2: значение2;" >:

<!doctype html>
<html>
	<head>
		<title>HTML структура документа</title>
	</head>
	<body>
		<h1 style="color: red;">Заголовок красного цвета.</h1>
	</body>
</html>	

Следующий способ заключается в создании таблицы стилей прямо в документе. Для этого в HTML используется парный элемент style. Данный элемент имеет один обязательный атрибут type – MIME тип содержимого и один не обязательный media – устройства для вывода документа. Для таблицы стилей значение первого атрибута должно быть равным text/css.

<!doctype html>
<html>
	<head>
		<style type="text/css" media="all">
			body {
				background: silver;
				padding: 0;
			}
			h1 { color: red; }
		</style>
	</head>
	<body>
		<h1>Заголовок красного цвета.</h1>
	</body>
</html>	

В HTML есть такой элемент, как link. Элемент link располагается в HEAD блоке HTML документа. Он предназначен для создания связи между документами. В CSS этот элемент используется для подключения внешних таблиц стилей. Внешними, называются таблицы, расположенные отдельно от HTML документа, но используемые им. Элемент link, как и style имеет два необходимых атрибута type и media. Значения этих атрибутов, такие же, как и для элемента style. Для этого элемента необходимо задать ещё два атрибута href и rel. Атрибут href определяет URL таблицы стилей. Атрибут rel принимает в качестве своего значения тип связи между документами и для таблиц стилей, он должен принимать значение stylesheet. Для одного HTML документа можно подключить несколько внешних таблиц стилей. Например:

<!doctype html>
<html>
	<head>
		<link rel="stylesheet" href="styles/main.css" type="text/css" media="screen" />
		<link rel="stylesheet" href="styles/print.css" type="text/css" media="print" />
	</head>
	<body>
		<h1>Заголовок красного цвета.</h1>
	</body>
</html>	

Теперь остаётся создать файлы main.css и ptint.css, который будет содержать все необходимые инструкции CSS.

h1 { color: red; }	

Данный способ, немного отличается от других, т.к. он не базируется на HTML элементах или их атрибутов. Речь пойдёт о директиве @import. Эта директива из CSS, и содержаться она может только в CSS документе, то есть либо в элементе style либо во внешней таблице. Эта директива должна стоять перед всеми инструкциями CSS.

<!doctype html>
<html>
	<head>
		<style type="text/css" media="all">
			@import url(style.css);
		</style>
	</head>
	<body>
		<h1>Заголовок красного цвета.</h1>
	</body>
</html>	

Синтаксис CSS

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

<!doctype html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>Заголовки</title>
		<style type="text/css">
			h1 { color: #a6780a; font-weight: normal; }
			h2 {
				color: olive;
				border-bottom: 2px solid black;
			}
		</style>
	</head>
	<body>
		<h1>Заголовок 1</h1>
		<h2>Заголовок 2</h2>
	</body>
</html>	

Box-модель

Блочная модель (box model) — одно из фундаментальных понятий верстки.
Блочная модель CSS описывает прямоугольный блок, генерируемый для элемента в дереве документа и выводящийся согласно визуальной модели форматирования.

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

Итак, для элемента можно задать границы (рамку) и два вида отступов. Чем же они отличаются?

Основное различие сразу бросается в глаза: padding — это отступ между контентом и границей, а margin — это отступ между границей и «внешним миром».

Отсюда вытекает второе отличие — если для элемента задать фон (background), то этим фоном зальется и контент и внутренний отступ (padding). Margin же, находясь снаружи, всегда остается прозрачным.

Padding, если провести аналогию, это поля на листе бумаги. Они имеют тот же цвет, что и сам лист, но текст на них не заходит. Margin — это расстояние от края листа до другого, лежащего рядом листа или, скажем, до края стола.

Третье отличие заключается в том, что padding и margin по разному участвуют в подсчете общей ширины блока. Это зависит от принятой блочной модели.

В настоящее время существуют две основные блочные модели: модель от W3C, которая поддерживается всеми основными браузерами и, так называемая, традиционная — ее поддерживает IE6 в режиме обратной совместимости.
Структура блока элемента абсолютно одинакова. Единственное, чем отличаются различные модели — это правилами определения размеров элемента.

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

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

                                       

Давай разберемся подробно из чего состоят размеры элемента в блочной модели W3C. Рассмотрим высоту элемента:

Из рисунка понятно, что действительная высота элемента рассчитывается так: border-top+padding-top+height+padding-bottom+border-bottom.

Действительная ширина элемента соответственно будет равна: border-left+padding-left+width+padding-right+border-right.

Соответственно тот же пример «ширина элемента 100px и внутренний отступ по 10px с каждой стороны» уже даст блок с общей шириной 120px! Так как width:100px означает именно 100px под контентную зону. Все отступы и границы добавляются к этому фиксированному значению.

Логика тоже ясна: главное в блоке — его содержимое. И если я сказал сто пикселей, значит сто, и никакие паддинги и бордеры мне ничего не поменяют!

Как быть, например, в ситуации, когда width элемента равен 100%, а padding и/или border не равен 0? Тогда действительная ширина элемента будет больше 100%, а это далеко не всегда желательно.

Вот это и есть самая большая сложность блочной модели W3C: когда ширина указана в процентах, а padding и border в пикселях. Такую ситуацию нужно, если не избегать, то во всяком случае использовать пореже и с пониманием вопроса.

Как описано выше, блочная модель W3C в некоторых случаях может доставить немало хлопот, поэтому мудрые люди из того же W3C предусмотрели в CSS3 возможность переключаться между блочной моделью W3C и традиционной блочной моделью используя CSS3 свойство box-sizing

Блочная модель (box model) — одно из фундаментальных понятий верстки.