Введение в стандарты Web

Модель компоновки CSS - боксы, границы, поля, заполнение

Разбить на страницы
Показывать лекцию целиком

Введение

На первый взгляд, модель компоновки CSS является простым делом. Боксы, границы и поля являются достаточно простыми объектами, а синтаксис CSS предоставляет простой способ описания их характеристик.

Однако процессоры визуализации браузеров следуют длинному списку правил, изложенных в Рекомендации CSS 2.1, и некоторым своим собственным. В связи с этим имеется множество деталей, которые необходимо понимать, прежде чем добавлять в набор используемых средств стилиста более развитые методы.

В этой лекции мы познакомимся со свойствами CSS, которые управляют компоновкой элементов HTML, включая их границы, поля, и многое другое. Будут также рассмотрены некоторые упомянутые выше правила. Развитая столбцовая компоновка и сеточно-ориентированные методы будут рассмотрены в последующих лекциях, которые исследуют компоновку форм, обтекание, очистку, и позиционирование более подробно. Будет рассмотрено много связанных с лекцией примеров кода для демонстрации обсуждаемых методов.

Лекция имеет следующее содержание:

  • Изменение композиции: поля, границы и заполнение CSS
  • Размещение пробелов вокруг объекта: свойства margin-top, margin-right, margin-bottom, margin-left, и margin
  • Автоматические поля
  • Отрицательные поля
  • Сжатие полей
  • Пример 1
  • Добавление к объекту границы: свойства границ
  • Свойства border-width
  • Свойства border-color
  • Сокращенное свойство border и его четыре родственника, более подробно
  • Создание правил: обоснование пяти свойств сокращения border … вместо одного
  • …И зачем так много свойств? Они же просто границы, не так ли?
  • Пример 2
  • Когда одних полей недостаточно: свойства заполнения
  • Пример 3
  • Работа с шириной и высотой элемента
  • Основы ширины и высоты
  • min-width, max-width, min-height, и max-height
  • Пример 4
  • Переполнение: ограничение в контенте, или задание свободным
  • Результаты четырех значений переполнения
  • Боксовые модели CSS: подгонка друг к другу
  • Выбор подходящих единиц измерения для компоновки
  • Основное правило задания размеров элементов: смешивайте пропорциональные и статические единицы измерения с осторожностью, или вообще не смешивайте!
  • Выбор для компоновки подходящих единиц измерения: преимущества и недостатки
  • Компоненты боксовой модели
  • Боксовая модель W3C: все является аддитивным
  • Пропорциональные поля и заполнение в боксовой модели W3C
  • Работа с потоком документа
  • Типы элементов и свойство display
  • Пример 5
  • Обтекание элементами других элементов: свойство float
  • Пример 6
  • Размещение элементов ниже своих плавающих предшественников: свойство clear
  • Заключение
  • Дополнительное чтение
  • Контрольные вопросы
  • Изменение композиции: поля, границы и заполнение CSS

    Многие элементы HTML, такие как элементы div и заголовки, изображаются по умолчанию по всей ширине холста браузера и инициируют терминальные разрывы строки, так что несколько таких элементов в последовательности будут выводиться в стеке сверху вниз на холсте документа.

    Однако элементов HTML и стилей браузера, заданных обычно для них, будет недостаточно для целого диапазона вариантов использования, к рассмотрению которых обращаются разработчики в своей работе. Совместная работа CSS и HTML предназначена для "заполнения пробелов", так что классы и id могут добавлять семантическое значение к разметке, в то время как правила таблиц стилей могут изменить компоновку и представление контента — возможно даже вообще отменяя большую часть используемых по умолчанию стилей браузера.

    Точное управление свободным пространством является одним из самых важных инструментов дизайнера — и по мнению автора, единственным самым важным. Однако, та степень управления свободным пространством, которая обеспечивает высокое качество дизайну сайта, отсутствует в используемых по умолчанию таблицах стиля браузера, что означает, что стилисты часто используют рассматриваемые в этой лекции поля, границы, заполнение и другие свойства компоновки CSS.

    Поля (margin), границы (border), и заполнение (padding) организованы, как показано на рисунке 30.1.

    (рис 30.1) Иллюстрация различных частей бокса элемента, помеченных соответствующими свойствами CSS.

    Размещение пробелов вокруг объекта: свойства margin-top, margin-right, margin-bottom, margin-left, и margin

    Поля можно определять по отдельности или в сокращенном правиле. Более того, сокращенное правило позволяет, тем не менее, управлять отдельными границами вокруг объекта. Допустимые значения обычно определяют в единицах измерения px или em (пикселях или em). В таблицах стилей, предназначенных для печати, вместо них можно использовать единицы измерения in, cm, или pt (дюймы, сантиметры или пункты).

    Во всех случаях % (процент) является допустимым значением, но должен использоваться с осторожностью; такие значения вычисляются как доля от ширины элемента предка, и беззаботное использование таких значений может иметь непредвиденные последствия. Эта проблема подробнее рассматривается ниже во время обсуждения боксовой модели CSS.

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

    Автоматические поля

    В зависимости от обстоятельств, задание значения auto говорит браузеру, что надо вывести поле согласно значению, имеющемуся в его собственной таблице стилей. Однако, когда такое поле применяется к элементу со значимой шириной, поле auto заставляет все доступное пространство выводиться как пробел.

    Рассмотрим следующее правило:

    .narrowWaisted {
      width: 16.667em;
      margin: 1em auto 1em auto;
    }

    … Блочный элемент класса narrowWaisted будет центрировать себя в середине доступного холста.

    … Или для правого поля применяемого элемента можно задать некоторое относительное небольшое значение, в то время как левому полю присваивается значение auto.

    Когда делается таким образом, этот элемент будет выглядеть почти прижатым вправо.

    Отрицательные поля

    Всем свойствам полей можно присваивать отрицательные значения. В этом случае смежное поле может быть фактически до некоторой степени "исключено". При задании достаточно большого отрицательного поля для достаточно большого элемента смежный элемент может даже перекрываться.

    Например, рассмотрим следующие простые элементы div.

    <div id="header"><h1>Lovely header</h1></div>
    <div id="content"><p>Overlapping text is entirely unreadable</p></div>

    При оформлении с помощью следующего CSS

    body {background-color:white; font-family:Geneva, Arial, Helvetica, sans-serif;}
    #header {background-color:yellow;}
    h1 {color:red; font-size:2em; }

    создается вывод, показанный на рисунке 30.2:

    (рис 30.2) Два элемента из простого примера. Ничего особенного для просмотра.

    Теперь начинается интересное. Добавим достаточно значительное отрицательное поле сверху у нижнего элемента, используя следующее правило:

    #content {margin-top:-3em;}

    Это создает визуальный эффект смещения элемента вверх, так что он перекрывается с заголовком, как показано на рисунке 30.3.

    (рис 30.3) При применении отрицательных полей нижний элемент смещается вверх и перекрывает заголовок.

    Сжатие полей

    В тех случаях, когда два аналогичных и смежных блочных элемента имеют ненулевые поля, будет применяться только большее из двух полей. Например, рассмотрим следующее правило:

    p {
      margin: 1em auto 1.5em auto;
    }

    Если документ, включающий это правило стиля, выводится буквально, то получающееся поле между двумя параграфами в последовательности будет составлять 2.5em, как сумма нижнего поля параграфа 1 (1.5em) и верхнего поля параграфа 2 (1em). Однако благодаря применению сжимаемых полей, поле между ними будет только 1.5em.

    Списки и заголовки являются особенными среди блочных элементов, поэтому их поля не будут сжиматься с полями других блочных элементов.

    Пример 1

    В лекции об оформлении текста верстка начального раздела рассказа Ф. Скотта Фитцджеральда была сделана с помощью множества инструментов, доступных в CSS. Для демонстрации в этой лекции будет снова использоваться та же самая страница с некоторыми небольшими изменениями (в основном, добавление элемента контейнера вокруг всего основного текста). Оформление текста не изменяется, но в данном примере удалены несколько использованных стилей компоновки.

    Для начала будут добавлены поля ко всем элементам, где они нужны.

    Начальная таблица стилей

    body {
    	font-size: 14px;
    	font-family: Palatino,'Palatino Linotype',Georgia, sans-serif;
    }
    
    p {
    	text-align: justify;
    	text-indent: 1.429em;
    	line-height: 1.5;
    }
    
    q {
    	letter-spacing: .143em;
    }
    
    q:before,
     q:after {
    
    	content: "";
    }
    
    h1 {
    	font-size: x-large;
    	font-family: Helvetica,Arial,sans-serif;
    	font-style: italic;
    }
    
    blockquote {
    	font-family: Helvetica,Arial,sans-serif;
    }
    
    blockquote p {
    	text-align: left;
    	text-indent: 0;
    }
    
    .sectionNote {
    	font-size: medium;
    	font-style: normal;
    }
    
    .attribution {
    	font-size: small;
    	line-height: 1.5;
    }
    
    .author {
    	font-weight: bold;
    	text-transform: uppercase;
    }
    
    .source a {
    	text-decoration: none;
    }
    
    .pullQuote {
    	word-spacing: .143em;
    }
    
    .opening {
    	font-variant: small-caps;
    }

    Новые границы для тела, заголовка, цитаты, контейнера документа, и параграфов

    Новые правила:

    body { margin: 0; }
      #main { margin: 0 auto 0 auto; }
      h1 { margin: 0 0 1em 0; }
      .pullQuote { margin: auto 0 1em 1em; }
      p { margin: 0; }
      .attribution { margin: 0 0 1.5em 0; }

    Добавление к объекту границы: свойства границ

    Существует сокращенное свойство границы, но оно будет полезно, только когда вы захотите предоставить полную и согласованную границу вокруг всех четырех сторон элемента. Можно также задать толщину, стиль и цвет любой из четырех возможных сторон элемента, используя любые мыслимые комбинации следующих свойств.

  • border-width
  • border-style
  • border-color
  • border-top
  • border-top-width
  • border-top-style
  • border-top-color
  • border-right
  • border-right-width
  • border-right-style
  • border-right-color
  • border-bottom
  • border-bottom-width
  • border-bottom-style
  • border-bottom-color
  • border-left
  • border-left-width
  • border-left-style
  • border-left-color
  • Свойства border-width

    Эти свойства ведут себя точно так же, как и можно было бы ожидать: они задают явную толщину одной или нескольких сторон границы.

    Сокращенное свойство border-width принимает значения в той же нотации, что и сокращенное свойство margin, за исключением того только, что значения процента не поддерживаются. Вполне можно написать правило подобное следующему:

    td {
    	border-width: 1px 0 0 1px;
    }

    Свойства border-style

    (рис 30.4) Восемь обычных стилей границы в действии.

    Свойства border-style обычно принимают какое-либо из следующих значений:

    dashed Длина пунктиров и величина пробела между ними определяется браузером.
    dotted Величина пробела между точками (которые могут быть любой формы с отношением сторон 1) определяется браузером.
    double Заданная толщина делится на три и изображается в порядке заполнено-отсутствие-заполнено.
    groove Изображается трехмерная вдавленная граница.
    inset Граница будет затенена, чтобы заставить ее выглядеть, как будто элемент, к которому она применяется вдавлен в холст.
    none Эквивалентно определению -width равной нулю.
    outset Граница будет затенена, чтобы заставить ее выглядеть, как будто элемент, к которому она применяется выдавлен из холста.
    ridge Изображается трехмерная выпуклая граница.
    solid Граница выводится как сплошная незатененная линия.

    Когда используется сокращенное свойство border-style, оно может принимать до четырех значений, которые применяются таким же образом, как значения сокращенного свойства margin.

    Реализация размывания границы (вместо ее исключения) реализуется свойствами -color.

    Свойства border-color

    Наконец, можно задать любой цвет для любой отдельной границы, либо с помощью одного свойства, такого как перечисленные выше, либо с помощью сокращенного свойства border-color. Обратитесь к описанию сокращенного свойства margin, чтобы подробнее узнать о задании количества свойств меньше четырех.

    Как и background-color, border-color может получать значение transparent. Это может быть полезно при работе с крайними случаями, которые требуют согласованной композиции, но не согласованного использования границ.

    Сокращенное свойство border и его четыре родственника, более подробно

    В отличие от различных свойств границы -width, -style, и -color, эти пять свойств позволяют определить в данный момент три характеристики четырех границ объекта, или любой одиночной границы. Допустимые сокращенные значения border (и т.д.) содержат любые или все свойства ширины, стиля и цвета, которые применяются к границе, единственное ограничение состоит в том, что необходимо ссылаться в текущий момент либо на одну сторону элемента, либо на все четыре сразу.

    Рассмотрим следующее правило границы:

    #borderShorthandExample {
    	border: 2px outset rgb(160,0,0);
    	padding: .857em;
    	background-color: rgb(255,224,224);
    }

    Элемент, к которому применяется приведенное выше правило, будет выглядеть точно так, как этот параграф в рамке.

    Когда значение в сокращенном правиле border отсутствует, выводимый элемент будет использовать значения по умолчанию:

  • Толщину границы будет определять браузер.
  • Стиль границы будет solid.
  • Цвет границы будет совпадать с цветом, использованным для рассматриваемого элемента.
  • Создание правил: обоснование пяти свойств сокращения border … вместо одного

    Рассматриваемые здесь "правила" являются линиями начерченным в компоновке, а не директивами, которым надо следовать. Такие линии улучшают контраст между элементом и его окружающим пространством, и во многих случаях они помогают создать в компоновке иллюзию глубины. Этот последний результат подтверждается примером существования стилей границы inset и outset.

    Хотя эти же самые эффекты можно получить, размещая границы вокруг всех четырех сторон элемента, возможность точно начертить определенные линии в компоновке предоставляет дизайнеру существенный контроль над деталями.

    …И зачем так много свойств? Они же просто границы, не так ли?

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

    В связи с тем, как реализуется дизайн сайта, встречается много случаев, где тот или иной элемент может иметь структурные свойства аналогичные другим элементам в документе, но иметь различные презентационные требования. В этих ситуациях вполне разумно написать одно правило для самого общего случая, и дополнительные правила для каждого из предельных случаев. Именно в связи с этим и существуют значения auto и inherit: для использования стиля по умолчанию в качестве предельного случая.

    В случае границ, предельные случаи вполне могут требовать изменения одной характеристики границы на одной стороне элемента — и когда кто-то разумно придерживается принципа KISS, то обычно лучше всего стремиться к изменению только тех деталей, которые необходимо изменить.

    Пример 2

    Определенные разделы документа необходимо украсить с помощью подчеркиваний и рамок.

    Добавляем подчеркивание снизу к заголовку, и рамку вокруг цитаты.

    Новые правила:

    h1 { border-bottom: 1px solid rgb(153,153,153); }
    .pullQuote { border: 1px solid rgb(153,153,153); }

    Когда одних полей недостаточно: свойства заполнения

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

    В таких и многих других случаях используются свойства padding, padding-top, padding-right, padding-bottom, и padding-left. Эти свойства вставляют дополнительное пространство между полями или границами элемента и его контентом. На рисунке 30.1 четко представлены отношения между полями, границами, и заполнением.

    Эти свойства ведут себя точно таким же образом, как и свойства полей, со следующими исключениями:

  • Значения auto функционально бесполезны в ссылках на свойства заполнения.
  • Отрицательные значения заполнения недопустимы.
  • Заполнения никогда не сжимаются.
  • Значения полей никогда не применяются к строковым элементам, но значения заполнения применяются.
  • Пример 3

    К элементам, которым ранее были добавлены границы, нужно добавить дополнительные промежутки.

    Вставляем дополнительные промежутки рядом с границами, заданными ранее для заголовка и цитаты.

    Новые правила:

    body { padding: 0; }
      h1 { padding: .5em 0 .5em 0; }
      .pullQuote { padding: .5em; }

    Работа с шириной и высотой элемента

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

    Свойствами CSS, которые используют для манипуляций размерами элементов, являются width, height, min-width, max-width, min-height, и max-height. Эти свойства можно затем разъединить (или соединить) с размерами контента элементов с помощью свойства overflow.

    Существует также свойство clip, которое скрывает части элемента внутри его полей. Однако в данной лекции оно не рассматривается, в связи с его узкой областью применения.

    Основы ширины и высоты

    Как правило, width и height создают именно тот результат, которые можно было бы от них ожидать. Однако их использование имеет некоторые важные особенности.

  • width и height не могут применяться к строковым элементам … Существует несколько элементов (такие как span, strong, и em ), которые будут игнорировать применение значений width и height при обычных обстоятельствах. Список таких элементов можно найти в обсуждении типов элементов позже в этой лекции.
  • … за исключением изображений, для которых можно задавать width и height, даже если они являются строковыми элементами. Рекомендация CSS 2.1 называет изображения "заменяемыми" элементами, что означает, что браузеры всегда должны интерпретировать их как обладающие статическими размерами. Поэтому их размеры можно изменять произвольным образом.
  • width и height являются единственными свойствами, которые могут влиять на функциональные размеры элемента. В результате, можно легко оказаться в ситуации, когда элемент слишком маленький (обычно слишком узкий), чтобы содержать свой контент ожидаемым образом, что ведет к выбросам. Обсуждаемая ниже боксовая модель CSS рассматривает эту проблему.
  • ) предоставляют обширную информацию об этой проблеме и методах ее обхода.
  • Алгоритмы округления будут, время от времени, вызывать не соответствующие требованиям отличия в компоновке при выводе в браузерах, которые выводят контент на дисплеях LCD, LED, или CRT ( type="screen" ). Тип экрана в конечном счете требует, чтобы все единицы измерения были преобразованы в измерения в пикселях, что может отображаться по разному в различных браузерах.
  • min-width, max-width, min-height, и max-height

    Время от времени, встречаются ситуации, когда необходимо ограничить размер элемента — обычно, чтобы гарантировать, что столбец с пропорциональными размерами всегда будет сохранять удобочитаемую ширину. Различные min - и max - свойства отвечают этим требованиям. Как и в случае со свойствами width и height, результаты, которые можно ожидать от использования этих свойств, как правило, вполне предсказуемы.

    Однако, по опыту автора, эти свойства имеют ограниченное применение (хотя другие авторы с этим не согласны). Как обычные старые width и height, они зависят от ошибок округления, которые могут создавать совершенно непредсказуемые результаты. Более важно то, что они совершенно не поддерживаются в браузере IE 6, который в июле 2008 г. все еще удерживал значительную долю рынка.

    Пример 4

    Поля auto были размещены справа и слева в контейнере страницы. Теперь необходимо, чтобы width (ширина) для этих значений полей создавало какой-то смысл. Более того, планируется присвоить цитате (pullquote) значение float, поэтому она тоже получает некоторую ширину.

    Изменяем ширину контейнера документа и цитаты.

    Новые правила:

    #main { width: 42em; }
    .pullQuote { width: 14em; }

    Переполнение: ограничение в контенте, или задание свободным

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

    Для обработки таких ситуаций предназначено свойство overflow и четыре его допустимые значения - visible, hidden, auto, и scroll. Рисунок .305 показывает результат, который они создают при применении к элементу, контент которого выходит за пределы своего ограничивающего бокса.

    (рис 30.5) Результаты использования свойства CSS overflow.

    Результаты четырех значений overflow

    visible (по умолчанию) Контент за пределами допустимых размеров элементов выводится, не оказывая влияния на поток или поля смежных элементов. Следовательно, контент одного элемента может выводиться вперемешку с контентом его соседей. Методы для исключения такого результата и для специальных случаев, вызываемых проблемами представления в браузере IE, рассматриваются в следующих лекциях.
    hidden Весь контент, который находится за рамками элемента, будет скрыт от просмотра.
    auto Размеры элемента будут ограничены, как в случае использования значения hidden, но в случае необходимости создаются полосы прокрутки, чтобы сделать невидимый контент доступным посетителю.
    scroll В элемент будут встроены вертикальная и горизонтальная полосы прокрутки, даже если они не нужны.

    Боксовые модели CSS: подгонка друг к другу

    Теперь, когда фундаментальные свойства компоновки были рассмотрены, пришло время показать, как ширина элемента выводится в браузере согласно его свойствам CSS — и как удержать элементы от разрушения создаваемых компоновок. Некоторые результаты имеют вполне здравый смысл, в то время как другие могут показаться совершенно противоречащими интуиции. Чтобы усложнить ситуацию, на самом деле рассмотрения требуют два алгоритма компоновки: модель, определенная консорциумом WWW (W3C) в Рекомендации CSS 2.1, и модель, которая используется в более старых версиях браузера IE.

    Выбор подходящих единиц измерения для компоновки

    Как и в случае текста, размеры элементов можно задавать либо пропорциональными единицами измерения, такими как % и em, либо статическими единицами измерения, такими как px. Необходимо отметить также, что холст браузера всегда измеряется статическим значением, которое невозможно узнать без использования кода клиентского сценария либо для извлечения этого размера, либо для изменения размера окна — методов, которые плохо подходят для требований доступности, юзабилити и переносимости информационной среды.

    Основное правило задания размеров элементов: смешивайте пропорциональные и статические единицы измерения с осторожностью, или вообще не смешивайте

    По умолчанию для width используется значение auto, что на обычном языке означает "использовать все доступное пространство". Результат для блочных элементов состоит в том, что их вычисленная ширина занимает все это пространство. В отношении height, элементы по умолчанию растягиваются, чтобы охватить весь свой контент.

    Если вы изменяете значения width и height, то затем надо быть очень внимательным, чтобы гарантировать, что контент элемента поместится (со своими полями, границами, и заполнением) в определенную ширину. Легче всего это сделать, используя следующий процесс:

  • Выберите максимально большую ширину, которая, скорее всего, будет доступна компоновке, с учетом обычного разрешения дисплея и/или размера шрифта. Во время написания лекции, этот размер был обычно в районе 800 или 1024 пикселей. Чем шире ожидаемая аудитория сайта, тем более вероятно, что должно быть выбрано меньшее из этих значений.
  • Создайте контейнерный элемент для всего документа, для которого задана ожидаемая ширина меньше ширины, определенной на шаге 1.
  • Используйте тот же самый тип единиц измерения при задании свойств компоновки для элементов в контейнерном элементе, созданном на шаге 2.
  • Выбор для компоновки подходящих единиц измерения: преимущества и недостатки

    Преимущества и недостатки использования процентов, em, и пикселей при определении свойств компоновки.
    Единица измерения Преимущества Недостатки
    em
  • Лучше всего подходит для создания высокоточных сеток компоновки в двух измерениях
  • При использовании в отношении контейнеров документов, делает возможным компоновки, которые расширяются или сжимаются согласно размеру основного текста
  • Вычисленные размеры элементов становятся легко предсказуемыми
  • Дробные единицы измерения могут расширяться или сжиматься с незначительными различиями в разных браузерах
  • Для обеспечения наилучших результатов, для всех значений font-size и line-height в документе должны задаваться явные и предсказуемые значения
  • процент
  • Лучше всего подходит для полностью гибких компоновок
  • Хорошо подходит для создания таких вещей, как равные столбцы
  • Исключение выбросов может требовать дополнительных контейнерных элементов
  • Может приводить к неприемлемо широким или узким элементам
  • Результаты сильно зависят от контекста (см. обсуждение боксовых моделей ниже)
  • px
  • Обеспечивает максимальный контроль над компоновкой
  • Устраняет большинство межбраузерных вариаций в компоновке
  • Хуже всего подходит для поддержки требований доступности и различных информационных сред
  • В наибольшей степени подвержено выбросам (blowout)
  • Компоненты боксовой модели

    Боксовая модель является, в действительности, просто последовательностью директив, которые определяют, как различные спецификации элемента компоновки взаимодействуют друг с другом. Компонентами, рассматриваемыми в боксовой модели являются:

  • холст документа
  • поля
  • границы
  • заполнение
  • ширина и высота элемента
  • свойства элементов потомков
  • Последний из этих пунктов, в свою очередь, включает остальные пять. Однако, с целью упрощения изложения, этот раздел будет рассматривать только простые отношения элементов предок-потомок, и отложим обсуждение взаимодействий многоуровневой боксовой модели до будущих статей, которые будут рассматривать более тонкие моменты компоновки страниц.

    Боксовая модель W3C: все является аддитивным

    Основное правило состоит в том, что вычисленная ширина или высота элемента равна следующему:

    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

    Когда используется боксовая модель W3C, пропорциональные поля и заполнение вычисляются относительно вычисленной ширины содержащего элемента. В качестве примера, если определить поле: 20% для элемента, который содержится внутри элемента шириной 800 пикселей, то изображенное поле вокруг первого элемента будет 160 пикселей со всех сторон (так как 20% от 800 равно 160).

    Если этому же элементу присвоено заполнение: 5%, то его вычисленная ширина контента будет 400 пикселей:

    20% + 5% + 5% + 20% = 50%   0.50 x 800 = 400   800 - 400 = 400

    Работа с потоком документа

    Будущие руководства обсуждают создание мульти-столбцовых компоновок, поэтому в этой лекции осталось рассмотреть только три свойства CSS: display, float, и clear.

    Типы элементов и свойство display

    За исключением частей html, body, и table, каждый элемент в Рекомендациях HTML 4.01, который связан с основным контентом, имеет соответствующий строковый или блочный тип. Каждый тип определяет поведение компоновки по умолчанию различным образом:

  • строковый
  • Текст и изображения, которые непосредственно следуют за и/или предшествуют строковым элементам, изображаются на общей базовой линии с контентом строкового элемента, в зависимости от элемент(ов), в которые помещены сами эти элементы.
  • свойства margin, width, height, и float в правилах таблиц стилей, применимых к этим элементам (за исключением img и object ), игнорируются.
  • Строки текста в строковых элементах размещаются с мягкими разрывами строк, как требуется (или допускается) шириной содержащего их блочного элемента, за исключением, когда это поведение модифицируется использованием свойства white-space.
  • Эти элементы могут содержать только текст или другие строковые элементы.
  • блочный
  • Эти элементы представляются как дискретные блоки в своих контейнерах.
  • Если только float не присвоено значение left или right, всегда будет выводиться с предшествующим и последующим разрывом строки.
  • Разрывы строк между вложенными блочными элементами, которые не имеют между собой никакого контента, будут обычно сжиматься.
  • блочные элементы с шириной, заданной как auto (по умолчанию), всегда будут расширяться, чтобы заполнить всю доступную им ширину.
  • Свойство display имеет три обычно используемых значения — block, inline, и none — два из которых относятся к соответствующим типам элементов. Эффект изменения значения свойства display элемента состоит в том, что строковый элемент будет вести себя как блочный, или блочный элемент будет вести себя как строковый, или изменение представления документа, как если бы этот элемент (и весь его контент) не существовал бы вообще.

    Очевидно, что жизненно важно знать, какие элементы соответствуют какому типу по умолчанию, отношения представлены кратко в таблице 30.2:

    Часто используемые элементы HTML и их типы
    Элемент Тип Подтип Примечание
    a строковый специальный
    abbr строковый фразовый
    acronym строковый фразовый
    address блочный Ведет себя аналогично p в обычной практике
    blockquote строковый Должен содержать по крайней мере один блочный элемент, когда объявленный !DOCTYPE будет Strict
    Охватывает весь холст документа; обычно с учетом поля (в IE, Firefox, и Safari) или заполнения (в Opera) в 10px в среде screen
    cite строковый фразовый
    div блочный
    em строковый фразовый
    fieldset блочный Обычно выводится по умолчанию с border: 1px black;
    form блочный
    h1 … h6 блочный заголовок
    input строковый управление формой
    img строковый специальный
    label строковый управление формой
    li блочный Тип элемента не определенный в Определении Типа Документа, но этот элемент может содержать блочные или строковые элементы; Рекомендация CSS 2.1 не рассматривают значение display для позиций списка
    ol блочный список
    p блочный Может содержать только строковые элементы; обычно выводится с верхним и нижним полями
    span строковый специальный
    strong строковый фразовый
    table блочный
    ul блочный список

    Только поля между двумя смежными блочными элементами одного подтипа будут сжиматься.

    Пример 5

    Как насчет того, чтобы удалить аннотацию "Prologue" из заголовка, просто с целью демонстрации?

    Удаляем посторонний фрагмент из заголовка.

    Новые правила:

    .sectionNote { display: none; }

    Обтекание элементами других элементов: свойство float

    Фотография размещается слева от этого параграфа. Практически все могут видеть, что этот текст естественным образом ее обтекает, хотя некоторым сначала нужно прекратить удивляться, зачем это понадобилось приклеивать к кошке кусок бекона липкой лентой. Для определения такого поведения компоновки можно использовать атрибуты HTML, но данный результат можно реализовать и с помощью CSS.

    Как можно было бы догадаться, пара свойство/значение, которая создает это волшебство, имеет вид float: left;. Подробное рассмотрение работы с плавающими элементами будет рассмотрено в будущих лекциях, но необходимо затронуть здесь базовые понятия. float: right является также вполне полезной парой свойство/значение, и в связи с этим, когда понадобится отменить задание class, которое вызывает float, можно определить float: none.

    Свойство float имеет несколько инструкций по использованию:

  • Значение float будет иметь смысл, только если применяется к блочному элементу с явно заданным width.
  • Все свойства float, clear, и margin появляются вместе в правилах таблиц стилей, предназначенных для создания в компоновке столбцов.
  • Заставить плавающий элемент растянуться до низа своего контейнера является непростой задачей, но выполнимой. Обычно для этого используют так называемые ложные-столбцы (http://www.alistapart.com/articles/fauxcolumns/).
  • Пример 6

    О задании значения float для цитаты говорилось выше, поэтому сейчас сделаем это и посмотрим результат.

    Цитата всплывает к правому полю.

    Новые правила:

    .pullQuote { float: right; }

    Размещение элементов ниже своих плавающих предшественников: свойство clear

    Подобно свойству float, свойству clear можно присвоить одно из значений left, right, или none. Также поддерживается значение both.

    В то время, как свойство float управляет тем, как контент элементов потомков должен обтекать вокруг него, свойство clear управляет тем, как элемент должен обтекать вокруг всех своих соседей — во многих практических случаях, не во всех.

    Рисунок 30.6 показывает поведение clear: left; в компоновке, где двум начальным последовательным элементам были присвоены одинаковые значения height, и значения float равные left и right:

    (рис 30.6) clear:left позволяет нижнему боксу очистить оба столбца, так как они имеют одинаковую высоту height.

    В предыдущем примере используемый по умолчанию поток элемента #cLeftWidget помещает его сразу под текстом — то есть между #fLeftWidget и #fRightWidget.

    Рассмотрим, что произойдет, когда первый из этой же совокупности элементов будет сделан короче, чем его правый аналог, как показано на рисунке 30.7.

    (рис 30.7) Когда правый столбец будет длиннее левого, clear:left не очистит оба столбца, поэтому необходимо использовать вместо него clear:both.

    В первом примере значение clear последнего элемента задано как left, чтобы получить результат: так как оба плавающих элемента имеют одну высоту, то очищаемый элемент будет помещен ниже обоих. Однако второй пример показывает, что для достижения того же результата с плавающими элементами различной высоты, необходимо использовать clear: both;. Это обсуждение свойства clear является простым введением в его возможности, более подробно эти вопросы будут рассмотрены в будущих лекциях.

    Заключение

    В связи с различием процессоров представления, необходимостью охватывать широкое поле традиционно определяемых элементов, и невозможностью предсказать конкретные размеры окна браузера, компоновка документов Web наполнена трудностями и предостережениями. Однако общий уровень поддержки CSS продвинулся до такой точки, где документы Web нетрудно создать так, чтобы получить приличный результат в различных браузерах.

    Дополнительное чтение

  • Бергевин, Холли, и Галлант, Джон. 2006. Уязвимый Explorer. Местоположение — это всё. http://positioniseverything.net/explorer.html (доступно 1 июля 2008 г.).
  • Бос, Берт, и др. 2007. Спецификация Каскадных таблиц стилей, уровень 2 ревизия 1 (CSS 2.1). Консорциум WWW. http://www.w3.org/TR/2007/CR-CSS21-20070719 и .т.д. (доступно 30 июня 2008 г.).
  • Рагетт, Дейв, и др. 1999. Спецификация HTML 4.01. Консорциум WWW. http://www.w3.org/TR/1999/REC-html401-19991224 и т.д. (доступно 30 июня 2008 г.)
  • Реймонд, Эрик, и Стил, Гай, под ред. 2003. Грубая сила. Файл хакерского жаргона (Версия 4.4.7). http://www.catb.org/jargon/html/B/brute-force.html (доступно 30 июня 2008 г.)
  • Шалци, Джон. 2006. Очевидно ваши люди думают, что я дурачился. Хоть что нибудь. http://www.scalzi.com/whatever/004457.html (доступно 30 июня 2008 г.).
  • Контрольные вопросы

  • При каких обстоятельствах лучше всего использовать сокращенное значение margin, или одиночное свойство границы, такое как margin-top?
  • Когда сокращенные свойства margin, padding, и border-width задаются со всеми четырьмя значениями, в каком порядке эти значения применяются к четырем сторонам элемента?
  • Если вы хотите поместить линию под текстом каждого заголовка в документе, какое свойство вы будете использовать?
  • Какое значение border-style будет использоваться, чтобы придать элементу вид как у кнопки интерфейса?
  • Да или нет: Будет ли определение границы вокруг элемента по умолчанию задавать также поле вокруг контента этого элемента?
  • Если создается элемент, ширина которого не совпадает с шириной его контейнера, какую пару свойство/значение необходимо задать, чтобы этот элемент был горизонтальное центрирован в своем контейнере?
  • Да или нет: Если поместить контейнерный элемент в body и задать для width значение больше 100%, изменится ли поведение холста документа?
  • Если изображение слишком большое для содержащего его элемента, какую пару свойство/значение необходимо использовать, чтобы компоновка страницы не раздувалась, и почему?
  • Если присвоить display значение block в элементе a (ссылка) и задать для этого элемента разумную высоту и ширину, как изменится поведение события указания мышью на эту ссылку в среде представления screen?
  • При нормальных обстоятельствах блочный элемент расширяется для заполнения ширины своего контейнера (минус поля, границы, и заполнение). Изменяется ли на самом деле это поведение по умолчанию, когда этому элементу предшествует плавающий ( float ) элемент - или это только видимость изменения?
  • Если вы намерены применить значение float к элементу, какое другое свойство также необходимо задать на этом элементе?
  • Если вы хотите быть абсолютно уверены, что элемент будет всегда расширяться для заполнения ширины своего контейнера, какие пары свойство/значение необходимо задать?
  • Об авторе

    Бен Хеник создает Web-сайты того или иного вида начиная с сентября 1995 г., когда он взялся за свой первый проект Web как академический доброволец. С тех пор большая часть его работы была сделана в качестве фрилансера.

    Бен является универсалом, его навыки касаются почти любого аспекта создания и разработки сайта, от CSS и HTML до проектирования и написания текста, и до PHP/MySQL и JavaScript/Ajax.

    Он живет в Лоуренсе, Канзас с тремя компьютерами и без телевизора. Вы может прочитать больше о нем и его работе на сайте http://henick.net (http://www.henick.net/).

    Материалы этого курса имеют лицензию Creative Commons Attribution, Non Commercial - Share Alike 2.5 license.
    Страницы:

    Введение

    На первый взгляд, модель компоновки CSS является простым делом. Боксы, границы и поля являются достаточно простыми объектами, а синтаксис CSS предоставляет простой способ описания их характеристик.

    Однако процессоры визуализации браузеров следуют длинному списку правил, изложенных в Рекомендации CSS 2.1, и некоторым своим собственным. В связи с этим имеется множество деталей, которые необходимо понимать, прежде чем добавлять в набор используемых средств стилиста более развитые методы.

    В этой лекции мы познакомимся со свойствами CSS, которые управляют компоновкой элементов HTML, включая их границы, поля, и многое другое. Будут также рассмотрены некоторые упомянутые выше правила. Развитая столбцовая компоновка и сеточно-ориентированные методы будут рассмотрены в последующих лекциях, которые исследуют компоновку форм, обтекание, очистку, и позиционирование более подробно. Будет рассмотрено много связанных с лекцией примеров кода для демонстрации обсуждаемых методов.

    Лекция имеет следующее содержание:

  • Изменение композиции: поля, границы и заполнение CSS
  • Размещение пробелов вокруг объекта: свойства margin-top, margin-right, margin-bottom, margin-left, и margin
  • Автоматические поля
  • Отрицательные поля
  • Сжатие полей
  • Пример 1
  • Добавление к объекту границы: свойства границ
  • Свойства border-width
  • Свойства border-color
  • Сокращенное свойство border и его четыре родственника, более подробно
  • Создание правил: обоснование пяти свойств сокращения border … вместо одного
  • …И зачем так много свойств? Они же просто границы, не так ли?
  • Пример 2
  • Когда одних полей недостаточно: свойства заполнения
  • Пример 3
  • Работа с шириной и высотой элемента
  • Основы ширины и высоты
  • min-width, max-width, min-height, и max-height
  • Пример 4
  • Переполнение: ограничение в контенте, или задание свободным
  • Результаты четырех значений переполнения
  • Боксовые модели CSS: подгонка друг к другу
  • Выбор подходящих единиц измерения для компоновки
  • Основное правило задания размеров элементов: смешивайте пропорциональные и статические единицы измерения с осторожностью, или вообще не смешивайте!
  • Выбор для компоновки подходящих единиц измерения: преимущества и недостатки
  • Компоненты боксовой модели
  • Боксовая модель W3C: все является аддитивным
  • Пропорциональные поля и заполнение в боксовой модели W3C
  • Работа с потоком документа
  • Типы элементов и свойство display
  • Пример 5
  • Обтекание элементами других элементов: свойство float
  • Пример 6
  • Размещение элементов ниже своих плавающих предшественников: свойство clear
  • Заключение
  • Дополнительное чтение
  • Контрольные вопросы
  • Изменение композиции: поля, границы и заполнение CSS

    Многие элементы HTML, такие как элементы div и заголовки, изображаются по умолчанию по всей ширине холста браузера и инициируют терминальные разрывы строки, так что несколько таких элементов в последовательности будут выводиться в стеке сверху вниз на холсте документа.

    Однако элементов HTML и стилей браузера, заданных обычно для них, будет недостаточно для целого диапазона вариантов использования, к рассмотрению которых обращаются разработчики в своей работе. Совместная работа CSS и HTML предназначена для "заполнения пробелов", так что классы и id могут добавлять семантическое значение к разметке, в то время как правила таблиц стилей могут изменить компоновку и представление контента — возможно даже вообще отменяя большую часть используемых по умолчанию стилей браузера.

    Точное управление свободным пространством является одним из самых важных инструментов дизайнера — и по мнению автора, единственным самым важным. Однако, та степень управления свободным пространством, которая обеспечивает высокое качество дизайну сайта, отсутствует в используемых по умолчанию таблицах стиля браузера, что означает, что стилисты часто используют рассматриваемые в этой лекции поля, границы, заполнение и другие свойства компоновки CSS.

    Поля (margin), границы (border), и заполнение (padding) организованы, как показано на рисунке 30.1.

    (рис 30.1) Иллюстрация различных частей бокса элемента, помеченных соответствующими свойствами CSS.

    Размещение пробелов вокруг объекта: свойства margin-top, margin-right, margin-bottom, margin-left, и margin

    Поля можно определять по отдельности или в сокращенном правиле. Более того, сокращенное правило позволяет, тем не менее, управлять отдельными границами вокруг объекта. Допустимые значения обычно определяют в единицах измерения px или em (пикселях или em). В таблицах стилей, предназначенных для печати, вместо них можно использовать единицы измерения in, cm, или pt (дюймы, сантиметры или пункты).

    Во всех случаях % (процент) является допустимым значением, но должен использоваться с осторожностью; такие значения вычисляются как доля от ширины элемента предка, и беззаботное использование таких значений может иметь непредвиденные последствия. Эта проблема подробнее рассматривается ниже во время обсуждения боксовой модели CSS.

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

    Автоматические поля

    В зависимости от обстоятельств, задание значения auto говорит браузеру, что надо вывести поле согласно значению, имеющемуся в его собственной таблице стилей. Однако, когда такое поле применяется к элементу со значимой шириной, поле auto заставляет все доступное пространство выводиться как пробел.

    Рассмотрим следующее правило:

    .narrowWaisted {
      width: 16.667em;
      margin: 1em auto 1em auto;
    }

    … Блочный элемент класса narrowWaisted будет центрировать себя в середине доступного холста.

    … Или для правого поля применяемого элемента можно задать некоторое относительное небольшое значение, в то время как левому полю присваивается значение auto.

    Когда делается таким образом, этот элемент будет выглядеть почти прижатым вправо.

    Отрицательные поля

    Всем свойствам полей можно присваивать отрицательные значения. В этом случае смежное поле может быть фактически до некоторой степени "исключено". При задании достаточно большого отрицательного поля для достаточно большого элемента смежный элемент может даже перекрываться.

    Например, рассмотрим следующие простые элементы div.

    <div id="header"><h1>Lovely header</h1></div>
    <div id="content"><p>Overlapping text is entirely unreadable</p></div>

    При оформлении с помощью следующего CSS

    body {background-color:white; font-family:Geneva, Arial, Helvetica, sans-serif;}
    #header {background-color:yellow;}
    h1 {color:red; font-size:2em; }

    создается вывод, показанный на рисунке 30.2:

    (рис 30.2) Два элемента из простого примера. Ничего особенного для просмотра.

    Теперь начинается интересное. Добавим достаточно значительное отрицательное поле сверху у нижнего элемента, используя следующее правило:

    #content {margin-top:-3em;}

    Это создает визуальный эффект смещения элемента вверх, так что он перекрывается с заголовком, как показано на рисунке 30.3.

    (рис 30.3) При применении отрицательных полей нижний элемент смещается вверх и перекрывает заголовок.

    Сжатие полей

    В тех случаях, когда два аналогичных и смежных блочных элемента имеют ненулевые поля, будет применяться только большее из двух полей. Например, рассмотрим следующее правило:

    p {
      margin: 1em auto 1.5em auto;
    }

    Если документ, включающий это правило стиля, выводится буквально, то получающееся поле между двумя параграфами в последовательности будет составлять 2.5em, как сумма нижнего поля параграфа 1 (1.5em) и верхнего поля параграфа 2 (1em). Однако благодаря применению сжимаемых полей, поле между ними будет только 1.5em.

    Списки и заголовки являются особенными среди блочных элементов, поэтому их поля не будут сжиматься с полями других блочных элементов.

    Пример 1

    В лекции об оформлении текста верстка начального раздела рассказа Ф. Скотта Фитцджеральда была сделана с помощью множества инструментов, доступных в CSS. Для демонстрации в этой лекции будет снова использоваться та же самая страница с некоторыми небольшими изменениями (в основном, добавление элемента контейнера вокруг всего основного текста). Оформление текста не изменяется, но в данном примере удалены несколько использованных стилей компоновки.

    Для начала будут добавлены поля ко всем элементам, где они нужны.

    Начальная таблица стилей

    body {
    	font-size: 14px;
    	font-family: Palatino,'Palatino Linotype',Georgia, sans-serif;
    }
    
    p {
    	text-align: justify;
    	text-indent: 1.429em;
    	line-height: 1.5;
    }
    
    q {
    	letter-spacing: .143em;
    }
    
    q:before,
     q:after {
    
    	content: "";
    }
    
    h1 {
    	font-size: x-large;
    	font-family: Helvetica,Arial,sans-serif;
    	font-style: italic;
    }
    
    blockquote {
    	font-family: Helvetica,Arial,sans-serif;
    }
    
    blockquote p {
    	text-align: left;
    	text-indent: 0;
    }
    
    .sectionNote {
    	font-size: medium;
    	font-style: normal;
    }
    
    .attribution {
    	font-size: small;
    	line-height: 1.5;
    }
    
    .author {
    	font-weight: bold;
    	text-transform: uppercase;
    }
    
    .source a {
    	text-decoration: none;
    }
    
    .pullQuote {
    	word-spacing: .143em;
    }
    
    .opening {
    	font-variant: small-caps;
    }

    Новые границы для тела, заголовка, цитаты, контейнера документа, и параграфов

    Новые правила:

    body { margin: 0; }
      #main { margin: 0 auto 0 auto; }
      h1 { margin: 0 0 1em 0; }
      .pullQuote { margin: auto 0 1em 1em; }
      p { margin: 0; }
      .attribution { margin: 0 0 1.5em 0; }

    Добавление к объекту границы: свойства границ

    Существует сокращенное свойство границы, но оно будет полезно, только когда вы захотите предоставить полную и согласованную границу вокруг всех четырех сторон элемента. Можно также задать толщину, стиль и цвет любой из четырех возможных сторон элемента, используя любые мыслимые комбинации следующих свойств.

  • border-width
  • border-style
  • border-color
  • border-top
  • border-top-width
  • border-top-style
  • border-top-color
  • border-right
  • border-right-width
  • border-right-style
  • border-right-color
  • border-bottom
  • border-bottom-width
  • border-bottom-style
  • border-bottom-color
  • border-left
  • border-left-width
  • border-left-style
  • border-left-color
  • Свойства border-width

    Эти свойства ведут себя точно так же, как и можно было бы ожидать: они задают явную толщину одной или нескольких сторон границы.

    Сокращенное свойство border-width принимает значения в той же нотации, что и сокращенное свойство margin, за исключением того только, что значения процента не поддерживаются. Вполне можно написать правило подобное следующему:

    td {
    	border-width: 1px 0 0 1px;
    }

    Свойства border-style

    (рис 30.4) Восемь обычных стилей границы в действии.

    Свойства border-style обычно принимают какое-либо из следующих значений:

    dashed Длина пунктиров и величина пробела между ними определяется браузером.
    dotted Величина пробела между точками (которые могут быть любой формы с отношением сторон 1) определяется браузером.
    double Заданная толщина делится на три и изображается в порядке заполнено-отсутствие-заполнено.
    groove Изображается трехмерная вдавленная граница.
    inset Граница будет затенена, чтобы заставить ее выглядеть, как будто элемент, к которому она применяется вдавлен в холст.
    none Эквивалентно определению -width равной нулю.
    outset Граница будет затенена, чтобы заставить ее выглядеть, как будто элемент, к которому она применяется выдавлен из холста.
    ridge Изображается трехмерная выпуклая граница.
    solid Граница выводится как сплошная незатененная линия.

    Когда используется сокращенное свойство border-style, оно может принимать до четырех значений, которые применяются таким же образом, как значения сокращенного свойства margin.

    Реализация размывания границы (вместо ее исключения) реализуется свойствами -color.

    Свойства border-color

    Наконец, можно задать любой цвет для любой отдельной границы, либо с помощью одного свойства, такого как перечисленные выше, либо с помощью сокращенного свойства border-color. Обратитесь к описанию сокращенного свойства margin, чтобы подробнее узнать о задании количества свойств меньше четырех.

    Как и background-color, border-color может получать значение transparent. Это может быть полезно при работе с крайними случаями, которые требуют согласованной композиции, но не согласованного использования границ.

    Сокращенное свойство border и его четыре родственника, более подробно

    В отличие от различных свойств границы -width, -style, и -color, эти пять свойств позволяют определить в данный момент три характеристики четырех границ объекта, или любой одиночной границы. Допустимые сокращенные значения border (и т.д.) содержат любые или все свойства ширины, стиля и цвета, которые применяются к границе, единственное ограничение состоит в том, что необходимо ссылаться в текущий момент либо на одну сторону элемента, либо на все четыре сразу.

    Рассмотрим следующее правило границы:

    #borderShorthandExample {
    	border: 2px outset rgb(160,0,0);
    	padding: .857em;
    	background-color: rgb(255,224,224);
    }

    Элемент, к которому применяется приведенное выше правило, будет выглядеть точно так, как этот параграф в рамке.

    Когда значение в сокращенном правиле border отсутствует, выводимый элемент будет использовать значения по умолчанию:

  • Толщину границы будет определять браузер.
  • Стиль границы будет solid.
  • Цвет границы будет совпадать с цветом, использованным для рассматриваемого элемента.
  • Создание правил: обоснование пяти свойств сокращения border … вместо одного

    Рассматриваемые здесь "правила" являются линиями начерченным в компоновке, а не директивами, которым надо следовать. Такие линии улучшают контраст между элементом и его окружающим пространством, и во многих случаях они помогают создать в компоновке иллюзию глубины. Этот последний результат подтверждается примером существования стилей границы inset и outset.

    Хотя эти же самые эффекты можно получить, размещая границы вокруг всех четырех сторон элемента, возможность точно начертить определенные линии в компоновке предоставляет дизайнеру существенный контроль над деталями.

    …И зачем так много свойств? Они же просто границы, не так ли?

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

    В связи с тем, как реализуется дизайн сайта, встречается много случаев, где тот или иной элемент может иметь структурные свойства аналогичные другим элементам в документе, но иметь различные презентационные требования. В этих ситуациях вполне разумно написать одно правило для самого общего случая, и дополнительные правила для каждого из предельных случаев. Именно в связи с этим и существуют значения auto и inherit: для использования стиля по умолчанию в качестве предельного случая.

    В случае границ, предельные случаи вполне могут требовать изменения одной характеристики границы на одной стороне элемента — и когда кто-то разумно придерживается принципа KISS, то обычно лучше всего стремиться к изменению только тех деталей, которые необходимо изменить.

    Пример 2

    Определенные разделы документа необходимо украсить с помощью подчеркиваний и рамок.

    Добавляем подчеркивание снизу к заголовку, и рамку вокруг цитаты.

    Новые правила:

    h1 { border-bottom: 1px solid rgb(153,153,153); }
    .pullQuote { border: 1px solid rgb(153,153,153); }

    Когда одних полей недостаточно: свойства заполнения

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

    В таких и многих других случаях используются свойства padding, padding-top, padding-right, padding-bottom, и padding-left. Эти свойства вставляют дополнительное пространство между полями или границами элемента и его контентом. На рисунке 30.1 четко представлены отношения между полями, границами, и заполнением.

    Эти свойства ведут себя точно таким же образом, как и свойства полей, со следующими исключениями:

  • Значения auto функционально бесполезны в ссылках на свойства заполнения.
  • Отрицательные значения заполнения недопустимы.
  • Заполнения никогда не сжимаются.
  • Значения полей никогда не применяются к строковым элементам, но значения заполнения применяются.
  • Пример 3

    К элементам, которым ранее были добавлены границы, нужно добавить дополнительные промежутки.

    Вставляем дополнительные промежутки рядом с границами, заданными ранее для заголовка и цитаты.

    Новые правила:

    body { padding: 0; }
      h1 { padding: .5em 0 .5em 0; }
      .pullQuote { padding: .5em; }

    Работа с шириной и высотой элемента

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

    Свойствами CSS, которые используют для манипуляций размерами элементов, являются width, height, min-width, max-width, min-height, и max-height. Эти свойства можно затем разъединить (или соединить) с размерами контента элементов с помощью свойства overflow.

    Существует также свойство clip, которое скрывает части элемента внутри его полей. Однако в данной лекции оно не рассматривается, в связи с его узкой областью применения.

    Основы ширины и высоты

    Как правило, width и height создают именно тот результат, которые можно было бы от них ожидать. Однако их использование имеет некоторые важные особенности.

  • width и height не могут применяться к строковым элементам … Существует несколько элементов (такие как span, strong, и em ), которые будут игнорировать применение значений width и height при обычных обстоятельствах. Список таких элементов можно найти в обсуждении типов элементов позже в этой лекции.
  • … за исключением изображений, для которых можно задавать width и height, даже если они являются строковыми элементами. Рекомендация CSS 2.1 называет изображения "заменяемыми" элементами, что означает, что браузеры всегда должны интерпретировать их как обладающие статическими размерами. Поэтому их размеры можно изменять произвольным образом.
  • width и height являются единственными свойствами, которые могут влиять на функциональные размеры элемента. В результате, можно легко оказаться в ситуации, когда элемент слишком маленький (обычно слишком узкий), чтобы содержать свой контент ожидаемым образом, что ведет к выбросам. Обсуждаемая ниже боксовая модель CSS рассматривает эту проблему.
  • ) предоставляют обширную информацию об этой проблеме и методах ее обхода.
  • Алгоритмы округления будут, время от времени, вызывать не соответствующие требованиям отличия в компоновке при выводе в браузерах, которые выводят контент на дисплеях LCD, LED, или CRT ( type="screen" ). Тип экрана в конечном счете требует, чтобы все единицы измерения были преобразованы в измерения в пикселях, что может отображаться по разному в различных браузерах.
  • min-width, max-width, min-height, и max-height

    Время от времени, встречаются ситуации, когда необходимо ограничить размер элемента — обычно, чтобы гарантировать, что столбец с пропорциональными размерами всегда будет сохранять удобочитаемую ширину. Различные min - и max - свойства отвечают этим требованиям. Как и в случае со свойствами width и height, результаты, которые можно ожидать от использования этих свойств, как правило, вполне предсказуемы.

    Однако, по опыту автора, эти свойства имеют ограниченное применение (хотя другие авторы с этим не согласны). Как обычные старые width и height, они зависят от ошибок округления, которые могут создавать совершенно непредсказуемые результаты. Более важно то, что они совершенно не поддерживаются в браузере IE 6, который в июле 2008 г. все еще удерживал значительную долю рынка.

    Пример 4

    Поля auto были размещены справа и слева в контейнере страницы. Теперь необходимо, чтобы width (ширина) для этих значений полей создавало какой-то смысл. Более того, планируется присвоить цитате (pullquote) значение float, поэтому она тоже получает некоторую ширину.

    Изменяем ширину контейнера документа и цитаты.

    Новые правила:

    #main { width: 42em; }
    .pullQuote { width: 14em; }

    Переполнение: ограничение в контенте, или задание свободным

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

    Для обработки таких ситуаций предназначено свойство overflow и четыре его допустимые значения - visible, hidden, auto, и scroll. Рисунок .305 показывает результат, который они создают при применении к элементу, контент которого выходит за пределы своего ограничивающего бокса.

    (рис 30.5) Результаты использования свойства CSS overflow.

    Результаты четырех значений overflow

    visible (по умолчанию) Контент за пределами допустимых размеров элементов выводится, не оказывая влияния на поток или поля смежных элементов. Следовательно, контент одного элемента может выводиться вперемешку с контентом его соседей. Методы для исключения такого результата и для специальных случаев, вызываемых проблемами представления в браузере IE, рассматриваются в следующих лекциях.
    hidden Весь контент, который находится за рамками элемента, будет скрыт от просмотра.
    auto Размеры элемента будут ограничены, как в случае использования значения hidden, но в случае необходимости создаются полосы прокрутки, чтобы сделать невидимый контент доступным посетителю.
    scroll В элемент будут встроены вертикальная и горизонтальная полосы прокрутки, даже если они не нужны.

    Боксовые модели CSS: подгонка друг к другу

    Теперь, когда фундаментальные свойства компоновки были рассмотрены, пришло время показать, как ширина элемента выводится в браузере согласно его свойствам CSS — и как удержать элементы от разрушения создаваемых компоновок. Некоторые результаты имеют вполне здравый смысл, в то время как другие могут показаться совершенно противоречащими интуиции. Чтобы усложнить ситуацию, на самом деле рассмотрения требуют два алгоритма компоновки: модель, определенная консорциумом WWW (W3C) в Рекомендации CSS 2.1, и модель, которая используется в более старых версиях браузера IE.

    Выбор подходящих единиц измерения для компоновки

    Как и в случае текста, размеры элементов можно задавать либо пропорциональными единицами измерения, такими как % и em, либо статическими единицами измерения, такими как px. Необходимо отметить также, что холст браузера всегда измеряется статическим значением, которое невозможно узнать без использования кода клиентского сценария либо для извлечения этого размера, либо для изменения размера окна — методов, которые плохо подходят для требований доступности, юзабилити и переносимости информационной среды.

    Основное правило задания размеров элементов: смешивайте пропорциональные и статические единицы измерения с осторожностью, или вообще не смешивайте

    По умолчанию для width используется значение auto, что на обычном языке означает "использовать все доступное пространство". Результат для блочных элементов состоит в том, что их вычисленная ширина занимает все это пространство. В отношении height, элементы по умолчанию растягиваются, чтобы охватить весь свой контент.

    Если вы изменяете значения width и height, то затем надо быть очень внимательным, чтобы гарантировать, что контент элемента поместится (со своими полями, границами, и заполнением) в определенную ширину. Легче всего это сделать, используя следующий процесс:

  • Выберите максимально большую ширину, которая, скорее всего, будет доступна компоновке, с учетом обычного разрешения дисплея и/или размера шрифта. Во время написания лекции, этот размер был обычно в районе 800 или 1024 пикселей. Чем шире ожидаемая аудитория сайта, тем более вероятно, что должно быть выбрано меньшее из этих значений.
  • Создайте контейнерный элемент для всего документа, для которого задана ожидаемая ширина меньше ширины, определенной на шаге 1.
  • Используйте тот же самый тип единиц измерения при задании свойств компоновки для элементов в контейнерном элементе, созданном на шаге 2.
  • Выбор для компоновки подходящих единиц измерения: преимущества и недостатки

    Преимущества и недостатки использования процентов, em, и пикселей при определении свойств компоновки.
    Единица измерения Преимущества Недостатки
    em
  • Лучше всего подходит для создания высокоточных сеток компоновки в двух измерениях
  • При использовании в отношении контейнеров документов, делает возможным компоновки, которые расширяются или сжимаются согласно размеру основного текста
  • Вычисленные размеры элементов становятся легко предсказуемыми
  • Дробные единицы измерения могут расширяться или сжиматься с незначительными различиями в разных браузерах
  • Для обеспечения наилучших результатов, для всех значений font-size и line-height в документе должны задаваться явные и предсказуемые значения
  • процент
  • Лучше всего подходит для полностью гибких компоновок
  • Хорошо подходит для создания таких вещей, как равные столбцы
  • Исключение выбросов может требовать дополнительных контейнерных элементов
  • Может приводить к неприемлемо широким или узким элементам
  • Результаты сильно зависят от контекста (см. обсуждение боксовых моделей ниже)
  • px
  • Обеспечивает максимальный контроль над компоновкой
  • Устраняет большинство межбраузерных вариаций в компоновке
  • Хуже всего подходит для поддержки требований доступности и различных информационных сред
  • В наибольшей степени подвержено выбросам (blowout)
  • Компоненты боксовой модели

    Боксовая модель является, в действительности, просто последовательностью директив, которые определяют, как различные спецификации элемента компоновки взаимодействуют друг с другом. Компонентами, рассматриваемыми в боксовой модели являются:

  • холст документа
  • поля
  • границы
  • заполнение
  • ширина и высота элемента
  • свойства элементов потомков
  • Последний из этих пунктов, в свою очередь, включает остальные пять. Однако, с целью упрощения изложения, этот раздел будет рассматривать только простые отношения элементов предок-потомок, и отложим обсуждение взаимодействий многоуровневой боксовой модели до будущих статей, которые будут рассматривать более тонкие моменты компоновки страниц.

    Боксовая модель W3C: все является аддитивным

    Основное правило состоит в том, что вычисленная ширина или высота элемента равна следующему:

    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

    Когда используется боксовая модель W3C, пропорциональные поля и заполнение вычисляются относительно вычисленной ширины содержащего элемента. В качестве примера, если определить поле: 20% для элемента, который содержится внутри элемента шириной 800 пикселей, то изображенное поле вокруг первого элемента будет 160 пикселей со всех сторон (так как 20% от 800 равно 160).

    Если этому же элементу присвоено заполнение: 5%, то его вычисленная ширина контента будет 400 пикселей:

    20% + 5% + 5% + 20% = 50%   0.50 x 800 = 400   800 - 400 = 400

    Работа с потоком документа

    Будущие руководства обсуждают создание мульти-столбцовых компоновок, поэтому в этой лекции осталось рассмотреть только три свойства CSS: display, float, и clear.

    Типы элементов и свойство display

    За исключением частей html, body, и table, каждый элемент в Рекомендациях HTML 4.01, который связан с основным контентом, имеет соответствующий строковый или блочный тип. Каждый тип определяет поведение компоновки по умолчанию различным образом:

  • строковый
  • Текст и изображения, которые непосредственно следуют за и/или предшествуют строковым элементам, изображаются на общей базовой линии с контентом строкового элемента, в зависимости от элемент(ов), в которые помещены сами эти элементы.
  • свойства margin, width, height, и float в правилах таблиц стилей, применимых к этим элементам (за исключением img и object ), игнорируются.
  • Строки текста в строковых элементах размещаются с мягкими разрывами строк, как требуется (или допускается) шириной содержащего их блочного элемента, за исключением, когда это поведение модифицируется использованием свойства white-space.
  • Эти элементы могут содержать только текст или другие строковые элементы.
  • блочный
  • Эти элементы представляются как дискретные блоки в своих контейнерах.
  • Если только float не присвоено значение left или right, всегда будет выводиться с предшествующим и последующим разрывом строки.
  • Разрывы строк между вложенными блочными элементами, которые не имеют между собой никакого контента, будут обычно сжиматься.
  • блочные элементы с шириной, заданной как auto (по умолчанию), всегда будут расширяться, чтобы заполнить всю доступную им ширину.
  • Свойство display имеет три обычно используемых значения — block, inline, и none — два из которых относятся к соответствующим типам элементов. Эффект изменения значения свойства display элемента состоит в том, что строковый элемент будет вести себя как блочный, или блочный элемент будет вести себя как строковый, или изменение представления документа, как если бы этот элемент (и весь его контент) не существовал бы вообще.

    Очевидно, что жизненно важно знать, какие элементы соответствуют какому типу по умолчанию, отношения представлены кратко в таблице 30.2:

    Часто используемые элементы HTML и их типы
    Элемент Тип Подтип Примечание
    a строковый специальный
    abbr строковый фразовый
    acronym строковый фразовый
    address блочный Ведет себя аналогично p в обычной практике
    blockquote строковый Должен содержать по крайней мере один блочный элемент, когда объявленный !DOCTYPE будет Strict
    Охватывает весь холст документа; обычно с учетом поля (в IE, Firefox, и Safari) или заполнения (в Opera) в 10px в среде screen
    cite строковый фразовый
    div блочный
    em строковый фразовый
    fieldset блочный Обычно выводится по умолчанию с border: 1px black;
    form блочный
    h1 … h6 блочный заголовок
    input строковый управление формой
    img строковый специальный
    label строковый управление формой
    li блочный Тип элемента не определенный в Определении Типа Документа, но этот элемент может содержать блочные или строковые элементы; Рекомендация CSS 2.1 не рассматривают значение display для позиций списка
    ol блочный список
    p блочный Может содержать только строковые элементы; обычно выводится с верхним и нижним полями
    span строковый специальный
    strong строковый фразовый
    table блочный
    ul блочный список

    Только поля между двумя смежными блочными элементами одного подтипа будут сжиматься.

    Пример 5

    Как насчет того, чтобы удалить аннотацию "Prologue" из заголовка, просто с целью демонстрации?

    Удаляем посторонний фрагмент из заголовка.

    Новые правила:

    .sectionNote { display: none; }

    Обтекание элементами других элементов: свойство float

    Фотография размещается слева от этого параграфа. Практически все могут видеть, что этот текст естественным образом ее обтекает, хотя некоторым сначала нужно прекратить удивляться, зачем это понадобилось приклеивать к кошке кусок бекона липкой лентой. Для определения такого поведения компоновки можно использовать атрибуты HTML, но данный результат можно реализовать и с помощью CSS.

    Как можно было бы догадаться, пара свойство/значение, которая создает это волшебство, имеет вид float: left;. Подробное рассмотрение работы с плавающими элементами будет рассмотрено в будущих лекциях, но необходимо затронуть здесь базовые понятия. float: right является также вполне полезной парой свойство/значение, и в связи с этим, когда понадобится отменить задание class, которое вызывает float, можно определить float: none.

    Свойство float имеет несколько инструкций по использованию:

  • Значение float будет иметь смысл, только если применяется к блочному элементу с явно заданным width.
  • Все свойства float, clear, и margin появляются вместе в правилах таблиц стилей, предназначенных для создания в компоновке столбцов.
  • Заставить плавающий элемент растянуться до низа своего контейнера является непростой задачей, но выполнимой. Обычно для этого используют так называемые ложные-столбцы (http://www.alistapart.com/articles/fauxcolumns/).
  • Пример 6

    О задании значения float для цитаты говорилось выше, поэтому сейчас сделаем это и посмотрим результат.

    Цитата всплывает к правому полю.

    Новые правила:

    .pullQuote { float: right; }

    Размещение элементов ниже своих плавающих предшественников: свойство clear

    Подобно свойству float, свойству clear можно присвоить одно из значений left, right, или none. Также поддерживается значение both.

    В то время, как свойство float управляет тем, как контент элементов потомков должен обтекать вокруг него, свойство clear управляет тем, как элемент должен обтекать вокруг всех своих соседей — во многих практических случаях, не во всех.

    Рисунок 30.6 показывает поведение clear: left; в компоновке, где двум начальным последовательным элементам были присвоены одинаковые значения height, и значения float равные left и right:

    (рис 30.6) clear:left позволяет нижнему боксу очистить оба столбца, так как они имеют одинаковую высоту height.

    В предыдущем примере используемый по умолчанию поток элемента #cLeftWidget помещает его сразу под текстом — то есть между #fLeftWidget и #fRightWidget.

    Рассмотрим, что произойдет, когда первый из этой же совокупности элементов будет сделан короче, чем его правый аналог, как показано на рисунке 30.7.

    (рис 30.7) Когда правый столбец будет длиннее левого, clear:left не очистит оба столбца, поэтому необходимо использовать вместо него clear:both.

    В первом примере значение clear последнего элемента задано как left, чтобы получить результат: так как оба плавающих элемента имеют одну высоту, то очищаемый элемент будет помещен ниже обоих. Однако второй пример показывает, что для достижения того же результата с плавающими элементами различной высоты, необходимо использовать clear: both;. Это обсуждение свойства clear является простым введением в его возможности, более подробно эти вопросы будут рассмотрены в будущих лекциях.

    Заключение

    В связи с различием процессоров представления, необходимостью охватывать широкое поле традиционно определяемых элементов, и невозможностью предсказать конкретные размеры окна браузера, компоновка документов Web наполнена трудностями и предостережениями. Однако общий уровень поддержки CSS продвинулся до такой точки, где документы Web нетрудно создать так, чтобы получить приличный результат в различных браузерах.

    Дополнительное чтение

  • Бергевин, Холли, и Галлант, Джон. 2006. Уязвимый Explorer. Местоположение — это всё. http://positioniseverything.net/explorer.html (доступно 1 июля 2008 г.).
  • Бос, Берт, и др. 2007. Спецификация Каскадных таблиц стилей, уровень 2 ревизия 1 (CSS 2.1). Консорциум WWW. http://www.w3.org/TR/2007/CR-CSS21-20070719 и .т.д. (доступно 30 июня 2008 г.).
  • Рагетт, Дейв, и др. 1999. Спецификация HTML 4.01. Консорциум WWW. http://www.w3.org/TR/1999/REC-html401-19991224 и т.д. (доступно 30 июня 2008 г.)
  • Реймонд, Эрик, и Стил, Гай, под ред. 2003. Грубая сила. Файл хакерского жаргона (Версия 4.4.7). http://www.catb.org/jargon/html/B/brute-force.html (доступно 30 июня 2008 г.)
  • Шалци, Джон. 2006. Очевидно ваши люди думают, что я дурачился. Хоть что нибудь. http://www.scalzi.com/whatever/004457.html (доступно 30 июня 2008 г.).
  • Контрольные вопросы

  • При каких обстоятельствах лучше всего использовать сокращенное значение margin, или одиночное свойство границы, такое как margin-top?
  • Когда сокращенные свойства margin, padding, и border-width задаются со всеми четырьмя значениями, в каком порядке эти значения применяются к четырем сторонам элемента?
  • Если вы хотите поместить линию под текстом каждого заголовка в документе, какое свойство вы будете использовать?
  • Какое значение border-style будет использоваться, чтобы придать элементу вид как у кнопки интерфейса?
  • Да или нет: Будет ли определение границы вокруг элемента по умолчанию задавать также поле вокруг контента этого элемента?
  • Если создается элемент, ширина которого не совпадает с шириной его контейнера, какую пару свойство/значение необходимо задать, чтобы этот элемент был горизонтальное центрирован в своем контейнере?
  • Да или нет: Если поместить контейнерный элемент в body и задать для width значение больше 100%, изменится ли поведение холста документа?
  • Если изображение слишком большое для содержащего его элемента, какую пару свойство/значение необходимо использовать, чтобы компоновка страницы не раздувалась, и почему?
  • Если присвоить display значение block в элементе a (ссылка) и задать для этого элемента разумную высоту и ширину, как изменится поведение события указания мышью на эту ссылку в среде представления screen?
  • При нормальных обстоятельствах блочный элемент расширяется для заполнения ширины своего контейнера (минус поля, границы, и заполнение). Изменяется ли на самом деле это поведение по умолчанию, когда этому элементу предшествует плавающий ( float ) элемент - или это только видимость изменения?
  • Если вы намерены применить значение float к элементу, какое другое свойство также необходимо задать на этом элементе?
  • Если вы хотите быть абсолютно уверены, что элемент будет всегда расширяться для заполнения ширины своего контейнера, какие пары свойство/значение необходимо задать?
  • Об авторе

    Бен Хеник создает Web-сайты того или иного вида начиная с сентября 1995 г., когда он взялся за свой первый проект Web как академический доброволец. С тех пор большая часть его работы была сделана в качестве фрилансера.

    Бен является универсалом, его навыки касаются почти любого аспекта создания и разработки сайта, от CSS и HTML до проектирования и написания текста, и до PHP/MySQL и JavaScript/Ajax.

    Он живет в Лоуренсе, Канзас с тремя компьютерами и без телевизора. Вы может прочитать больше о нем и его работе на сайте http://henick.net (http://www.henick.net/).

    Материалы этого курса имеют лицензию Creative Commons Attribution, Non Commercial - Share Alike 2.5 license.
    Вернуться к учебному плану