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

Проектирование, компоновка и представление форм с помощью CSS

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

Введение

Статья имеет следующее содержание:

  • Концепции, представленные в этой статье
  • Переопределение правил и маркеров
  • Новые элементы полей формы
  • Принципы проектирования форм
  • Правило третей
  • Сетки
  • Уровни поддержки платформы
  • Простая контактная форма
  • Разметка
  • Изменения относительно предыдущей формы
  • Очевидные недостатки
  • Новые поля форм? Что это?
  • Выбор описаний: input type="checkbox"
  • Выбор из взаимно исключающих состояний: input type="radio"
  • Когда слишком много вариантов выбора: input type="select/option"
  • Объединение последовательностей элементов управления: "fieldset"
  • Начинаем с самого начала, заканчиваем готовой формой
  • Демонстрация 1
  • Демонстрация 1: сопутствующие рассмотрения
  • Демонстрация 2
  • Демонстрация 2: сопутствующие рассмотрения
  • Демонстрация 3
  • Демонстрация 3: сопутствующие рассмотрения
  • Создание сетки
  • Создание структуры сетки внутри композиции
  • Реализация сетки в таблице стилей
  • Демонстрация 4
  • Демонстрация 4: сопутствующие рассмотрения
  • Правило третей
  • Демонстрация 5
  • Демонстрация 5: сопутствующие рассмотрения
  • Демонстрация 6
  • Демонстрация 6: сопутствующие рассмотрения
  • Демонстрация 7
  • Демонстрация 7: сопутствующие рассмотрения
  • Демонстрация 8
  • Демонстрация 8: сопутствующие рассмотрения
  • Демонстрация 9
  • Демонстрация 9: сопутствующие рассмотрения
  • Демонстрация 10
  • Демонстрация 10: сопутствующие рассмотрения
  • Демонстрация 11
  • Демонстрация 11: сопутствующие рассмотрения
  • Демонстрация 12
  • Демонстрация 12: сопутствующие рассмотрения
  • Создание уровней поддержки платформы
  • Сложные компоновки форм на практике (… вместо теории)
  • Заключение
  • Контрольные вопросы
  • Таблица: преобразования простых дробей в десятичные
  • Библиография
  • Концепции, представленные в этой статье

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

    Переопределение правил и маркеров

    Можно сказать, что использование большого количества маркеров class и id нарушает принцип KISS (принцип сохранения максимальной простоты). Однако сложные компоновки часто создают конфликты в каскадировании - конфликты, которые проще всего разрешаются добавлением к элементам маркеров, и написанием правил таблиц стилей, которые содержат несколько селекторов.

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

    Новые элементы полей формы

    Эффективной форме часто требуется нечто большее, чем простые кнопки и текстовые поля ввода, так как достаточно широко распространено представление ответов пользователей в виде вариантов выбора. Язык HTML предоставляет несколько возможностей для разработчиков, которые встречаются с таким требованием.

    Принципы проектирования форм

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

    Правило третей

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

    Сетки

    Предыдущие статьи показали, как обеспечить согласованное оформление текста и получить максимум возможного от использования пробелов. Эта статья идет немного дальше, объясняя, как использовать единицы измерения em для реализации некоторой степени согласованности компоновки, которую невозможно реализовать без CSS.

    Связи поддержки платформы

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

    Простая контактная форма

    Контактные формы, которые позволяют посетителям сайта посылать сообщения e-mail прямо в папку входящей почты, широко распространены по очевидной причине: они доступны любому с активным адресом e-mail, и легко фильтруются в выделенную папку почты.

    Разметка, использованная в предыдущей статье о формах (статья 20), использует следующую форму, которая была существенно расширена:

    Разметка

    <form id="contactForm" method="post" action="/cgi-bin/service_email_script.php">
      <ul>
        <li id="nameField" class="required"><label for="realname">Name:</label><input type="text"
          name="name" value="" class="medium" id="realname" /><span
          class="note">required</span></li>
        <li id="addressField" class="required"><label for="address">Email:</label><input
          type="text" name="email" value="" class="medium" id="address" /><span 
          class="note">required</span></li>
        <li id="subjectField"><label for="natureOfInquiry">General
        subject:</label>
          <select name="subject" class="medium" id="natureOfInquiry">
            <option value="support">Support</option>
            <option value="billing">Accounts  billing</option>
            <option value="press">Press</option>
            <option value="other_q">Other questions</option>
          </select>
        </li>
        <li id="acctTypeField"><label for="acctNone">Account type:</label>
          <fieldset>
            <label for="acctGold">Gold</label><input type="radio" name="acct_type" id="goldAcct"
              class="rInput" />
            <label for="acctSilver">Silver</label><input type="radio" name="acct_type"
              id="acctSilver" class="rInput" />
            <label for="acctBronze">Bronze</label><input type="radio" name="acct_type"
              id="acctBronze" class="rInput" />
            <label for="acctNone">None</label><input type="radio" name="acct_type" id="acctNone"
              class="rInput" checked="checked" />
          </fieldset>
          <span class="note">required</span>
        </li>
        <li id="availabilityField">
          <label for="availability">My account is unavailable:</label><input type="checkbox"
            name="is_down" id="availability" class="rInput" /></li>
        <li id="messageField"><label for="messageBody">Comments:</label><textarea name="comments"
          cols="32" rows="8" class="long" id="messageBody"></textarea></li>
        <li class="submitField"><input type="submit" value="Send" class="submitButton" /></li>
      </ul>
    </form>

    Изменения относительно предыдущей формы

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

    Новые идентификаторы позволяют также различать поля, которые должны заполняться, и поля, которые не должны.

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

    Очевидные недостатки

    Так как предполагается, что демонстрационная форма является основным контентом, надпись (legend), использованная в предыдущей статье о формах, была заменена заголовком.

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

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

    Новые поля форм? Что это?

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

    Выбор описаний: input type="checkbox"

    …
    <label for="availability">My account is unavailable:</label><input type="checkbox"
      name="is_down" id="availability" class="rInput" />

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

    Выбор из взаимно-исключающих состояний: input type="radio"

    …
    <label for="acctNone">Account type:</label>
    <fieldset>
      <label for="acctGold">Gold</label><input type="radio" name="acct_type" id="goldAcct"
        class="rInput" />
      <label for="acctSilver">Silver</label><input type="radio" name="acct_type"
        id="acctSilver" class="rInput" />
      <label for="acctBronze">Bronze</label><input type="radio" name="acct_type"
        id="acctBronze" class="rInput" />
      <label for="acctNone">None</label><input type="radio" name="acct_type" id="acctNone"
        class="rInput" checked="checked" />
    </fieldset>

    Такая группа позволяет представить рядом несколько вариантов, из которых можно выбрать только один вариант. Одним хорошим примером применения множества радио-кнопок является задание оценки из шкалы 1-5 или 1-10.

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

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

    Как флажки (checkbox), так и радио-кнопки (radio) позволяют использовать атрибут checked, который, если задан, активирует элемент управления по умолчанию, когда он выводится первый раз.

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

    Когда слишком много вариантов выбора: select/option

    …
    <label for="natureOfInquiry">General
    subject:</label>
      <select name="subject" class="medium" id="natureOfInquiry">
        <option value="support">Support</option>
            <option value="billing">Accounts  billing</option>
            <option value="press">Press</option>
            <option value="other_q">Other questions</option>
      </select>

    Элементы select и option предлагают результаты, аналогичные тем, которые предоставляет последовательность радио-кнопок, занимая при этом значительно меньше места. Выбор элемента select вместо последовательности радио-кнопок часто является вопросом того, как используется пространство интерфейса пользователя; длинный список географических областей или отделов на сайте е-коммерции обычно лучше подходит для элементов select, в то время как более короткие последовательности выбора (например, да/нет, true/false, диапазон возраста, диапазон дохода) должны представляться в виде радио-кнопок.

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

    Объединение последовательности элементов управления: fieldset

    Основное назначение элемента fieldset состоит в задании единого контекста последовательности тесно связанных элементов управления (элементы управления text для номера телефона, элементы select для даты, и т.д.).

    Начинаем с самого начала, заканчиваем готовой формой

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

    Читателям настоятельно рекомендуется самостоятельно использовать демонстрационный материал для экспериментов с правилами таблиц стилей.

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

    Демонстрация 1

    Начиная с правила, которое содержит html { margin: 0; padding: 0; }, первый шаг состоит в оформлении body, содержащего страницу.

    Так выглядит страница без дополнительного оформления.

    И код соответствующей страницы.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    
    <title>CSS Technique Demonstration: Forms</title>
    
    <link rel="stylesheet" type="text/css" href="bmh.form.styles.00.css" />
    <!--[if IE]><link rel="stylesheet" type="text/css" 
    href="form_prog_styles_ie.css" /><![endif]-->
    
    </head>
    <body>
    
    <h3>Contact Us</h3>
    
    <form id="contactForm" method="post" action="/cgi-bin/generic_email_script.php">
      <ul>
    	<li id="nameField" class="required"><label for="realname">Name:</label>
          <input type="text" name="name" value="" class="medium" id="realname" />
          <span class="note">required</span></li>
    	<li id="addressField" class="required"><label for="address">Email:</label>
         <input type="text" name="email" value="" class="medium" id="address" />
         <span class="note">required</span></li>
    	<li id="acctTypeField" class="required"><label for="acctNone">Account type:</label>
    		<fieldset>
    			<label for="acctGold">Gold</label><input type="radio" name="acct_type" id="acctGold" class="rInput" />
        <label for="acctSilver">Silver</label><input type="radio" 
          name="acct_type" id="acctSilver" class="rInput" />
        <label for="acctBronze">Bronze</label><input type="radio" name="acct_type" id="acctBronze" class="rInput" />
        <label for="acctNone">None</label><input type="radio" name="acct_type" id="acctNone" 
            class="rInput" checked="checked" />
    		</fieldset>
    		<span class="note">required</span>
    	</li>
    	<li id="subjectField"><label for="natureOfInquiry">General subject:</label>
       <select name="subject" class="medium" id="natureOfInquiry">
    		<option value="support">Support</option>
    		<option value="billing">Accounts  billing</option>
    		<option value="press">Press</option>
    		<option value="other_q">Other questions</option></select>
    	</li>
    	<li id="availabilityField"><label for="availability">My account is unavailable:</label>
          <input type="checkbox" name="is_down" id="availability" class="rInput" /></li>
    	<li id="messageField"><label for="messageBody">Comments:</label>
         <textarea name="comments" cols="32" rows="8" class="long" id="messageBody"></textarea></li>
    	<li class="submitField"><input type="submit" value="Send" class="submitButton" /></li>
      </ul>
    </form>
    
    </body>
    </html>

    Форма с применением оформления body.

    Добавлены новые стили оформления:

    body { 
      margin: 0;
      padding: 1.714em;
      background-image: url(images/bg_grid.gif);
      font-size: 14px;
      font-family: Helvetica,Arial,sans-serif;
      line-height: 1.714em;
    }

    Демонстрация 1: сопутствующие рассмотрения

  • Когда код XHTML подается с правильным Content-Type агенту пользователя, который правильно его поддерживает, в элементе html изображаются используемые по умолчанию margin и/или padding страницы.
  • В тех случаях, которые отличаются от описанных в предыдущем пункте, полоска пробела шириной 10px помещается по периметру страницы; Opera делает это как значение padding, в то время как другие браузеры массового рынка делают это (несколько странно) как значение margin. Демонстрационная таблица стилей нормализует результат.
  • Хотя многие пуристы доступности будут возражать против значения размера шрифта 14px, оно является неотъемлемой частью для различных свойств боксов и типов, определенных где-нибудь в таблице стилей, выраженных по большей части в седьмых долях em. Для тех, кто хочет понять используемую арифметику, в конце статьи представлена таблица преобразования простых дробей в десятичные.
  • Значение 14px было выбрано, так как оно является наименьшим размером основного текста, который может прочитать практически любой посетитель, использующий коррекцию зрения.
  • Так как одной из задач данной статьи является демонстрация работы, которая происходит на хорошо согласованной сетке, на страницу была добавлена фоновая сетка с шагом 24 пикселя.
  • Демонстрация 2

    Теперь, когда контейнеры страницы определены, следующая пара шагов изменяет или удаляет стили агента пользователя.

    Оформление основного заголовка и удаление нежелательных пробелов.

    Новые стили оформления:

    h3 {
      margin: 0 0 1.2em 0;
      border-bottom: .05em solid rgb(0,96,192);
      font-size: 1.429em;
      line-height: 1.15em;
    }
    
    form {
      width: 35.929em;
      margin: 0;
    }
    
    ul {
      margin: 0;
      padding: 0;
      list-style-type: none;
    }

    Демонстрация 2: сопутствующие рассмотрения

  • Изменение размера шрифта для заголовков происходит по разному на различных платформах; однако значения по умолчанию всегда пропорциональны значению medium, использованному для неоформленного текста параграфа, и поэтому наследуется через каскадирование. Задача заданного здесь значения состоит в том, чтобы изменить используемую по умолчанию пропорцию.
  • Считается оптимальным использовать h1 для первого заголовка на странице; здесь эта практика игнорируется, так как в коммерческой производственной среде заголовок сайта часто имеет размер шрифта на странице h1, а заголовок страницы должен помещаться ниже в иерархии заголовков. Во многих случаях степень выделения формы будет совпадать со степенью выделения другого контента или форм в том же документе.
  • Цель оформления h3 состоит в создании бокса контента высотой 24 пикселя с полосой пробела в 24 пикселя непосредственно ниже, так чтобы:$$(((14 \times 1.429) 1.15) + (20 \times .05)) \approx 24 \\ \\ 14 \times 1.429 \approx 20; 20 \times 1.15 == 23; 20 \times .05 == 1; \\ (20 \times 1.2) = 24$$
  • Необходимо задать значение width для form или для элементов списка, если элементы должны быть правильно выровнены без использования позиционирования. Использованное значение порождает статическое значение 503 пикселя; расхождение в один пиксель (для заданного шага атомарной сетки в 24 пикселя) является продуктом ошибок, создаваемых округлением и сглаживанием.
  • Используемые по умолчанию стили агента пользователя для списков варьируются от одного браузера к другому. Internet Explorer задает для каждого элемента списка левое поле в 40 пикселей и помещает маркер пункта в полученном свободном пространстве, в то время как другие браузеры используют заполнение слева блока контента формы как целого. Как и со свойствами компоновки, изменяемыми в правиле body, это правило создано специально для нормализации представления для различных браузеров.
  • Демонстрация 3

    … Теперь для задания контейнеров для элементов формы.

    Оформление элементов списка (контейнеры пар метка/значение) и fieldset

    Новые стили оформления:

    li {
      clear: both;
      height: 1.714em;
      margin: 0;
    }
    
    fieldset {
      height: 1.429em;
      margin: 0 0 -.143em 0;
      border: 0;
    }

    Демонстрация 3: сопутствующие рассмотрения

  • Если кто-то представляет форму как последовательность <cem>rowsem, то необходимость оформления высоты каждой (строки) для сохранения сетки становится очевидной. Поля элементов списка задаются нулевыми в пользу Internet Explorer и для удобства измерения в других случаях.
  • Так как для многих элементов в форме будут заданы значения float, элементам охватывающего списка присваивается значение clear: both, чтобы гарантировать, что каждый из них будет помещаться ниже своего предшественника как само собой разумеющееся.
  • Кроме удаления рамки (которая является частью используемого по умолчанию стиля агента пользователя), свойства компоновки fieldset кажутся заданными достаточно произвольно. Фактически они были заданы после тестирования в различных браузерах, что еще раз обсуждается кратко в примечаниях к Демонстрации 11.
  • В этом месте не задаются никакие значения display или float, что объясняет, почему контент fieldset конфликтует с поcледующим элементом управления select.
  • Создание сетки

    Одним из самых значительных усилений хорошего графического дизайна (и вместе с этим, хорошего дизайна интерфейса) является то, что объекты размещаются с предсказуемыми интервалами. Эти интервалы обычно называют сеткой.

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

    Истинно эффективная сетка имеет следующие характеристики:

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

    Создание структуры сетки в композиции

    Большинство профессионалов для создания композиций компоновки сайта используют инструмент Adobe Photoshop, и одним из его достоинств является легкость доступа к линиям сетки, которые он предоставляет. Для вывода атомарной сетки в Photoshop можно выбрать View $$\to$$ Show $$\to$$ Grid, что приведет к выводу линий сетки с интервалами, заданными в Guides Grid Preferences. Наложение направляющих для таких объектов, как столбцы, реализуется затем выбором View $$\to$$ Rulers, переключением в инструмент Move, и перетаскиванием указателя с линейки требуемым образом.

    Реализация сетки в таблице стилей

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

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

    Демонстрация 4

    Сохранение объектов выровненными по сетке означает присвоение свойств компоновки меткам и элементам управления формы.

    Выравниваем два основных столбца

    Новые стили оформления:

    label {
      display: block;
      float: left;
      clear: left;
      width: 10.286em;
      overflow: auto;
      padding-right: 1.714em;
      text-align: right;
    }
    
    input {
      height: 1.143em;
      border: .071em solid rgb(96,96,96);
      padding: .071em;
      line-height: 1;
    }

    Демонстрация 4: сопутствующие рассмотрения

  • Все элементы управления формы, включая текстовые области и метки, изображаются по умолчанию как элементы %inline.
  • Чтобы создать согласованный левый столбец, элементам label необходимо присвоить width ; в "строгом" режиме визуализации, заданное padding вдоль стороны делает рабочий пробел между элементами управления и метками достоверной реальностью.
  • Выравнивая метки и элементы управления с общим полем облегчает следование форме. Этот факт и другие моменты композиции обсуждаются как часть обсуждения Правила третей - см. ниже.
  • В данный момент существуют очевидные проблемы с формой:
  • Меткам (label), присоединенным к радио-кнопкам (radio), присваиваются такие же значения display и float, как и другим меткам (label) на форме. В паре с существующими значениями height и overflow, эти элементы конфликтуют в некоторых браузерах со следующей парой метка-элемент управления.
  • В Safari 3 рамки текстовых элементов управления исчезают на этом изображении. Можно предположить, что это ошибка визуализации.
  • Элементы управления radio появляются выровненными относительно друг друга в порядке исходного кода; это происходит, потому что промежуточные элементы управления label находятся теперь в различном контексте компоновки.
  • Другим любопытным моментом, который заслуживает упоминания, является присвоение меткам overflow: auto. Прием, применяемый здесь, можно описать как правило: если один элемент %block находится внутри другого, и при условии, что только для одного из них высота height определена в статических единицах измерения или em, которая увеличивается до известного числа пикселей, то присваивание overflow: auto другому элементу — элементу без значения height — будет приводить к расширению его до height элемента с дискретным значением height. Эта техника используется также в Демонстрации 11.
  • Правило третей

    (рис 34.1) Сцена ранней весны в Портланде, Орегон. На эту фотографию были наложены линии, иллюстрирующие Правило третей; обратите внимание, как нижнее правое пересечение и линии, которые его формируют, ограничивают видимую деятельность. Фото автора ©2000; авторские права защищены

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

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

    (рис 34.2) Снимок с экрана msnbc.msn.com с наложенными первыми семью золотыми прямоугольниками. Размеры четвертого и пятого прямоугольников иллюстрируют природу сетки компоновки страницы в целом

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

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

    Демонстрация 5

    Чтобы гарантировать, что созданная сетка сохраняется как по вертикали, так и по горизонтали, необходимо рассмотреть некоторые особенности. Эти изменения почти целиком носят косметический характер.

    Слегка изменяем представление элементов управления textarea и select

    Новые стили оформления:

    textarea {
      height: 4.714em;
      margin-bottom: .286em;
      border: .071em solid rgb(96,96,96);
      padding: 0;
    }
    
    select {
      display: block;
      float: left;
      height: 1.571em;
      font-family: Futura,'Century Gothic',sans-serif;
    }
    
    option { font-size: 100%; }

    Демонстрация 5: сопутствующие рассмотрения

  • На платформах Windows можно изменить элементы управления select, чтобы удалить некоторую перекошенность, что делает их более похожими на текстовые элементы управления.
  • Так как легкость использования обычно улучшается, когда пользователь имеет возможность различать с первого взгляда свой ввод и остальную форму, то шрифт, использованный для представления значений формы, будет отличаться от шрифта, использованного в остальной части формы. С этой целью данная демонстрация изменяет первые из этих значений.
  • Каскадирование, как правило не соблюдается в отношении представления текста в элементах управления формы, что является еще одной причиной, почему здесь имеется несколько явных значений текста/шрифта. Применение inherit исключается по соображениям предпочтения и привычки, но не по какой-то объективной причине.
  • Демонстрация 6

    Предыдущая демонстрация манипулирует представлением некоторых шрифтов; теперь пора закончить эту работу.

    Нормализуем представление элементов управления text и настроим результат каскадирования на тексте элементов управления select.

    Новые стили оформления:

    input, textarea {
      display: block;
      float: left;
      overflow: hidden;
      font-family: Futura,'Century Gothic',sans-serif;
      font-size: 1em;
    }
    
    input, textarea, select {
      margin-top: 0;
      font-size: 100%;
    }

    Демонстрация 6: сопутствующие рассмотрения

  • В этой демонстрации мы видим первый случай значений, которые были сознательно отложены в сторону для одновременного присвоения нескольким селекторам. Исключение значений border из этих правил является искусственным образованием производственного процесса, который был выполнен в порядке отличном от представления этих демонстраций — момент, который обсуждается подробнее позже.
  • Как упоминалось выше, значения текста и шрифта в элементах управления формы не получают пользы от каскадирования. Эти правила предназначения для этой проблемы. Следовательно, большинство различных элементов управления теперь соответствуют желательной компоновке.
  • В связи с поведением Internet Explorer 6 остальным элементам управления формы значение float задано как left. Это значение было выбрано по привычке, полученной в результате (неприятного) опыта, но не является строго необходимым.
  • При задании значений block текстовым элементам управления проблема визуализации в Safari, видимая в двух предыдущих демонстрациях, внезапно разрешилась. Такие странности встречаются достаточно часто при оформлении форм.
  • Также как не были правильно нормализованы значения border, не были нормализованы и значения font-size; задание значений 1em текстовым элементам управления и значений 100% элементам управления select было полностью произвольно.
  • Демонстрация 7

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

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

    Новые стили оформления:
    
    .medium { width: 11.714em; }
    
    select.medium { width: 12em; }
    
    .long { width: 20.429em; }
    
    .rInput { border: 0; }
  • Повторное рассмотрение разметки исходного кода покажет, что каждому элементу управления был присвоен class - одному из трех, связанных с шириной, элементов управления для текста и элементов управления select, и другие классы для элементов управления, которые зависят от ввода указателя/курсора, а не от ввода клавиатуры.
  • Классы для элементов управления необходимо задавать в основном потому, что Internet Explorer имеет ограниченную поддержку для развитых селекторов. По мере развития селекторов rInput class можно будет также легко заменить на input[type="radio"], input[type="checkbox"]… если текущие производственные версии Internet Explorer вообще будут это поддерживать.
  • Задание трех возможных значений для текстовых элементов управления совершенно произвольно, и остается на усмотрение дизайнера. В коммерческих настройках некоторые дизайнеры создают такие необычные компоновки, что селекторы class, такие как используются здесь, будут функционально бесполезны. Задание id для каждой пары метка/элемент управления предоставляет простейшую возможную ссылку на каждый элемент формы — простота, которая является ценной при оформлении работы дизайнера, который настаивает на своем вмешательстве в каждом элементе компоновки сайта.
  • Демонстрация 8

    Кнопка отправки формы была вялой …

    Точно настраиваем позицию кнопки отправки формы.

    Новые стили оформления:

    .submitButton {
      display: block;
      clear: both;
      width: 7.2em;
      height: 2em;
      margin: 0 0 0 16.8em;
      border: 1px solid rgb(128,128,128);
      padding: 0;
      font-size: 10px;
      text-align: center;
    }

    Демонстрация 8: сопутствующие рассмотрения

  • Самой большой проблемой, которая встречается при оформлении кнопок отправки, состоит в размещении их точно так, как требуется дизайнеру. Обычная практика получения требуемого вида состоит в тщательной подгонке компоновки и свойств line-height; некоторые разработчики могут найти менее трудоемким использование вместо этого замену изображения (см. Библиографию) или input type="image".
  • На первый взгляд задание display: block для этого объекта кажется избыточным — и действительно является избыточным, если думать только в терминах единственной формы на единственной странице. Однако в контексте всего сайта это может оказаться не избыточным; многие сайты и приложения имеют несколько форм в одном документе с различными значениями display.
  • Демонстрация 9

    Разместим "требуемые" теги там, где они должны находиться.

    Выравниваем "требуемые" теги к воображаемому правому полю формы, и изменяем их текстовые свойства.

    Новые стили оформления:

    li.required span.note {
      display: block;
      width: auto;
      float: right;
      color: rgb(128,128,128);
      font-size: .714em;
      line-height: 2.4em;
      font-style: italic;
    }

    Демонстрация 9: сопутствующие рассмотрения

  • В своем текущем состоянии элемент fieldset, содержащий элементы управления radio все еще является блочным элементом, поэтому он распространяется до правого поля формы. В результате тег, присоединенный к этому множеству элементов управления, смещается ниже вычисленного нижнего края fieldset.
  • Значение auto, задаваемое для width "требуемых" тегов, определяет, что они не могут быть шире своего контента.
  • Более внимательное рассмотрение арифметики, использованной для набора текста "требуемых" тегов, покажет, размер шрифта в десять пикселей, и интерлиньяж в 24 пикселя (эквивалентный одной атомарной единице используемой сетки).
  • Структура, использованная для индикации требуемых полей, создана с учетом интерактивного взаимодействия с пользователями; с помощью различных классов, использованных на форме, можно проверять ввод пользователя с помощью JavaScript, и изменять оформление меток, полей, и/или тегов в настройках меток/элементов управления, которые не были правильно обработаны пользователем.
  • Демонстрация 10

    Наконец пришло время уладить конфликты элементов управления radio с полями под ними в порядке исходного кода.

    Выравниваем элементы управления radio и их метки по горизонтали.

    Новые стили оформления:

    fieldset label {
      margin-right: .25em;
      padding-right: 0;
      line-height: 1;
    }
    
    fieldset .rInput { margin-right: .75em; }
    
    fieldset label, fieldset .rInput {
      width: auto;
      display: inline;
      float: none;
      font-size: .857em;
    }
    
    li.required fieldset {
      width: 18.857em;
      float: left;
    }

    Демонстрация 10: сопутствующие рассмотрения

  • Основной результат этих правил, кроме выполнения косметических настроек, состоит в изменении значения display элементов управления radio и checkbox снова на inline. Это делается с целью избежать трудностей, которые возникают, когда они становятся плавающими, как остальные элементы input в форме.
  • Вместо задания display: inline соответствующим элементам управления, они остаются "замененными" элементами: строковыми элементами с известными во время выполнения статическими размерами (т.е., до того как браузер реально начнет визуализацию контента). В связи с этим к этим объектам можно применять поля.
  • Специфическая природа элементов fieldset — в частности, то что они являются только элементами %block, специально предназначенными для использования в формах — требует, чтобы в этом случае применялась дискретная ширина к любым fieldset, содержащим элементы управления, которые требуют активации пользователя. (См. обсуждение выше значений "требуемого" тега компоновки.)
  • Демонстрация 11

    Для последней атаки, чтобы выровнять последние штрихи просто так …

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

    Новые стили оформления:

    #acctTypeField fieldset {
      padding: .286em 0 0 0;
      line-height: normal;
    }
    
    #acctTypeField .rInput { margin-top: .167em; }
    
    #availabilityField label {
      height: 3.143em;
      padding-top: .286em;
      line-height: normal;
    }
    
    #availabilityField .rInput { margin-top: .286em; }
    
    #availabilityField, #messageField {
      height: 1%;
      overflow: auto;
    }

    Демонстрация 11: сопутствующие рассмотрения

  • Здесь также используется overflow, как в Демонстрации 4; #availabilityField имеет label известной высоты (height), а #messageField аналогично textarea.
  • Использование маркера #acctTypeField для изменения значения padding для fieldset, которое он содержит, вполне может быть слишком специфическим. Однако для этого требуется тонкая обработка при записи стилей, которые могут быть так легко подвержены влиянию стилей соседних элементов.
  • Остальные правила в этом блоке таблицы стилей делают небольшие изменения в компоновке, которые все были определены в ходе тестирования. К сожалению часы тестирования и тонкой настройки могут не найти поведение, которое будет производить идентично составленные элементы управления radio, как в Safari 3, так и в Firefox 3. Результатом является базовая линия на метках (label) элементов управления radio, которые не в порядке в Firefox 3. Обычно можно сказать, что оформление элементов checkbox и radio является чем-то вроде тайного знания.
  • Демонстрация 12

    Все предыдущие стили оформления были разработаны для Opera или Safari (выбирайте, оба браузера ведут себя относительно хорошо). Далее следуют правила специально созданные для Internet Explorer, определенные в файле CSS, присоединенном (link) в условном блоке комментария.

    Делаем последнее множество изменений для Internet Explorer

    Новые стили оформления:

    h3 { margin-bottom: 1.2em; }
    li { margin: 0 0 -.214em 0; }
    
    select { height: 1.429em; }
    
    textarea { height: 4.571em; }
    
    fieldset {
      height: 1.583em;
      padding-top: .417em;
    }
    
    .medium { width: 13.429em; }
    
    select.medium { width: 13.714em; }
    
    .long { width: 20.286em; }
    
    fieldset .rInput { border: 0 !important; }
    
    #subjectField { margin-bottom: -.214em; }
    
    #availabilityField .rInput { margin-top: .286em; }
    
    #messageField { padding-bottom: .286em; }
    
    input.submitButton { margin-top: .15em; }
    
    * html input, * html textarea { float: left; }
    
    * html select { font-size: .643em; }
    
    * html select.medium { width: 21.364em; }
    
    * html textarea { height: 4.643em; }
    
    * html #subjectField {
      margin-top: .071em;
      margin-bottom: 0;
    }
    
    * html #availabilityField label { padding-top: 0; }
    
    * html input.submitButton { margin: .1em 0 0 7em; }

    Демонстрация 12: сопутствующие рассмотрения

  • Как можно видеть, все показанные выше стили оформления предполагают небольшие различия в том, как Internet Explorer каскадирует размеры шрифтов и размещение боксов.
  • Другим объектом, заслуживающим внимания, является селектор * html. Internet Explorer 5 и 6 являются единственными браузерами, которые распознают этот селектор, что делает его эффективным низкопроходным фильтром для правил таблиц стилей, предназначенных для этих браузеров.
  • Создание уровней поддержки платформы

    Последний раздел демонстрации показывает разновидность стилей оформления, отложенных для Internet Explorer 6 и 7, и требует обсуждения, насколько широко различные браузеры рассматриваются добросовестной командой разработчиков сайта.

    Реальность Web состоит в том, что пользователи используют множество всевозможных браузеров во всевозможных рабочих средах. Некоторые из них являются старыми, в то время как другие находятся на переднем крае развития. Некоторые выполняются на полнофункциональных компьютерах, в то время как другие выполняются на мобильных устройствах, таких как телефоны. Все они разработаны в определенных операционных системах, а затем перенесены на другие с различной степенью поддержки стандартов. За исключением Opera, все поставщики браузеров, поставляют продукты, которые создаются для использования вместе с другими продуктами в более обширных пакетах -- требование разработки, которое делает эти браузеры более сложными, чем требуется для единственной задачи просмотра Web. Как будто бы было недостаточно рассмотрения множества сильных и слабых сторон браузеров, но существует также вопрос ошибок -- ошибок системы безопасности, ошибок компонентов, и особенно ошибок визуализации. Пользователи Safari 3.x обнаружили, что в определенный момент документ демонстрации выявляет разрушительную ошибку визуализации в их собственном браузере. Лучшим способом разрешения таких вопросов является определение уровней поддержки. Такая практика была впервые провозглашена командой разработки интерфейса в Yahoo!, которые назвали его "Ранжированной поддержкой браузеров".

    Обычно уровни поддержки попадают в четыре широкие категории:

  • Сайт выводится, как первоначально задумывался, в пределах возможностей этих браузеров, и все свойства полностью поддерживаются. Платформа разработки определяет, так называемый иногда уровень "A+".
  • Отклонение от предпочтительной композиции является очевидным, возможно в существенной степени; однако, сайт все еще можно использовать, и большинство, если не все, свойства сайта поддерживаются.
  • Сайт, предлагаемый пользователям этих браузеров, является настолько простым, насколько может поддерживаться без потери бренда владельца сайта, и свойства сайта вполне могут отключаться. Эти браузеры имеют обычно относительно небольшие базы установки, и предполагаются устаревшими, нестабильными, или неполноценными.
  • Называемый в документации Yahoo! как поддержка степени "X Grade", этот уровень поддержки зарезервирован для нетестированных платформ — обычно более новых браузеров с небольшими базами установки (часто Opera, естественно). После тестирования такие браузеры перемещают на более высокий уровень.
  • Особенности процесса сбора требований, который формирует определение уровней поддержки и распределяет по ним браузеры, были бы длительными и скучными, и поэтому были исключены из этой и так длинной статьи.

    Сложные компоновки форм на практике (… вместо теории)

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

  • Чтобы наметить в общих чертах последовательность демонстраций на основе временной шкалы было бы необходимо поддерживать журнал (или хранить таблицу стилей в системе контроля версий) - что никогда не делалось. К тому времени, когда этот недосмотр был замечен, эта статья была и так слишком просрочена, чтобы исправлять это.
  • Представление согласно порядку исходного кода существенно облегчает создание документов демонстрации — еще одна уступка идеала практике.
  • Так как исходная таблица стилей демонстрации была написана со значительной (если не исчерпывающей) заботой о нормализации и порядке исходного кода — как и должно быть для всех производственных таблиц стилей — представление демонстрации в порядке исходного кода гарантирует, что тем студентам, которые хотят "видеть исходный код", будет значительно легче понять смысл того, что реально делается.
  • В качестве агента пользователя во время разработки использовался браузер Opera 9.6 для OS X; с учетом этой оговорки и отмеченных выше других замечаний, ниже представлен общий порядок, в котором изменения и дополнения были сделаны в таблице стилей:

  • Применяются стили документа (т.е., body)
  • Перезадаются значения по умолчанию списков, форм, и fieldset
  • Определяется набор текста
  • Объекты списка ограничиваются и очищаются (clear)
  • Метки (label) размещаются в целом
  • Определяется и нормализуется компоновка элементов управления формы (главным образом размеры)
  • Создается кнопка отправки
  • Задаются крайние случаи
  • Тестируются браузеры Safari и Firefox и изменяются значения таблицы стилей, чтобы отразить компромиссы (где возможно)
  • Тестируются браузеры Internet Explorer 6 и 7 и в условную таблицу стилей добавляются настройки свойство/значение
  • Описанный непосредственно выше процесс начинается с самых широко применяемых правил, и сужается в специфичности до рассмотрения индивидуальных особенностей отдельных браузеров … по большей части в порядке исходного кода самой таблицы стилей. Однако результаты коррелируют не точно. Это происходит, потому что различные процессоры визуализации и особенности таких объектов, как плавающий контекст, приносят почти непредвиденные последствия, когда смешиваются в общеизвестную смесь, поэтому реальный процесс требует больше, чем небольшого изменения, подстройки, и пересмотра.

    Заключение

    Эта статья содержит достаточное основание для оформления и компоновки форм, но можно пойти еще дальше. Трудности, создаваемые операционными системами (компоненты которых заимствуются для создания элементов управления формы Web), и различия между процессорами визуализации, создают дополнительные проблемы при постановке задачи перед оформителем, которому требуется создать форму Web согласно спецификации. Эта глава открывает дверь к экспериментированию с множеством особенностей, связанных с задачей, и разъясняет способ достижения достаточного уровня мастерства в одном из наиболее трудных аспектов разработки приложений Web.

    Контрольные вопросы

  • Какой тип обтекания у элементов управления формы, которые принимают ввод пользователя, и какие две характеристики делают их выделяющимися в отношении компоновки?
  • Какие два атрибута отличные от value и disabled управляют настройками элементов управления формы до взаимодействия пользователя, и к каким элементам они применяются?
  • Документ демонстрации обеспечивает требуемые поля. Напишите, по крайней мере, одно правило таблицы стилей, которое будет разом изменять внешний вид поля, которое содержит образец ошибки или пропуск ввода пользователя.
  • Опишите по одному случаю использования для каждого из элементов управления select, checkbox, и radio. Обоснуйте каждое описание объяснением преимуществ, которое предоставляет сделанный выбор, при сравнении с другими возможными вариантами выбора.
  • Используя сетевую ссылку, выбранную инструктором, найдите и кратко опишите альтернативы для input type="submit".
  • Создайте элемент select, который позволяет выбрать несколько options, добавляя пару атрибут/значение multiple="multiple". После анализа поведения этого элемента, объясните, почему он редко встречается на производственных сайтах.
  • Таблица: преобразование простых дробей в десятичные

    В следующей таблице цифры, находящиеся в скобках со звездочкой после них, бесконечно повторяются; например, 0.2(6*) эквивалентно 0.266666666666666… (6 повторяется бесконечно).

    Ближайшие к нулю значения находятся в таблице слева, и приближаются к единице в таблице при движении слева направо.

    x 1/x 2/x 3/x 4/x 5/x 6/x 7/x 8/x 9/x 10/x 11/x 12/x 13/x 14/x 15/x
    2 .5 - - - - - - - - - - - - - -
    3 .(3*) .(6*) - - - - - - - - - - - - -
    4 .25 .5 .75 - - - - - - - - - - - -
    5 .4 .6 .8 - - - - - - - - - - -
    6 .1.(6*) ..3*) .5 .(6*) .8(3*) - - - - - - - - - -
    7 .(142857*) .(285714*) .(428571*) .(571428*) .(714285*) .(857142*) - - - - - - - - -
    8 .125 .25 .375 .5 .625 .75 .875 - - - - - - - -
    9 .(1*) .(2*) .(3*) .(4*) .(5*) .(6*) .(7*) .(8*) - - - - - - -
    10 .1 .2 .3 .4 .5 .6 .7 .8 .9 - - - - - -
    11 .(09*) .(18*) .(27*) .(36*) .(45*) .(54*) .(63*) .(72*) .(81*) .(90*) - - - - -
    12 .08(3*) .1(6*) .25 .(3*) .41(6*) .5 .58(3*) .(6*) .75 .8(3*) .91(6*) - - - -
    13 .(076923*) .(153846*) .(230769*) .(307692*) .(384615*) .(461538*) .(538461*) .(615383*) .(692307*) .(769230*) .(846153*) .(923076*) - - -
    14 .0(714285*) .(142857*) .2(142857*) .(285714*) .3(571428*) .(428571*) .5 .5(714285*) .6(428571*) .(714285*) .7(857142*) .(857142*) .9(285714*) - -
    15 .0(6*) .1(3*) .2 .2(6*) .(3*) .4 .4(6*) .5(3*) .6 .(6*) .7(3*) .8 .8(6*) .9(3*) -
    16 .0625 .125 .1875 .25 .3125 .375 .4375 .5 .625 .625 .6875 .75 .8125 .857 .9375

    Библиография

  • Бос, Берт, и др. 2007. Спецификация каскадных таблиц стилей уровня 2 ревизии 1 (CSS 2.1). Консорциум WWW. http://www.w3.org/TR/2007/CR-CSS21-20070719 и т.д. (доступно 28 мая 2008 г.).
  • Хеник, Бен. 2006. 12 уроков для тех, кто боится CSS и стандартов. A List Apart. http://www.alistapart.com/articles/12lessonsCSSandstandards (доступно 16 декабря 2008 г.).
  • Хоротон, Сара, и Линч, Патрик. 2002. Руководство по стилевому оформлению Web (http://www.webstyleguide.com/): базовые принципы создания Web-сайтов, 2-е изд., New Haven, Conn.: Yale University Press.
  • Knott, Ron. 2008. The golden section ratio: phi. Department of Mathematics, University of Surrey (UK). http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/phi.html (доступно 18 декабря 1008 г.).
  • Meyer, Eric. 2007. Formal weirdness. Meyerweb.com. http://meyerweb.com/eric/thoughts/2007/05/15/formal-weirdness/ (доступно 17 декабря 2008 г.).
  • Microsoft Corporation. msnbc.com. http://msnbc.msn.com/ (доступно 17 декабря 2008 г.).
  • Рагетт, Дейв, и др., 1999. Спецификация HTML 4.01. Консорциум WWW. http://www.w3.org/TR/1999/REC-html401-19991224 etc. (доступно 30 июня 2008 г.).
  • Рейнольд, Гарр. 2005. От золотого среднего к "правилу третей". Presentation Zen. http://www.presentationzen.com/presentationzen/2005/08/from_golden_mea.html (доступно 16 декабря 2008 г.).
  • Santa Maria, Jason. 2008. Making modular layout systems. 24 Ways. http://24ways.org/2008/making-modular-layout-systems (доступно 16 декабря 2008 г.).
  • Wikipedia. 2008. Fahrner image replacement. http://en.wikipedia.org/wiki/Fahrner_Image_Replacement (доступно 19 декабря 2008 г.).
  • Yahoo! Developer Network. 2008. Ранжированная поддержка браузеров. http://developer.yahoo.com/yui/articles/gbs/ (доступно 16 декабря 2008 г.).
  • Предыдущая статья — Оформление таблиц

    Следующая статья — Плавающие элементы и очистка

    Об авторе

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

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

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

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

    Введение

    Статья имеет следующее содержание:

  • Концепции, представленные в этой статье
  • Переопределение правил и маркеров
  • Новые элементы полей формы
  • Принципы проектирования форм
  • Правило третей
  • Сетки
  • Уровни поддержки платформы
  • Простая контактная форма
  • Разметка
  • Изменения относительно предыдущей формы
  • Очевидные недостатки
  • Новые поля форм? Что это?
  • Выбор описаний: input type="checkbox"
  • Выбор из взаимно исключающих состояний: input type="radio"
  • Когда слишком много вариантов выбора: input type="select/option"
  • Объединение последовательностей элементов управления: "fieldset"
  • Начинаем с самого начала, заканчиваем готовой формой
  • Демонстрация 1
  • Демонстрация 1: сопутствующие рассмотрения
  • Демонстрация 2
  • Демонстрация 2: сопутствующие рассмотрения
  • Демонстрация 3
  • Демонстрация 3: сопутствующие рассмотрения
  • Создание сетки
  • Создание структуры сетки внутри композиции
  • Реализация сетки в таблице стилей
  • Демонстрация 4
  • Демонстрация 4: сопутствующие рассмотрения
  • Правило третей
  • Демонстрация 5
  • Демонстрация 5: сопутствующие рассмотрения
  • Демонстрация 6
  • Демонстрация 6: сопутствующие рассмотрения
  • Демонстрация 7
  • Демонстрация 7: сопутствующие рассмотрения
  • Демонстрация 8
  • Демонстрация 8: сопутствующие рассмотрения
  • Демонстрация 9
  • Демонстрация 9: сопутствующие рассмотрения
  • Демонстрация 10
  • Демонстрация 10: сопутствующие рассмотрения
  • Демонстрация 11
  • Демонстрация 11: сопутствующие рассмотрения
  • Демонстрация 12
  • Демонстрация 12: сопутствующие рассмотрения
  • Создание уровней поддержки платформы
  • Сложные компоновки форм на практике (… вместо теории)
  • Заключение
  • Контрольные вопросы
  • Таблица: преобразования простых дробей в десятичные
  • Библиография
  • Концепции, представленные в этой статье

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

    Переопределение правил и маркеров

    Можно сказать, что использование большого количества маркеров class и id нарушает принцип KISS (принцип сохранения максимальной простоты). Однако сложные компоновки часто создают конфликты в каскадировании - конфликты, которые проще всего разрешаются добавлением к элементам маркеров, и написанием правил таблиц стилей, которые содержат несколько селекторов.

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

    Новые элементы полей формы

    Эффективной форме часто требуется нечто большее, чем простые кнопки и текстовые поля ввода, так как достаточно широко распространено представление ответов пользователей в виде вариантов выбора. Язык HTML предоставляет несколько возможностей для разработчиков, которые встречаются с таким требованием.

    Принципы проектирования форм

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

    Правило третей

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

    Сетки

    Предыдущие статьи показали, как обеспечить согласованное оформление текста и получить максимум возможного от использования пробелов. Эта статья идет немного дальше, объясняя, как использовать единицы измерения em для реализации некоторой степени согласованности компоновки, которую невозможно реализовать без CSS.

    Связи поддержки платформы

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

    Простая контактная форма

    Контактные формы, которые позволяют посетителям сайта посылать сообщения e-mail прямо в папку входящей почты, широко распространены по очевидной причине: они доступны любому с активным адресом e-mail, и легко фильтруются в выделенную папку почты.

    Разметка, использованная в предыдущей статье о формах (статья 20), использует следующую форму, которая была существенно расширена:

    Разметка

    <form id="contactForm" method="post" action="/cgi-bin/service_email_script.php">
      <ul>
        <li id="nameField" class="required"><label for="realname">Name:</label><input type="text"
          name="name" value="" class="medium" id="realname" /><span
          class="note">required</span></li>
        <li id="addressField" class="required"><label for="address">Email:</label><input
          type="text" name="email" value="" class="medium" id="address" /><span 
          class="note">required</span></li>
        <li id="subjectField"><label for="natureOfInquiry">General
        subject:</label>
          <select name="subject" class="medium" id="natureOfInquiry">
            <option value="support">Support</option>
            <option value="billing">Accounts  billing</option>
            <option value="press">Press</option>
            <option value="other_q">Other questions</option>
          </select>
        </li>
        <li id="acctTypeField"><label for="acctNone">Account type:</label>
          <fieldset>
            <label for="acctGold">Gold</label><input type="radio" name="acct_type" id="goldAcct"
              class="rInput" />
            <label for="acctSilver">Silver</label><input type="radio" name="acct_type"
              id="acctSilver" class="rInput" />
            <label for="acctBronze">Bronze</label><input type="radio" name="acct_type"
              id="acctBronze" class="rInput" />
            <label for="acctNone">None</label><input type="radio" name="acct_type" id="acctNone"
              class="rInput" checked="checked" />
          </fieldset>
          <span class="note">required</span>
        </li>
        <li id="availabilityField">
          <label for="availability">My account is unavailable:</label><input type="checkbox"
            name="is_down" id="availability" class="rInput" /></li>
        <li id="messageField"><label for="messageBody">Comments:</label><textarea name="comments"
          cols="32" rows="8" class="long" id="messageBody"></textarea></li>
        <li class="submitField"><input type="submit" value="Send" class="submitButton" /></li>
      </ul>
    </form>

    Изменения относительно предыдущей формы

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

    Новые идентификаторы позволяют также различать поля, которые должны заполняться, и поля, которые не должны.

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

    Очевидные недостатки

    Так как предполагается, что демонстрационная форма является основным контентом, надпись (legend), использованная в предыдущей статье о формах, была заменена заголовком.

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

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

    Новые поля форм? Что это?

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

    Выбор описаний: input type="checkbox"

    …
    <label for="availability">My account is unavailable:</label><input type="checkbox"
      name="is_down" id="availability" class="rInput" />

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

    Выбор из взаимно-исключающих состояний: input type="radio"

    …
    <label for="acctNone">Account type:</label>
    <fieldset>
      <label for="acctGold">Gold</label><input type="radio" name="acct_type" id="goldAcct"
        class="rInput" />
      <label for="acctSilver">Silver</label><input type="radio" name="acct_type"
        id="acctSilver" class="rInput" />
      <label for="acctBronze">Bronze</label><input type="radio" name="acct_type"
        id="acctBronze" class="rInput" />
      <label for="acctNone">None</label><input type="radio" name="acct_type" id="acctNone"
        class="rInput" checked="checked" />
    </fieldset>

    Такая группа позволяет представить рядом несколько вариантов, из которых можно выбрать только один вариант. Одним хорошим примером применения множества радио-кнопок является задание оценки из шкалы 1-5 или 1-10.

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

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

    Как флажки (checkbox), так и радио-кнопки (radio) позволяют использовать атрибут checked, который, если задан, активирует элемент управления по умолчанию, когда он выводится первый раз.

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

    Когда слишком много вариантов выбора: select/option

    …
    <label for="natureOfInquiry">General
    subject:</label>
      <select name="subject" class="medium" id="natureOfInquiry">
        <option value="support">Support</option>
            <option value="billing">Accounts  billing</option>
            <option value="press">Press</option>
            <option value="other_q">Other questions</option>
      </select>

    Элементы select и option предлагают результаты, аналогичные тем, которые предоставляет последовательность радио-кнопок, занимая при этом значительно меньше места. Выбор элемента select вместо последовательности радио-кнопок часто является вопросом того, как используется пространство интерфейса пользователя; длинный список географических областей или отделов на сайте е-коммерции обычно лучше подходит для элементов select, в то время как более короткие последовательности выбора (например, да/нет, true/false, диапазон возраста, диапазон дохода) должны представляться в виде радио-кнопок.

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

    Объединение последовательности элементов управления: fieldset

    Основное назначение элемента fieldset состоит в задании единого контекста последовательности тесно связанных элементов управления (элементы управления text для номера телефона, элементы select для даты, и т.д.).

    Начинаем с самого начала, заканчиваем готовой формой

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

    Читателям настоятельно рекомендуется самостоятельно использовать демонстрационный материал для экспериментов с правилами таблиц стилей.

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

    Демонстрация 1

    Начиная с правила, которое содержит html { margin: 0; padding: 0; }, первый шаг состоит в оформлении body, содержащего страницу.

    Так выглядит страница без дополнительного оформления.

    И код соответствующей страницы.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    
    <title>CSS Technique Demonstration: Forms</title>
    
    <link rel="stylesheet" type="text/css" href="bmh.form.styles.00.css" />
    <!--[if IE]><link rel="stylesheet" type="text/css" 
    href="form_prog_styles_ie.css" /><![endif]-->
    
    </head>
    <body>
    
    <h3>Contact Us</h3>
    
    <form id="contactForm" method="post" action="/cgi-bin/generic_email_script.php">
      <ul>
    	<li id="nameField" class="required"><label for="realname">Name:</label>
          <input type="text" name="name" value="" class="medium" id="realname" />
          <span class="note">required</span></li>
    	<li id="addressField" class="required"><label for="address">Email:</label>
         <input type="text" name="email" value="" class="medium" id="address" />
         <span class="note">required</span></li>
    	<li id="acctTypeField" class="required"><label for="acctNone">Account type:</label>
    		<fieldset>
    			<label for="acctGold">Gold</label><input type="radio" name="acct_type" id="acctGold" class="rInput" />
        <label for="acctSilver">Silver</label><input type="radio" 
          name="acct_type" id="acctSilver" class="rInput" />
        <label for="acctBronze">Bronze</label><input type="radio" name="acct_type" id="acctBronze" class="rInput" />
        <label for="acctNone">None</label><input type="radio" name="acct_type" id="acctNone" 
            class="rInput" checked="checked" />
    		</fieldset>
    		<span class="note">required</span>
    	</li>
    	<li id="subjectField"><label for="natureOfInquiry">General subject:</label>
       <select name="subject" class="medium" id="natureOfInquiry">
    		<option value="support">Support</option>
    		<option value="billing">Accounts  billing</option>
    		<option value="press">Press</option>
    		<option value="other_q">Other questions</option></select>
    	</li>
    	<li id="availabilityField"><label for="availability">My account is unavailable:</label>
          <input type="checkbox" name="is_down" id="availability" class="rInput" /></li>
    	<li id="messageField"><label for="messageBody">Comments:</label>
         <textarea name="comments" cols="32" rows="8" class="long" id="messageBody"></textarea></li>
    	<li class="submitField"><input type="submit" value="Send" class="submitButton" /></li>
      </ul>
    </form>
    
    </body>
    </html>

    Форма с применением оформления body.

    Добавлены новые стили оформления:

    body { 
      margin: 0;
      padding: 1.714em;
      background-image: url(images/bg_grid.gif);
      font-size: 14px;
      font-family: Helvetica,Arial,sans-serif;
      line-height: 1.714em;
    }

    Демонстрация 1: сопутствующие рассмотрения

  • Когда код XHTML подается с правильным Content-Type агенту пользователя, который правильно его поддерживает, в элементе html изображаются используемые по умолчанию margin и/или padding страницы.
  • В тех случаях, которые отличаются от описанных в предыдущем пункте, полоска пробела шириной 10px помещается по периметру страницы; Opera делает это как значение padding, в то время как другие браузеры массового рынка делают это (несколько странно) как значение margin. Демонстрационная таблица стилей нормализует результат.
  • Хотя многие пуристы доступности будут возражать против значения размера шрифта 14px, оно является неотъемлемой частью для различных свойств боксов и типов, определенных где-нибудь в таблице стилей, выраженных по большей части в седьмых долях em. Для тех, кто хочет понять используемую арифметику, в конце статьи представлена таблица преобразования простых дробей в десятичные.
  • Значение 14px было выбрано, так как оно является наименьшим размером основного текста, который может прочитать практически любой посетитель, использующий коррекцию зрения.
  • Так как одной из задач данной статьи является демонстрация работы, которая происходит на хорошо согласованной сетке, на страницу была добавлена фоновая сетка с шагом 24 пикселя.
  • Демонстрация 2

    Теперь, когда контейнеры страницы определены, следующая пара шагов изменяет или удаляет стили агента пользователя.

    Оформление основного заголовка и удаление нежелательных пробелов.

    Новые стили оформления:

    h3 {
      margin: 0 0 1.2em 0;
      border-bottom: .05em solid rgb(0,96,192);
      font-size: 1.429em;
      line-height: 1.15em;
    }
    
    form {
      width: 35.929em;
      margin: 0;
    }
    
    ul {
      margin: 0;
      padding: 0;
      list-style-type: none;
    }

    Демонстрация 2: сопутствующие рассмотрения

  • Изменение размера шрифта для заголовков происходит по разному на различных платформах; однако значения по умолчанию всегда пропорциональны значению medium, использованному для неоформленного текста параграфа, и поэтому наследуется через каскадирование. Задача заданного здесь значения состоит в том, чтобы изменить используемую по умолчанию пропорцию.
  • Считается оптимальным использовать h1 для первого заголовка на странице; здесь эта практика игнорируется, так как в коммерческой производственной среде заголовок сайта часто имеет размер шрифта на странице h1, а заголовок страницы должен помещаться ниже в иерархии заголовков. Во многих случаях степень выделения формы будет совпадать со степенью выделения другого контента или форм в том же документе.
  • Цель оформления h3 состоит в создании бокса контента высотой 24 пикселя с полосой пробела в 24 пикселя непосредственно ниже, так чтобы:$$(((14 \times 1.429) 1.15) + (20 \times .05)) \approx 24 \\ \\ 14 \times 1.429 \approx 20; 20 \times 1.15 == 23; 20 \times .05 == 1; \\ (20 \times 1.2) = 24$$
  • Необходимо задать значение width для form или для элементов списка, если элементы должны быть правильно выровнены без использования позиционирования. Использованное значение порождает статическое значение 503 пикселя; расхождение в один пиксель (для заданного шага атомарной сетки в 24 пикселя) является продуктом ошибок, создаваемых округлением и сглаживанием.
  • Используемые по умолчанию стили агента пользователя для списков варьируются от одного браузера к другому. Internet Explorer задает для каждого элемента списка левое поле в 40 пикселей и помещает маркер пункта в полученном свободном пространстве, в то время как другие браузеры используют заполнение слева блока контента формы как целого. Как и со свойствами компоновки, изменяемыми в правиле body, это правило создано специально для нормализации представления для различных браузеров.
  • Демонстрация 3

    … Теперь для задания контейнеров для элементов формы.

    Оформление элементов списка (контейнеры пар метка/значение) и fieldset

    Новые стили оформления:

    li {
      clear: both;
      height: 1.714em;
      margin: 0;
    }
    
    fieldset {
      height: 1.429em;
      margin: 0 0 -.143em 0;
      border: 0;
    }

    Демонстрация 3: сопутствующие рассмотрения

  • Если кто-то представляет форму как последовательность <cem>rowsem, то необходимость оформления высоты каждой (строки) для сохранения сетки становится очевидной. Поля элементов списка задаются нулевыми в пользу Internet Explorer и для удобства измерения в других случаях.
  • Так как для многих элементов в форме будут заданы значения float, элементам охватывающего списка присваивается значение clear: both, чтобы гарантировать, что каждый из них будет помещаться ниже своего предшественника как само собой разумеющееся.
  • Кроме удаления рамки (которая является частью используемого по умолчанию стиля агента пользователя), свойства компоновки fieldset кажутся заданными достаточно произвольно. Фактически они были заданы после тестирования в различных браузерах, что еще раз обсуждается кратко в примечаниях к Демонстрации 11.
  • В этом месте не задаются никакие значения display или float, что объясняет, почему контент fieldset конфликтует с поcледующим элементом управления select.
  • Создание сетки

    Одним из самых значительных усилений хорошего графического дизайна (и вместе с этим, хорошего дизайна интерфейса) является то, что объекты размещаются с предсказуемыми интервалами. Эти интервалы обычно называют сеткой.

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

    Истинно эффективная сетка имеет следующие характеристики:

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

    Создание структуры сетки в композиции

    Большинство профессионалов для создания композиций компоновки сайта используют инструмент Adobe Photoshop, и одним из его достоинств является легкость доступа к линиям сетки, которые он предоставляет. Для вывода атомарной сетки в Photoshop можно выбрать View $$\to$$ Show $$\to$$ Grid, что приведет к выводу линий сетки с интервалами, заданными в Guides Grid Preferences. Наложение направляющих для таких объектов, как столбцы, реализуется затем выбором View $$\to$$ Rulers, переключением в инструмент Move, и перетаскиванием указателя с линейки требуемым образом.

    Реализация сетки в таблице стилей

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

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

    Демонстрация 4

    Сохранение объектов выровненными по сетке означает присвоение свойств компоновки меткам и элементам управления формы.

    Выравниваем два основных столбца

    Новые стили оформления:

    label {
      display: block;
      float: left;
      clear: left;
      width: 10.286em;
      overflow: auto;
      padding-right: 1.714em;
      text-align: right;
    }
    
    input {
      height: 1.143em;
      border: .071em solid rgb(96,96,96);
      padding: .071em;
      line-height: 1;
    }

    Демонстрация 4: сопутствующие рассмотрения

  • Все элементы управления формы, включая текстовые области и метки, изображаются по умолчанию как элементы %inline.
  • Чтобы создать согласованный левый столбец, элементам label необходимо присвоить width ; в "строгом" режиме визуализации, заданное padding вдоль стороны делает рабочий пробел между элементами управления и метками достоверной реальностью.
  • Выравнивая метки и элементы управления с общим полем облегчает следование форме. Этот факт и другие моменты композиции обсуждаются как часть обсуждения Правила третей - см. ниже.
  • В данный момент существуют очевидные проблемы с формой:
  • Меткам (label), присоединенным к радио-кнопкам (radio), присваиваются такие же значения display и float, как и другим меткам (label) на форме. В паре с существующими значениями height и overflow, эти элементы конфликтуют в некоторых браузерах со следующей парой метка-элемент управления.
  • В Safari 3 рамки текстовых элементов управления исчезают на этом изображении. Можно предположить, что это ошибка визуализации.
  • Элементы управления radio появляются выровненными относительно друг друга в порядке исходного кода; это происходит, потому что промежуточные элементы управления label находятся теперь в различном контексте компоновки.
  • Другим любопытным моментом, который заслуживает упоминания, является присвоение меткам overflow: auto. Прием, применяемый здесь, можно описать как правило: если один элемент %block находится внутри другого, и при условии, что только для одного из них высота height определена в статических единицах измерения или em, которая увеличивается до известного числа пикселей, то присваивание overflow: auto другому элементу — элементу без значения height — будет приводить к расширению его до height элемента с дискретным значением height. Эта техника используется также в Демонстрации 11.
  • Правило третей

    (рис 34.1) Сцена ранней весны в Портланде, Орегон. На эту фотографию были наложены линии, иллюстрирующие Правило третей; обратите внимание, как нижнее правое пересечение и линии, которые его формируют, ограничивают видимую деятельность. Фото автора ©2000; авторские права защищены

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

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

    (рис 34.2) Снимок с экрана msnbc.msn.com с наложенными первыми семью золотыми прямоугольниками. Размеры четвертого и пятого прямоугольников иллюстрируют природу сетки компоновки страницы в целом

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

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

    Демонстрация 5

    Чтобы гарантировать, что созданная сетка сохраняется как по вертикали, так и по горизонтали, необходимо рассмотреть некоторые особенности. Эти изменения почти целиком носят косметический характер.

    Слегка изменяем представление элементов управления textarea и select

    Новые стили оформления:

    textarea {
      height: 4.714em;
      margin-bottom: .286em;
      border: .071em solid rgb(96,96,96);
      padding: 0;
    }
    
    select {
      display: block;
      float: left;
      height: 1.571em;
      font-family: Futura,'Century Gothic',sans-serif;
    }
    
    option { font-size: 100%; }

    Демонстрация 5: сопутствующие рассмотрения

  • На платформах Windows можно изменить элементы управления select, чтобы удалить некоторую перекошенность, что делает их более похожими на текстовые элементы управления.
  • Так как легкость использования обычно улучшается, когда пользователь имеет возможность различать с первого взгляда свой ввод и остальную форму, то шрифт, использованный для представления значений формы, будет отличаться от шрифта, использованного в остальной части формы. С этой целью данная демонстрация изменяет первые из этих значений.
  • Каскадирование, как правило не соблюдается в отношении представления текста в элементах управления формы, что является еще одной причиной, почему здесь имеется несколько явных значений текста/шрифта. Применение inherit исключается по соображениям предпочтения и привычки, но не по какой-то объективной причине.
  • Демонстрация 6

    Предыдущая демонстрация манипулирует представлением некоторых шрифтов; теперь пора закончить эту работу.

    Нормализуем представление элементов управления text и настроим результат каскадирования на тексте элементов управления select.

    Новые стили оформления:

    input, textarea {
      display: block;
      float: left;
      overflow: hidden;
      font-family: Futura,'Century Gothic',sans-serif;
      font-size: 1em;
    }
    
    input, textarea, select {
      margin-top: 0;
      font-size: 100%;
    }

    Демонстрация 6: сопутствующие рассмотрения

  • В этой демонстрации мы видим первый случай значений, которые были сознательно отложены в сторону для одновременного присвоения нескольким селекторам. Исключение значений border из этих правил является искусственным образованием производственного процесса, который был выполнен в порядке отличном от представления этих демонстраций — момент, который обсуждается подробнее позже.
  • Как упоминалось выше, значения текста и шрифта в элементах управления формы не получают пользы от каскадирования. Эти правила предназначения для этой проблемы. Следовательно, большинство различных элементов управления теперь соответствуют желательной компоновке.
  • В связи с поведением Internet Explorer 6 остальным элементам управления формы значение float задано как left. Это значение было выбрано по привычке, полученной в результате (неприятного) опыта, но не является строго необходимым.
  • При задании значений block текстовым элементам управления проблема визуализации в Safari, видимая в двух предыдущих демонстрациях, внезапно разрешилась. Такие странности встречаются достаточно часто при оформлении форм.
  • Также как не были правильно нормализованы значения border, не были нормализованы и значения font-size; задание значений 1em текстовым элементам управления и значений 100% элементам управления select было полностью произвольно.
  • Демонстрация 7

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

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

    Новые стили оформления:
    
    .medium { width: 11.714em; }
    
    select.medium { width: 12em; }
    
    .long { width: 20.429em; }
    
    .rInput { border: 0; }
  • Повторное рассмотрение разметки исходного кода покажет, что каждому элементу управления был присвоен class - одному из трех, связанных с шириной, элементов управления для текста и элементов управления select, и другие классы для элементов управления, которые зависят от ввода указателя/курсора, а не от ввода клавиатуры.
  • Классы для элементов управления необходимо задавать в основном потому, что Internet Explorer имеет ограниченную поддержку для развитых селекторов. По мере развития селекторов rInput class можно будет также легко заменить на input[type="radio"], input[type="checkbox"]… если текущие производственные версии Internet Explorer вообще будут это поддерживать.
  • Задание трех возможных значений для текстовых элементов управления совершенно произвольно, и остается на усмотрение дизайнера. В коммерческих настройках некоторые дизайнеры создают такие необычные компоновки, что селекторы class, такие как используются здесь, будут функционально бесполезны. Задание id для каждой пары метка/элемент управления предоставляет простейшую возможную ссылку на каждый элемент формы — простота, которая является ценной при оформлении работы дизайнера, который настаивает на своем вмешательстве в каждом элементе компоновки сайта.
  • Демонстрация 8

    Кнопка отправки формы была вялой …

    Точно настраиваем позицию кнопки отправки формы.

    Новые стили оформления:

    .submitButton {
      display: block;
      clear: both;
      width: 7.2em;
      height: 2em;
      margin: 0 0 0 16.8em;
      border: 1px solid rgb(128,128,128);
      padding: 0;
      font-size: 10px;
      text-align: center;
    }

    Демонстрация 8: сопутствующие рассмотрения

  • Самой большой проблемой, которая встречается при оформлении кнопок отправки, состоит в размещении их точно так, как требуется дизайнеру. Обычная практика получения требуемого вида состоит в тщательной подгонке компоновки и свойств line-height; некоторые разработчики могут найти менее трудоемким использование вместо этого замену изображения (см. Библиографию) или input type="image".
  • На первый взгляд задание display: block для этого объекта кажется избыточным — и действительно является избыточным, если думать только в терминах единственной формы на единственной странице. Однако в контексте всего сайта это может оказаться не избыточным; многие сайты и приложения имеют несколько форм в одном документе с различными значениями display.
  • Демонстрация 9

    Разместим "требуемые" теги там, где они должны находиться.

    Выравниваем "требуемые" теги к воображаемому правому полю формы, и изменяем их текстовые свойства.

    Новые стили оформления:

    li.required span.note {
      display: block;
      width: auto;
      float: right;
      color: rgb(128,128,128);
      font-size: .714em;
      line-height: 2.4em;
      font-style: italic;
    }

    Демонстрация 9: сопутствующие рассмотрения

  • В своем текущем состоянии элемент fieldset, содержащий элементы управления radio все еще является блочным элементом, поэтому он распространяется до правого поля формы. В результате тег, присоединенный к этому множеству элементов управления, смещается ниже вычисленного нижнего края fieldset.
  • Значение auto, задаваемое для width "требуемых" тегов, определяет, что они не могут быть шире своего контента.
  • Более внимательное рассмотрение арифметики, использованной для набора текста "требуемых" тегов, покажет, размер шрифта в десять пикселей, и интерлиньяж в 24 пикселя (эквивалентный одной атомарной единице используемой сетки).
  • Структура, использованная для индикации требуемых полей, создана с учетом интерактивного взаимодействия с пользователями; с помощью различных классов, использованных на форме, можно проверять ввод пользователя с помощью JavaScript, и изменять оформление меток, полей, и/или тегов в настройках меток/элементов управления, которые не были правильно обработаны пользователем.
  • Демонстрация 10

    Наконец пришло время уладить конфликты элементов управления radio с полями под ними в порядке исходного кода.

    Выравниваем элементы управления radio и их метки по горизонтали.

    Новые стили оформления:

    fieldset label {
      margin-right: .25em;
      padding-right: 0;
      line-height: 1;
    }
    
    fieldset .rInput { margin-right: .75em; }
    
    fieldset label, fieldset .rInput {
      width: auto;
      display: inline;
      float: none;
      font-size: .857em;
    }
    
    li.required fieldset {
      width: 18.857em;
      float: left;
    }

    Демонстрация 10: сопутствующие рассмотрения

  • Основной результат этих правил, кроме выполнения косметических настроек, состоит в изменении значения display элементов управления radio и checkbox снова на inline. Это делается с целью избежать трудностей, которые возникают, когда они становятся плавающими, как остальные элементы input в форме.
  • Вместо задания display: inline соответствующим элементам управления, они остаются "замененными" элементами: строковыми элементами с известными во время выполнения статическими размерами (т.е., до того как браузер реально начнет визуализацию контента). В связи с этим к этим объектам можно применять поля.
  • Специфическая природа элементов fieldset — в частности, то что они являются только элементами %block, специально предназначенными для использования в формах — требует, чтобы в этом случае применялась дискретная ширина к любым fieldset, содержащим элементы управления, которые требуют активации пользователя. (См. обсуждение выше значений "требуемого" тега компоновки.)
  • Демонстрация 11

    Для последней атаки, чтобы выровнять последние штрихи просто так …

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

    Новые стили оформления:

    #acctTypeField fieldset {
      padding: .286em 0 0 0;
      line-height: normal;
    }
    
    #acctTypeField .rInput { margin-top: .167em; }
    
    #availabilityField label {
      height: 3.143em;
      padding-top: .286em;
      line-height: normal;
    }
    
    #availabilityField .rInput { margin-top: .286em; }
    
    #availabilityField, #messageField {
      height: 1%;
      overflow: auto;
    }

    Демонстрация 11: сопутствующие рассмотрения

  • Здесь также используется overflow, как в Демонстрации 4; #availabilityField имеет label известной высоты (height), а #messageField аналогично textarea.
  • Использование маркера #acctTypeField для изменения значения padding для fieldset, которое он содержит, вполне может быть слишком специфическим. Однако для этого требуется тонкая обработка при записи стилей, которые могут быть так легко подвержены влиянию стилей соседних элементов.
  • Остальные правила в этом блоке таблицы стилей делают небольшие изменения в компоновке, которые все были определены в ходе тестирования. К сожалению часы тестирования и тонкой настройки могут не найти поведение, которое будет производить идентично составленные элементы управления radio, как в Safari 3, так и в Firefox 3. Результатом является базовая линия на метках (label) элементов управления radio, которые не в порядке в Firefox 3. Обычно можно сказать, что оформление элементов checkbox и radio является чем-то вроде тайного знания.
  • Демонстрация 12

    Все предыдущие стили оформления были разработаны для Opera или Safari (выбирайте, оба браузера ведут себя относительно хорошо). Далее следуют правила специально созданные для Internet Explorer, определенные в файле CSS, присоединенном (link) в условном блоке комментария.

    Делаем последнее множество изменений для Internet Explorer

    Новые стили оформления:

    h3 { margin-bottom: 1.2em; }
    li { margin: 0 0 -.214em 0; }
    
    select { height: 1.429em; }
    
    textarea { height: 4.571em; }
    
    fieldset {
      height: 1.583em;
      padding-top: .417em;
    }
    
    .medium { width: 13.429em; }
    
    select.medium { width: 13.714em; }
    
    .long { width: 20.286em; }
    
    fieldset .rInput { border: 0 !important; }
    
    #subjectField { margin-bottom: -.214em; }
    
    #availabilityField .rInput { margin-top: .286em; }
    
    #messageField { padding-bottom: .286em; }
    
    input.submitButton { margin-top: .15em; }
    
    * html input, * html textarea { float: left; }
    
    * html select { font-size: .643em; }
    
    * html select.medium { width: 21.364em; }
    
    * html textarea { height: 4.643em; }
    
    * html #subjectField {
      margin-top: .071em;
      margin-bottom: 0;
    }
    
    * html #availabilityField label { padding-top: 0; }
    
    * html input.submitButton { margin: .1em 0 0 7em; }

    Демонстрация 12: сопутствующие рассмотрения

  • Как можно видеть, все показанные выше стили оформления предполагают небольшие различия в том, как Internet Explorer каскадирует размеры шрифтов и размещение боксов.
  • Другим объектом, заслуживающим внимания, является селектор * html. Internet Explorer 5 и 6 являются единственными браузерами, которые распознают этот селектор, что делает его эффективным низкопроходным фильтром для правил таблиц стилей, предназначенных для этих браузеров.
  • Создание уровней поддержки платформы

    Последний раздел демонстрации показывает разновидность стилей оформления, отложенных для Internet Explorer 6 и 7, и требует обсуждения, насколько широко различные браузеры рассматриваются добросовестной командой разработчиков сайта.

    Реальность Web состоит в том, что пользователи используют множество всевозможных браузеров во всевозможных рабочих средах. Некоторые из них являются старыми, в то время как другие находятся на переднем крае развития. Некоторые выполняются на полнофункциональных компьютерах, в то время как другие выполняются на мобильных устройствах, таких как телефоны. Все они разработаны в определенных операционных системах, а затем перенесены на другие с различной степенью поддержки стандартов. За исключением Opera, все поставщики браузеров, поставляют продукты, которые создаются для использования вместе с другими продуктами в более обширных пакетах -- требование разработки, которое делает эти браузеры более сложными, чем требуется для единственной задачи просмотра Web. Как будто бы было недостаточно рассмотрения множества сильных и слабых сторон браузеров, но существует также вопрос ошибок -- ошибок системы безопасности, ошибок компонентов, и особенно ошибок визуализации. Пользователи Safari 3.x обнаружили, что в определенный момент документ демонстрации выявляет разрушительную ошибку визуализации в их собственном браузере. Лучшим способом разрешения таких вопросов является определение уровней поддержки. Такая практика была впервые провозглашена командой разработки интерфейса в Yahoo!, которые назвали его "Ранжированной поддержкой браузеров".

    Обычно уровни поддержки попадают в четыре широкие категории:

  • Сайт выводится, как первоначально задумывался, в пределах возможностей этих браузеров, и все свойства полностью поддерживаются. Платформа разработки определяет, так называемый иногда уровень "A+".
  • Отклонение от предпочтительной композиции является очевидным, возможно в существенной степени; однако, сайт все еще можно использовать, и большинство, если не все, свойства сайта поддерживаются.
  • Сайт, предлагаемый пользователям этих браузеров, является настолько простым, насколько может поддерживаться без потери бренда владельца сайта, и свойства сайта вполне могут отключаться. Эти браузеры имеют обычно относительно небольшие базы установки, и предполагаются устаревшими, нестабильными, или неполноценными.
  • Называемый в документации Yahoo! как поддержка степени "X Grade", этот уровень поддержки зарезервирован для нетестированных платформ — обычно более новых браузеров с небольшими базами установки (часто Opera, естественно). После тестирования такие браузеры перемещают на более высокий уровень.
  • Особенности процесса сбора требований, который формирует определение уровней поддержки и распределяет по ним браузеры, были бы длительными и скучными, и поэтому были исключены из этой и так длинной статьи.

    Сложные компоновки форм на практике (… вместо теории)

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

  • Чтобы наметить в общих чертах последовательность демонстраций на основе временной шкалы было бы необходимо поддерживать журнал (или хранить таблицу стилей в системе контроля версий) - что никогда не делалось. К тому времени, когда этот недосмотр был замечен, эта статья была и так слишком просрочена, чтобы исправлять это.
  • Представление согласно порядку исходного кода существенно облегчает создание документов демонстрации — еще одна уступка идеала практике.
  • Так как исходная таблица стилей демонстрации была написана со значительной (если не исчерпывающей) заботой о нормализации и порядке исходного кода — как и должно быть для всех производственных таблиц стилей — представление демонстрации в порядке исходного кода гарантирует, что тем студентам, которые хотят "видеть исходный код", будет значительно легче понять смысл того, что реально делается.
  • В качестве агента пользователя во время разработки использовался браузер Opera 9.6 для OS X; с учетом этой оговорки и отмеченных выше других замечаний, ниже представлен общий порядок, в котором изменения и дополнения были сделаны в таблице стилей:

  • Применяются стили документа (т.е., body)
  • Перезадаются значения по умолчанию списков, форм, и fieldset
  • Определяется набор текста
  • Объекты списка ограничиваются и очищаются (clear)
  • Метки (label) размещаются в целом
  • Определяется и нормализуется компоновка элементов управления формы (главным образом размеры)
  • Создается кнопка отправки
  • Задаются крайние случаи
  • Тестируются браузеры Safari и Firefox и изменяются значения таблицы стилей, чтобы отразить компромиссы (где возможно)
  • Тестируются браузеры Internet Explorer 6 и 7 и в условную таблицу стилей добавляются настройки свойство/значение
  • Описанный непосредственно выше процесс начинается с самых широко применяемых правил, и сужается в специфичности до рассмотрения индивидуальных особенностей отдельных браузеров … по большей части в порядке исходного кода самой таблицы стилей. Однако результаты коррелируют не точно. Это происходит, потому что различные процессоры визуализации и особенности таких объектов, как плавающий контекст, приносят почти непредвиденные последствия, когда смешиваются в общеизвестную смесь, поэтому реальный процесс требует больше, чем небольшого изменения, подстройки, и пересмотра.

    Заключение

    Эта статья содержит достаточное основание для оформления и компоновки форм, но можно пойти еще дальше. Трудности, создаваемые операционными системами (компоненты которых заимствуются для создания элементов управления формы Web), и различия между процессорами визуализации, создают дополнительные проблемы при постановке задачи перед оформителем, которому требуется создать форму Web согласно спецификации. Эта глава открывает дверь к экспериментированию с множеством особенностей, связанных с задачей, и разъясняет способ достижения достаточного уровня мастерства в одном из наиболее трудных аспектов разработки приложений Web.

    Контрольные вопросы

  • Какой тип обтекания у элементов управления формы, которые принимают ввод пользователя, и какие две характеристики делают их выделяющимися в отношении компоновки?
  • Какие два атрибута отличные от value и disabled управляют настройками элементов управления формы до взаимодействия пользователя, и к каким элементам они применяются?
  • Документ демонстрации обеспечивает требуемые поля. Напишите, по крайней мере, одно правило таблицы стилей, которое будет разом изменять внешний вид поля, которое содержит образец ошибки или пропуск ввода пользователя.
  • Опишите по одному случаю использования для каждого из элементов управления select, checkbox, и radio. Обоснуйте каждое описание объяснением преимуществ, которое предоставляет сделанный выбор, при сравнении с другими возможными вариантами выбора.
  • Используя сетевую ссылку, выбранную инструктором, найдите и кратко опишите альтернативы для input type="submit".
  • Создайте элемент select, который позволяет выбрать несколько options, добавляя пару атрибут/значение multiple="multiple". После анализа поведения этого элемента, объясните, почему он редко встречается на производственных сайтах.
  • Таблица: преобразование простых дробей в десятичные

    В следующей таблице цифры, находящиеся в скобках со звездочкой после них, бесконечно повторяются; например, 0.2(6*) эквивалентно 0.266666666666666… (6 повторяется бесконечно).

    Ближайшие к нулю значения находятся в таблице слева, и приближаются к единице в таблице при движении слева направо.

    x 1/x 2/x 3/x 4/x 5/x 6/x 7/x 8/x 9/x 10/x 11/x 12/x 13/x 14/x 15/x
    2 .5 - - - - - - - - - - - - - -
    3 .(3*) .(6*) - - - - - - - - - - - - -
    4 .25 .5 .75 - - - - - - - - - - - -
    5 .4 .6 .8 - - - - - - - - - - -
    6 .1.(6*) ..3*) .5 .(6*) .8(3*) - - - - - - - - - -
    7 .(142857*) .(285714*) .(428571*) .(571428*) .(714285*) .(857142*) - - - - - - - - -
    8 .125 .25 .375 .5 .625 .75 .875 - - - - - - - -
    9 .(1*) .(2*) .(3*) .(4*) .(5*) .(6*) .(7*) .(8*) - - - - - - -
    10 .1 .2 .3 .4 .5 .6 .7 .8 .9 - - - - - -
    11 .(09*) .(18*) .(27*) .(36*) .(45*) .(54*) .(63*) .(72*) .(81*) .(90*) - - - - -
    12 .08(3*) .1(6*) .25 .(3*) .41(6*) .5 .58(3*) .(6*) .75 .8(3*) .91(6*) - - - -
    13 .(076923*) .(153846*) .(230769*) .(307692*) .(384615*) .(461538*) .(538461*) .(615383*) .(692307*) .(769230*) .(846153*) .(923076*) - - -
    14 .0(714285*) .(142857*) .2(142857*) .(285714*) .3(571428*) .(428571*) .5 .5(714285*) .6(428571*) .(714285*) .7(857142*) .(857142*) .9(285714*) - -
    15 .0(6*) .1(3*) .2 .2(6*) .(3*) .4 .4(6*) .5(3*) .6 .(6*) .7(3*) .8 .8(6*) .9(3*) -
    16 .0625 .125 .1875 .25 .3125 .375 .4375 .5 .625 .625 .6875 .75 .8125 .857 .9375

    Библиография

  • Бос, Берт, и др. 2007. Спецификация каскадных таблиц стилей уровня 2 ревизии 1 (CSS 2.1). Консорциум WWW. http://www.w3.org/TR/2007/CR-CSS21-20070719 и т.д. (доступно 28 мая 2008 г.).
  • Хеник, Бен. 2006. 12 уроков для тех, кто боится CSS и стандартов. A List Apart. http://www.alistapart.com/articles/12lessonsCSSandstandards (доступно 16 декабря 2008 г.).
  • Хоротон, Сара, и Линч, Патрик. 2002. Руководство по стилевому оформлению Web (http://www.webstyleguide.com/): базовые принципы создания Web-сайтов, 2-е изд., New Haven, Conn.: Yale University Press.
  • Knott, Ron. 2008. The golden section ratio: phi. Department of Mathematics, University of Surrey (UK). http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/phi.html (доступно 18 декабря 1008 г.).
  • Meyer, Eric. 2007. Formal weirdness. Meyerweb.com. http://meyerweb.com/eric/thoughts/2007/05/15/formal-weirdness/ (доступно 17 декабря 2008 г.).
  • Microsoft Corporation. msnbc.com. http://msnbc.msn.com/ (доступно 17 декабря 2008 г.).
  • Рагетт, Дейв, и др., 1999. Спецификация HTML 4.01. Консорциум WWW. http://www.w3.org/TR/1999/REC-html401-19991224 etc. (доступно 30 июня 2008 г.).
  • Рейнольд, Гарр. 2005. От золотого среднего к "правилу третей". Presentation Zen. http://www.presentationzen.com/presentationzen/2005/08/from_golden_mea.html (доступно 16 декабря 2008 г.).
  • Santa Maria, Jason. 2008. Making modular layout systems. 24 Ways. http://24ways.org/2008/making-modular-layout-systems (доступно 16 декабря 2008 г.).
  • Wikipedia. 2008. Fahrner image replacement. http://en.wikipedia.org/wiki/Fahrner_Image_Replacement (доступно 19 декабря 2008 г.).
  • Yahoo! Developer Network. 2008. Ранжированная поддержка браузеров. http://developer.yahoo.com/yui/articles/gbs/ (доступно 16 декабря 2008 г.).
  • Предыдущая статья — Оформление таблиц

    Следующая статья — Плавающие элементы и очистка

    Об авторе

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

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

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

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