Большинство элементов, как правило, могут изменять свои размеры. Вы видели эту возможность, продемонстрированную ранее в лекции при обсуждении полей auto.
Свойствами CSS, которые используют для манипуляций размерами элементов, являются width, height, min-width, max-width, min-height, и max-height. Эти свойства можно затем разъединить (или соединить) с размерами контента элементов с помощью свойства overflow.
Существует также свойство clip, которое скрывает части элемента внутри его полей. Однако в данной лекции оно не рассматривается, в связи с его узкой областью применения.
Как правило, width и height создают именно тот результат, которые можно было бы от них ожидать. Однако их использование имеет некоторые важные особенности.
Время от времени, встречаются ситуации, когда необходимо ограничить размер элемента — обычно, чтобы гарантировать, что столбец с пропорциональными размерами всегда будет сохранять удобочитаемую ширину. Различные min - и max - свойства отвечают этим требованиям. Как и в случае со свойствами width и height, результаты, которые можно ожидать от использования этих свойств, как правило, вполне предсказуемы.
Однако, по опыту автора, эти свойства имеют ограниченное применение (хотя другие авторы с этим не согласны). Как обычные старые width и height, они зависят от ошибок округления, которые могут создавать совершенно непредсказуемые результаты. Более важно то, что они совершенно не поддерживаются в браузере IE 6, который в июле 2008 г. все еще удерживал значительную долю рынка.
Поля auto были размещены справа и слева в контейнере страницы. Теперь необходимо, чтобы width (ширина) для этих значений полей создавало какой-то смысл. Более того, планируется присвоить цитате (pullquote) значение float, поэтому она тоже получает некоторую ширину.
Изменяем ширину контейнера документа и цитаты.
#main { width: 42em; } .pullQuote { width: 14em; }
Когда задано свойство элемента width или height, необходимо иногда рассмотреть, какие требуются результаты в том случае, когда контент этого элемента занимает большее пространство, чем доступно. Это особенно касается сайтов с контентом, генерируемым пользователями, и строгими спецификациями компоновки.
Для обработки таких ситуаций предназначено свойство overflow и четыре его допустимые значения - visible, hidden, auto, и scroll. Рисунок .305 показывает результат, который они создают при применении к элементу, контент которого выходит за пределы своего ограничивающего бокса.
visible (по умолчанию) | Контент за пределами допустимых размеров элементов выводится, не оказывая влияния на поток или поля смежных элементов. Следовательно, контент одного элемента может выводиться вперемешку с контентом его соседей. Методы для исключения такого результата и для специальных случаев, вызываемых проблемами представления в браузере IE, рассматриваются в следующих лекциях. |
hidden | Весь контент, который находится за рамками элемента, будет скрыт от просмотра. |
auto | Размеры элемента будут ограничены, как в случае использования значения hidden, но в случае необходимости создаются полосы прокрутки, чтобы сделать невидимый контент доступным посетителю. |
scroll | В элемент будут встроены вертикальная и горизонтальная полосы прокрутки, даже если они не нужны. |
Теперь, когда фундаментальные свойства компоновки были рассмотрены, пришло время показать, как ширина элемента выводится в браузере согласно его свойствам CSS — и как удержать элементы от разрушения создаваемых компоновок. Некоторые результаты имеют вполне здравый смысл, в то время как другие могут показаться совершенно противоречащими интуиции. Чтобы усложнить ситуацию, на самом деле рассмотрения требуют два алгоритма компоновки: модель, определенная консорциумом WWW (W3C) в Рекомендации CSS 2.1, и модель, которая используется в более старых версиях браузера IE.
Как и в случае текста, размеры элементов можно задавать либо пропорциональными единицами измерения, такими как % и em, либо статическими единицами измерения, такими как px. Необходимо отметить также, что холст браузера всегда измеряется статическим значением, которое невозможно узнать без использования кода клиентского сценария либо для извлечения этого размера, либо для изменения размера окна — методов, которые плохо подходят для требований доступности, юзабилити и переносимости информационной среды.
По умолчанию для width используется значение auto, что на обычном языке означает "использовать все доступное пространство". Результат для блочных элементов состоит в том, что их вычисленная ширина занимает все это пространство. В отношении height, элементы по умолчанию растягиваются, чтобы охватить весь свой контент.
Если вы изменяете значения width и height, то затем надо быть очень внимательным, чтобы гарантировать, что контент элемента поместится (со своими полями, границами, и заполнением) в определенную ширину. Легче всего это сделать, используя следующий процесс:
Единица измерения | Преимущества | Недостатки |
---|---|---|
em |
|
|
процент |
|
|
px |
|
|
Боксовая модель является, в действительности, просто последовательностью директив, которые определяют, как различные спецификации элемента компоновки взаимодействуют друг с другом. Компонентами, рассматриваемыми в боксовой модели являются:
Последний из этих пунктов, в свою очередь, включает остальные пять. Однако, с целью упрощения изложения, этот раздел будет рассматривать только простые отношения элементов предок-потомок, и отложим обсуждение взаимодействий многоуровневой боксовой модели до будущих статей, которые будут рассматривать более тонкие моменты компоновки страниц.
Основное правило состоит в том, что вычисленная ширина или высота элемента равна следующему:
margin + border + padding + (width|height)
Во многих случаях ширина и/или высота будут задаваться как автоматическое значение по умолчанию, что означает, что область холста, предназначенная для контента, равна следующему:
available_canvas - margin - padding - border
В этом уравнении available_canvas (доступный_холст) само является дискретным значением (если часто не автоматически вычисляемым), минус величина полей, границ и заполнения. Это число наиболее важно для ширины элементов, так как ошибки вычисления ширины со стороны дизайнера будут иметь нежелательный результат, вызывая появление в окне браузера горизонтальной полосы прокрутки. Кроме того, браузеры всегда помещают элементы по левому краю холста браузера, что будет иначе приводить к переполнению за правый край окна браузера, если не будет задана команда сделать иначе.
Рассмотрим следующее правило таблицы стилей:
#myLayoutColumn { width: 50em; margin: 1.5em auto 1.5em auto; border: .1em; padding: .9em; }
Как было рассмотрено выше, во время объяснения свойств полей, можно ожидать, что #myLayoutColumn будет центрировать себя в элементе своего контейнера, будет ли этот контейнер body, или чем-то созданным разработчиками.
Более того, если активация "строгого режима" (используя соответствующее объявление !DOCTYPE) заставляет использовать боксовую модель W3C, то можно также ожидать, что вычисленная не-предельная ширина будет:
0.1em + .9em + 50em + .9em + .1em = 52em
В информационной среде screen браузер возьмет тогда это значение, округлит все значения по отдельности до ближайшего пикселя, и выведет соответственно результат.
Когда используется боксовая модель W3C, пропорциональные поля и заполнение вычисляются относительно вычисленной ширины содержащего элемента. В качестве примера, если определить поле: 20% для элемента, который содержится внутри элемента шириной 800 пикселей, то изображенное поле вокруг первого элемента будет 160 пикселей со всех сторон (так как 20% от 800 равно 160).
Если этому же элементу присвоено заполнение: 5%, то его вычисленная ширина контента будет 400 пикселей:
20% + 5% + 5% + 20% = 50% 0.50 x 800 = 400 800 - 400 = 400