На этой странице:
width
и height
Свойства width
и height
задают ширину и
высоту элемента, под которыми понимаются размеры области содержимого
элемента (без рамок, внутренних и внешних отступов).
![]() Эти свойства игнорируются для строчных незамещаемых элементов.
Значение |
|
Файл style.css
P.first { width:50%; height:150px; background:#a7fbc0; } ![]() |
Файл index.htm
|
Если размеры элемента малы, возникает опасность переполнения его
содержимым. Для управления такой ситуацией CSS предлагает
свойство overflow
.
По умолчанию работает значение |
|
Для иллюстрации значений свойства overflow
будем использовать следующую пару HTML/CSS:
PRE { width:200px; height:5em; background:#ffca4c; }
Вы можете посмотреть, как браузер обрабатывает переполнение,
если свойство |
|
visible
|
Значение По стандарту содержимое в этом случае должно выходить за границы элемента. |
|
Браузер IE-6 нарушает стандарт, растягивая область содержимого элемента. |
scroll
|
Значение |
auto
|
Значение |
hidden
|
Значение |
Если имена свойств width
и height
снабдить
приставкой min-
или max-
, получим имена свойств,
ограничивающие ширину и высоту элемента.
Одно из наиболее частых применений — ограничение ширины “резиновой” страницы. При уменьшении окна наступает момент, когда браузерам становится трудно выполнить вёрстку и разметка рушится: блоки наползают друг на друга или проваливаются вниз. Браузер, при переходе через ограничение минимальной ширины, включает горизонтальную прокрутку, не пытаясь сверстать страницу в неудобных размерах. |
|
Одно из наиболее частых применений — ограничение ширины “резиновых” колонок текста или всей “резиновой” страницы. Как известно, читать текст, в котором слишком длинные (или слишком короткие) строки некомфортно. Оптимальная длина строки зависит от разных параметров, таких как, размер, жирность, тип шрифта, ширина межстрочных и межсимвольных промежутков. Приблизительно можно считать, что оптимум составляет 40–60 символов, минимум — 30, а максимум — 80 символов. |
|
В этом определении заданы:
|
Пусть блок задан при помощи кода: <DIV class="area"> Содержимое блока </DIV>
Напишем для .area { padding: 10px; margin: 20px; border: 5px solid black; width: 400px; height: 300px; } |
|
По стандарту W3C ширина и высота относятся к содержимому блока. Браузеры, построенные на движке Gecko (например, Mozilla Firefox), и браузер Opera точно следуют в этом вопросе стандарту W3C. А вот браузеры Internet Explorer версий 5 и 6 трактуют ширину и высоту блока по-другому. Они считают, что заданная в определении ширина и высота относится ко всему блоку в целом, исключая внешние отступы.
Таким образом, в IE 5 и IE 6 ширина и высота
содержимого блока в соответствии с заданным определением
|
Эта разница приводит к краху блочной разметки в устаревших (но ещё популярных) версиях IE, если разработчик следовал стандартам.
Указанная особенность полностью относится к IE пятых версий и к
версии IE6, если в декларации DOCTYPE
(см. ниже на этой странице)
указан стандарт Transitional
(или Frameset). Модель Strict браузер IE6 обрабатывает уже по
стандарту W3C.
Самый простой способ избежать обозначенной проблемы — не задавать внутренние отступы и границы для блока, если для него указаны ширина или высота. Отступы и границу можно задавать для родителя или потомков. Если такое решение невозможно, то надо воспользоваться известными трюками, один из которых описан ниже.
Итак, надо объявить ширину блока в 400 пикселов. Если у блока нет
внутренних отступов и рамок, то просто пишем width:400px
—
это будет будет работать для всех браузеров, которые понимают CSS.
Если общая ширина внутренних отступов и рамок по горизонтали
составляет 50 пикселов, то для браузеров IE5 и IE6 надо указывать
width:450px
, а для остальных по-прежнему width:400px
.
Проблему решает следующий CSS-код:
.area { width:400px; /* Для хороших старых браузеров */ \width:450px; /* Обман для IE5 и IE6 */ w\idth:400px; /* Для всех новых хороших браузеров */ }
Трюк основан на использовании символа “\
” —
обратной косой черты. Это допустимый символ, описанный
в стандарте CSS. Он используется в качестве модификатора,
меняющего специальный смысл следующего за ним знака на обычный.
Например, этот символ можно использовать для того, чтобы поместить обычные кавычки внутрь служебных:
"Фото 5\"А\" класса"
Обратная косая черта отменяет специальный смысл кавычки, которая следует непосредственно за ней.
А если у символа нет специального смысла? Значит, и отменять нечего,
символ остаётся прежним. Использовать обратную косую черту можно не
только в записи строки, но и в записи названий свойств. Таким образом,
\width
и w\idth
полностью эквивалентны
width
. Какой же смысл в приведённом трюке?
.area { 01 width:400px; /* Для хороших старых браузеров */ 02 \width:450px; /* Обман для IE5 */ 03 w\idth:400px; /* Для всех новых хороших браузеров */ }
Первая строка уловки — для тех браузеров, которые работают по
стандарту, но не понимают модификатора (к ним относится, например,
браузер Opera 5). Эти браузеры будут рассматривать символ
“\
”, как обычный знак, входящий
в состав имени свойства, не “узнают” width
и
пропустят строки 2 и 3.
Вторая строка — для браузера IE5, который работает не по стандарту, не
считает обратную косую черту модификатором в середине слова, но, по
счастью, считает этот знак модификатором, если с него слово
начинается. Таким образом, IE5 (и IE6, если он работает в режиме IE5)
сначала прочитает 400px
в первой строке, потом изменит
это значение на 450px
из второй строки, а третью строку
проигнорирует.
Третья строка — для совсем хороших браузеров: тех, которые работают во всём по стандарту, в том числе правильно понимают символ обратной косой черты.
|
Пусть требуется построить блок |
Решением будет следующий набор CSS-определений:
.area { background:#a7fbc0; margin:15px; border:5px solid #4d4d4d; padding:20px; width:400px; /* Для хороших старых по стандарту */ \width:450px; /* Обман для IE5 */ w\idth:400px; /* Для всех новых хороших по стандарту */ height:300px; /* Для хороших старых по стандарту */ \height:350px; /* Обман для IE5 */ he\ight:300px; /* Для всех новых хороших по стандарту */ }
Нельзя было записать h\eight
по следующей причине.
Знак “\
” используется и для
кодирования символов 16-ричными цифрами. Если за обратной
косой чертой следует один из знаков 0–9, a, b, c, d, e, f, то это
воспринимается как начало 16-ричного кода.
DOCTYPE
Полный HTML-код последнего примера имеет вид:
В тег <HTML>
добавлен
атрибут lang
с указанием русского языка, но главное,
перед HTML
появился странный элемент
DOCTYPE
. Мы теперь всегда так будем начинать
свои HTML-коды.
Дело в том, что браузер должен знать, на каком языке написана страница, чтобы
правильно отобразить её на экране (или другом устройстве). Для этого
в первой строке кода необходимо записывать конструкцию
DOCTYPE
.
DOCTYPE
является ключевым компонентом в совместимости страниц, кроме того, выборDOCTYPE
влияет на поведение вашей Web-страницы в различных браузерах.Джеффри Зельдман, «Web-дизайн по стандартам»
Очень сильно влияет! Ваша визуальная разметка, выполненная
средствами CSS по стандартам W3C, может потерпеть крах на экране,
если DOCTYPE
не будет записан.
Элемент DOCTYPE
предназначен для указания соответствия
кода документа одному из стандартов W3C. Браузер, в зависимости от
стандарта, по-разному интерпретирует элементы на странице.
Элемент DOCTYPE
— это, скорее даже не элемент, а
описание (декларация), имеющее свой собственный синтаксис.
Декларацию DOCTYPE
помещают перед элементом
HTML
, она начинается с восклицательного
знака и записывается прописными буквами.
Варианты DOCTYPE
для HTML 4.01 приводятся ниже.
Предусмотрено 3 стандарта языка HTML 4.01:
Код не содержит элементов и атрибутов, помеченных W3C как
«устаревшие» или «не одобряемые» (например:
CENTER
, FONT
,
S
, U
,
align
, background
, bgcolor
,
color
, size
).
Декларация записывается в виде:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
Код может содержать устаревшие теги, вариант введён в целях совместимости со старыми версиями HTML.
Декларация записывается в виде:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Аналогичен Transitional, но содержит также элементы для создания наборов фреймов.
Декларация записывается в виде:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
DOCTYPE
выбрать?Вариант Frameset отбрасываем сразу, так как фреймы — это рудимент прошлого века, и использовать их мы не собираемся.
В переходной период, когда браузеры не на 100% поддерживают стандарты, ничего другого не остаётся для практики, как выбрать переходной стандарт Transitional.
Таким образом, код любой нашей странички должен иметь такой вид:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML lang="ru"> ... </HTML>
Атрибут lang
со значением ru
определяет
русский язык в качестве базового языка на страничке.
Информация о языке, определённая атрибутом lang
, может быть
использована Пользовательским Агентом (ПА) для управления
представлением различными путями.
Вот некоторые ситуации, где предоставленная автором информация о языке может быть полезной:
Цель атрибута lang — создать ПА условия для более понятного представления содержимого на базе принятой для данного языка культурной практики.
Давайте посмотрим, как браузер выполняет вёрстку страницы на экране по умолчанию. Алгоритм, описанный ниже, называют вёрсткой потоком или просто потоком.
|
Элемент
Внутри |
По умолчанию браузер выводит блочные элементы друг за другом сверху
вниз. При этом ширина блочного элемента совпадает с доступной
шириной родителя (его свойством width
), а высота
определяется по содержимому.
Каждый раз, когда внутри блока обнаруживаются блочные элементы, они строятся на экране прямоугольниками сверху вниз по ширине родителя.
Если в блоке есть смесь блочных и строчных элементов (на уровне прямых потомков), то все строчные элементы (а также неразмеченный текст) собираются в безымянные блоки и строятся по описанному выше алгоритму построения блоков.
|
Если внутри блока нет других блоков, а только строчные элементы, браузер выводит их в строку, пытаясь заполнить всю ширину родительского блока. Если материал в одной строке не умещается, он переносится на следующие строки. |
Строки по умолчанию выравниваются со стороны, принятой для текущего языка (слева для русского).
При изменении ширины окна браузер перевёрстывает страницу: ширину блоков подгоняет под новый размер, ширину строк под изменившуюся ширину содержащих их блоков. В силу этого вёрстку потоком часто называют резиновой вёрсткой.
auto
Построим страницу с тремя абзацами. Для второго абзаца укажем ширину, высоту, отступы и рамку и посмотрим, как результат согласуется с алгоритмом работы потока.
Файл style.css
.area { background:#a7fbc0; margin:15px; border:5px solid #4d4d4d; padding:20px; width:300px; \width:350px; w\idth:300px; height:100px; \height:150px; he\ight:100px; } ![]() |
Файл index.htm
|
![]() |
Создаётся впечатление, что второй абзац выпадает из потока: его
ширина не равна ширине родителя Впечатление неверное: мы забыли про внешние отступы. Да, но отступ справа совсем не похож на 15 пикселов, он существенно больше! |
![]()
Внешний отступ справа изменён на |
Конечно, больше! Он такой, что общая ширина абзаца (со
всеми отступами и рамками) в точности равняется ширине родителя
Да, но мы задали все внешние отступы равными 15 пикcелов:
|
Был продемонстрирован пример, в котором браузер заменяет
заданный внешний отступ справа на auto
, чтобы уложить
элемент в поток. Однако значение auto
можно явно указывать
в CSS-правилах для внешних отступов и размеров. Рассмотрим работу значения
auto
отдельно по горизонтали и вертикали.
Горизонтальным форматированием блока можно управлять при помощи семи свойств:
margin-left
— внешний отступ слева;
border-left
— рамка слева;
padding-left
— внутренний отступ слева;
width
— ширина содержимого;
padding-right
— внутренний отступ справа;
border-right
— рамка справа;
margin-right
— внешний отступ справа.
|
Только 3 свойства из 7 могут принимать значение
|
Алгоритмы работы этих свойств при значении auto
основаны на общем правиле горизонтального форматирования потока.
Сумма размеров горизонтальных компонентов блока в потоке всегда
равна значению width
родителя.
Если одному из свойств margin-left
, width
или margin-right
задано значение auto
, а
для остальных — определённые значения, то свойство, заданное,
как auto
, определяет размер, необходимый для размещения
блока по ширине родителя.
На этом правиле основан способ выравнивания блока по отношению к родителю.
|
Выравнивание слева: .block {width:350px;margin-right:auto;} |
|
Выравнивание справа: .block {width:350px;margin-left:auto;} |
Блок с автоматическим свойством |
Растягивание содержимого блока до заданных отступов: .block { width:auto; margin-left:50px; margin-left:150px; } |
Если оба отступа установлены в |
Выравнивание по центру: .block { width:350px; margin-left:auto; margin-right:auto; } |
Браузеры IE пятых версий не центрируют блок таким образом.
Эту ошибку IE5.* можно компенсировать другой ошибкой этих браузеров: по
указанию text-align:center
браузеры IE5.* центрируют не
только текст (как требует стандарт), но и блоки.
В этом гипертекстовом документе для центрирования
BODY
относительно HTML
применён следующий трюк:
HTML { text-align: center; /* Центрирование BODY для IE5 */ } /* Определения для блока BODY, вложенного в блок HTML */ BODY { margin: 10px auto; /* Выравнивание BODY по центру (по стандарту)*/ text-align: left; /* Восстановление выравнивание текста слева */ }
Посмотрим теперь, как будут вычисляться размеры, если присвоить
значение auto
одному из отступов и ширине.
В данном случае в нуль обращается отступ |
Запишем определение: .block { width:auto; margin-left:50px; margin-right:auto; }
Отступ со значением |
Если значение auto
принимают все три свойства, оба
отступа обращаются в нуль, а ширина становится максимальной.
Наконец, если всем трём свойствам заданы определённые значения, то
свойству margin-right
принудительно присваивается
auto
для языков с написанием слева направо. Для языков
с написанием справа налево в auto
устанавливается
свойство margin-left
.
Файл style.css
.area { background:#a7fbc0; margin:15px; margin-left:auto; border:5px solid #4d4d4d; padding:20px; width:300px; \width:350px; w\idth:300px; height:100px; \height:150px; he\ight:100px; } ![]() |
Файл index.htm
|
Файл
.area
{
...
margin:15px auto;
...
}
![]() |
Файл HTML-код остался прежним. |
Вертикальным форматированием блока можно управлять при помощи семи свойств, задающих размеры:
margin-top
— внешний отступ сверху;
border-top
— рамка сверху;
padding-top
— внутренний отступ сверху;
height
— высота содержимого;
padding-bottom
— внутренний отступ снизу;
border-bottom
— рамка снизу;
margin-bottom
— внешний отступ снизу.
|
Только 3 свойства из 7 могут принимать значение
|
Алгоритмы работы этих свойств при значении auto
основаны на общем правиле вертикального форматирования потока.
По вертикали блок в потоке стремится занять размер по содержимому этого блока.
Если для свойств margin-top
или
margin-bottom
задано значение auto
, им
автоматически присваивается нулевое значение.
Размер блока со значением height:auto
определяется таким
образом, чтобы его высоты как раз хватило для размещения содержимого.