Статья имеет следующее содержание:
В статье содержится новая информация о реализации формы и компоновке интерфейса.
Можно сказать, что использование большого количества маркеров class и id нарушает принцип (принцип сохранения максимальной простоты). Однако сложные компоновки часто создают конфликты в каскадировании - конфликты, которые проще всего разрешаются добавлением к элементам маркеров, и написанием правил таблиц стилей, которые содержат несколько селекторов.
Наиболее сложные компоновки насыщены граничными случаями, которые часто лучше всего обрабатываются с помощью элементов 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 (которое находится за рамками этой статьи) для соответствующего размещения этих объектов. В связи с этим "требуемые" теги были помещены после их соответствующих элементов управления в порядке исходного кода (хотя и в том же контексте).
Текстовые поля и элементы управления отправкой были введены в предыдущей статье. Как было отмечено выше, существует ряд случаев применения, которые требуют, чтобы пользователь мог выбрать из двух или нескольких вариантов. Эти элементы описываются кратко ниже.
… <label for="availability">My account is unavailable:</label><input type="checkbox" name="is_down" id="availability" class="rInput" />
Вопросы регистрации и отказа обычно обрабатываются такими элементами управления. Другой случай их применения, когда требуется произвольно выбрать из нескольких вариантов, например, список личных интересов.
…
<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, который, если задан, активирует элемент управления по умолчанию, когда он выводится первый раз.
Вопрос использования радио-кнопок или флажков должен решаться после рассмотрения ряда различных факторов. Если вы хотите, чтобы пользователь подтвердил субъективный выбор (такой как регистрация в списке почтовой рассылки), то флажки будут, вероятно, лучшим вариантом. Если вы хотите вместо этого, чтобы пользователь выбрал между двумя объективными вариантами (например, скажем, пол), то тогда лучше использовать радио-кнопки.
…
<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, диапазон возраста, диапазон дохода) должны представляться в виде радио-кнопок.
Тщательное
Основное назначение элемента fieldset состоит в задании единого контекста последовательности тесно связанных элементов управления (элементы управления text для номера телефона, элементы select для даты, и т.д.).
Теперь, когда новый материал этой статьи очерчен в общих чертах, пришло время рассмотреть этот материал в действии - двенадцать следующих демонстраций показывают различные концепции дизайна и проблемы оформления, которые встречаются при разработке формы Web.
Читателям настоятельно рекомендуется самостоятельно использовать демонстрационный материал для экспериментов с правилами таблиц стилей.
Эти демонстрации представлены в порядке исходного кода, а не в том порядке, в котором были написаны таблицы стилей. Причины и последствия этого отклонения обсуждаются в дальнейшем в статье.
Начиная с правила, которое содержит 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;
}
Теперь, когда контейнеры страницы определены, следующая пара шагов изменяет или удаляет стили агента пользователя.
Оформление основного заголовка и удаление нежелательных пробелов.
Новые стили оформления:
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;
}
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$$
body, это правило создано специально для нормализации представления для различных браузеров.… Теперь для задания контейнеров для элементов формы.
Оформление элементов списка (контейнеры пар метка/значение) и fieldset
Новые стили оформления:
li {
clear: both;
height: 1.714em;
margin: 0;
}
fieldset {
height: 1.429em;
margin: 0 0 -.143em 0;
border: 0;
}
<cem>rowsem, то необходимость оформления высоты каждой (строки) для сохранения сетки становится очевидной. Поля элементов списка задаются нулевыми в пользу Internet Explorer и для удобства измерения в других случаях.float, элементам охватывающего списка присваивается значение clear: both, чтобы гарантировать, что каждый из них будет помещаться ниже своего предшественника как само собой разумеющееся.fieldset кажутся заданными достаточно произвольно. Фактически они были заданы после тестирования в различных браузерах, что еще раз обсуждается кратко в примечаниях к Демонстрации 11.select.Одним из самых значительных усилений хорошего графического дизайна (и вместе с этим, хорошего дизайна интерфейса) является то, что объекты размещаются с предсказуемыми интервалами. Эти интервалы обычно называют сеткой.
Как отмечалось выше, атомарная единица измерения демонстрационной формы имеет форму квадрата в 24 пикселя, но для получения однородной компоновки требуется нечто больше, чем размещение элементов дизайна с небольшими, предсказуемыми интервалами.
Истинно эффективная сетка имеет следующие характеристики:
Компоновки, которые демонстрируют такие характеристики, являются более привлекательными и легче для отслеживания, что обеспечивает большее удобство использования сайта.
Большинство профессионалов для создания композиций компоновки сайта используют инструмент Adobe Photoshop, и одним из его достоинств является легкость доступа к линиям сетки, которые он предоставляет. Для вывода атомарной сетки в Photoshop можно выбрать View $$\to$$ Show $$\to$$ Grid, что приведет к выводу линий сетки с интервалами, заданными в Guides Grid Preferences. Наложение направляющих для таких объектов, как столбцы, реализуется затем выбором View $$\to$$ Rulers, переключением в инструмент Move, и перетаскиванием указателя с линейки требуемым образом.
Как отмечается в статье 29 об оформлении текста - что подкрепляется несколькими правилами, включенными в демонстрационную таблицу стилей - лучшим способом реализации атомарной сетки в компоновке является использование единиц измерения em. Однако только этого будет недостаточно; оформитель должен также сохранять правильными свои преобразования простых дробей в десятичные при работе с альтернативными размерами шрифтов, пробелами и рамками.
Другая техника реализации сеток показана в демонстрационной таблице стилей: создание маркеров class, которые могут ссылаться на различные размеры элементов и столбцов в документе. При систематическом применении эти маркеры выполняют большую часть работы по реализации сетки.
Сохранение объектов выровненными по сетке означает присвоение свойств компоновки меткам и элементам управления формы.
Выравниваем два основных столбца
Новые стили оформления:
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;
}
%inline.label необходимо присвоить width ; в "строгом" режиме визуализации, заданное padding вдоль стороны делает рабочий пробел между элементами управления и метками достоверной реальностью.display и float, как и другим меткам (label) на форме. В паре с существующими значениями height и overflow, эти элементы конфликтуют в некоторых браузерах со следующей парой метка-элемент управления.radio появляются выровненными относительно друг друга в порядке исходного кода; это происходит, потому что промежуточные элементы управления label находятся теперь в различном контексте компоновки.overflow: auto. Прием, применяемый здесь, можно описать как правило: если один элемент %block находится внутри другого, и при условии, что только для одного из них высота height определена в статических единицах измерения или em, которая увеличивается до известного числа пикселей, то присваивание overflow: auto другому элементу — элементу без значения height — будет приводить к расширению его до height элемента с дискретным значением height. Эта техника используется также в Демонстрации 11.
(рис 34.1) Сцена ранней весны в Портланде, Орегон. На эту фотографию были наложены линии, иллюстрирующие Правило третей; обратите внимание, как нижнее правое пересечение и линии, которые его формируют, ограничивают видимую деятельность. Фото автора ©2000; авторские права защищены
При рассмотрении, что формирует хорошую композицию, существует почти универсальный прием: если разделить компоновку или иллюстрацию на трети, то можно обнаружить, что зрители стремятся сосредоточить свое внимание на линиях (и особенно на пересечениях этих линий), которые составляют эти разделы. Если эта особенность восприятия не используется, то может возникать ощущение несбалансированной компоновки.
Простейшее объяснение этого феномена состоит в том, что эти четыре линии близко соответствуют сетке, которая следует Золотому сечению, пропорции, которая равна приблизительно по значению одной шестой. Золотое сечение часто встречается в различных областях математики и в природе.
(рис 34.2) Снимок с экрана msnbc.msn.com с наложенными первыми семью золотыми прямоугольниками. Размеры четвертого и пятого прямоугольников иллюстрируют природу сетки компоновки страницы в целом
Форма демонстрации была размещена таким образом, чтобы элементы управления формы были бы выровнены по левому полю, размещенному на одной трети расстояния воображаемого правого края формы как целого; такой выбор был сделан продумано. Значительно менее продумана вертикальная композиция формы - когда в расчет принимается заголовок, текстовые поля разбиваются на две строки, описанные в предыдущем параграфе. Даже если заголовок не учитывается, требуемые поля отсекаются в самые верхние из этих строк.
Важный момент для оформителя состоит в том, что если Правило третей и сетку принять в расчет до начала работы над таблицей стилей, то задача нормализации таблицы стилей может существенно упрощаться.
Чтобы гарантировать, что созданная сетка сохраняется как по вертикали, так и по горизонтали, необходимо рассмотреть некоторые особенности. Эти изменения почти целиком носят косметический характер.
Слегка изменяем представление элементов управления 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%; }
select, чтобы удалить некоторую перекошенность, что делает их более похожими на текстовые элементы управления.Предыдущая демонстрация манипулирует представлением некоторых шрифтов; теперь пора закончить эту работу.
Нормализуем представление 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%;
}
border из этих правил является искусственным образованием производственного процесса, который был выполнен в порядке отличном от представления этих демонстраций — момент, который обсуждается подробнее позже.float задано как left. Это значение было выбрано по привычке, полученной в результате (неприятного) опыта, но не является строго необходимым.block текстовым элементам управления проблема визуализации в Safari, видимая в двух предыдущих демонстрациях, внезапно разрешилась. Такие странности встречаются достаточно часто при оформлении форм.border, не были нормализованы и значения font-size; задание значений 1em текстовым элементам управления и значений 100% элементам управления select было полностью произвольно.Необходимо изменить используемую по умолчанию ширину различных текстовых элементов управления.
Изменяем ширину текстовых элементов управления, чтобы сделать их более удобными для использования, или, по крайней мере, более согласованными.
Новые стили оформления:
.medium { width: 11.714em; }
select.medium { width: 12em; }
.long { width: 20.429em; }
.rInput { border: 0; }
class - одному из трех, связанных с шириной, элементов управления для текста и элементов управления select, и другие классы для элементов управления, которые зависят от ввода указателя/курсора, а не от ввода клавиатуры.rInput class можно будет также легко заменить на input[type="radio"], input[type="checkbox"]… если текущие производственные версии Internet Explorer вообще будут это поддерживать.class, такие как используются здесь, будут функционально бесполезны. Задание id для каждой пары метка/элемент управления предоставляет простейшую возможную ссылку на каждый элемент формы — простота, которая является ценной при оформлении работы дизайнера, который настаивает на своем вмешательстве в каждом элементе компоновки сайта.Кнопка отправки формы была вялой …
Точно настраиваем позицию кнопки отправки формы.
Новые стили оформления:
.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;
}
line-height; некоторые разработчики могут найти менее трудоемким использование вместо этого замену изображения (см. Библиографию) или input type="image".display: block для этого объекта кажется избыточным — и действительно является избыточным, если думать только в терминах единственной формы на единственной странице. Однако в контексте всего сайта это может оказаться не избыточным; многие сайты и приложения имеют несколько форм в одном документе с различными значениями display.Разместим "требуемые" теги там, где они должны находиться.
Выравниваем "требуемые" теги к воображаемому правому полю формы, и изменяем их текстовые свойства.
Новые стили оформления:
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;
}
fieldset, содержащий элементы управления radio все еще является блочным элементом, поэтому он распространяется до правого поля формы. В результате тег, присоединенный к этому множеству элементов управления, смещается ниже вычисленного нижнего края fieldset.auto, задаваемое для width "требуемых" тегов, определяет, что они не могут быть шире своего контента.Наконец пришло время уладить конфликты элементов управления 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;
}
display элементов управления radio и checkbox снова на inline. Это делается с целью избежать трудностей, которые возникают, когда они становятся плавающими, как остальные элементы input в форме.display: inline соответствующим элементам управления, они остаются "замененными" элементами: строковыми элементами с известными во время выполнения статическими размерами (т.е., до того как браузер реально начнет визуализацию контента). В связи с этим к этим объектам можно применять поля.fieldset — в частности, то что они являются только элементами %block, специально предназначенными для использования в формах — требует, чтобы в этом случае применялась дискретная ширина к любым fieldset, содержащим элементы управления, которые требуют активации пользователя. (См. обсуждение выше значений "требуемого" тега компоновки.)Для последней атаки, чтобы выровнять последние штрихи просто так …
Делаем корректировку окончательной компоновки для различных элементов управления.
Новые стили оформления:
#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;
}
overflow, как в Демонстрации 4; #availabilityField имеет label известной высоты (height), а #messageField аналогично textarea.#acctTypeField для изменения значения padding для fieldset, которое он содержит, вполне может быть слишком специфическим. Однако для этого требуется тонкая обработка при записи стилей, которые могут быть так легко подвержены влиянию стилей соседних элементов.radio, как в Safari 3, так и в Firefox 3. Результатом является базовая линия на метках (label) элементов управления radio, которые не в порядке в Firefox 3. Обычно можно сказать, что оформление элементов checkbox и radio является чем-то вроде тайного знания.Все предыдущие стили оформления были разработаны для 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; }
Последний раздел демонстрации показывает разновидность стилей оформления, отложенных для Internet Explorer 6 и 7, и требует обсуждения, насколько широко различные браузеры рассматриваются добросовестной командой разработчиков сайта.
Реальность Web состоит в том, что пользователи используют множество всевозможных браузеров во всевозможных рабочих средах. Некоторые из них являются старыми, в то время как другие находятся на переднем крае развития. Некоторые выполняются на полнофункциональных компьютерах, в то время как другие выполняются на мобильных устройствах, таких как телефоны. Все они разработаны в определенных операционных системах, а затем перенесены на другие с различной степенью поддержки стандартов. За исключением Opera, все поставщики браузеров, поставляют продукты, которые создаются для использования вместе с другими продуктами в более обширных пакетах -- требование разработки, которое делает эти браузеры более сложными, чем требуется для единственной задачи просмотра Web. Как будто бы было недостаточно рассмотрения множества сильных и слабых сторон браузеров, но существует также вопрос ошибок -- ошибок системы безопасности, ошибок компонентов, и особенно ошибок визуализации. Пользователи Safari 3.x обнаружили, что в определенный момент документ демонстрации выявляет разрушительную ошибку визуализации в их собственном браузере. Лучшим способом разрешения таких вопросов является определение уровней поддержки. Такая практика была впервые провозглашена командой разработки интерфейса в Yahoo!, которые назвали его "Ранжированной поддержкой браузеров".
Обычно уровни поддержки попадают в четыре широкие категории:
Особенности процесса сбора требований, который формирует определение уровней поддержки и распределяет по ним браузеры, были бы длительными и скучными, и поэтому были исключены из этой и так длинной статьи.
Среди базовых замечаний, приведенных выше, утверждалось, что демонстрация была представлена в порядке исходного кода таблицы стилей, а не в том порядке, в котором правила были фактически добавлены в таблицу стилей. Причины этого следующие:
В качестве агента пользователя во время разработки использовался браузер Opera 9.6 для OS X; с учетом этой оговорки и отмеченных выше других замечаний, ниже представлен общий порядок, в котором изменения и дополнения были сделаны в таблице стилей:
Описанный непосредственно выше процесс начинается с самых широко применяемых правил, и сужается в специфичности до рассмотрения индивидуальных особенностей отдельных браузеров … по большей части в порядке исходного кода самой таблицы стилей. Однако результаты коррелируют не точно. Это происходит, потому что различные процессоры визуализации и особенности таких объектов, как плавающий контекст, приносят почти непредвиденные последствия, когда смешиваются в общеизвестную смесь, поэтому реальный процесс требует больше, чем небольшого изменения, подстройки, и пересмотра.
Эта статья содержит достаточное основание для оформления и компоновки форм, но можно пойти еще дальше. Трудности, создаваемые операционными системами (компоненты которых заимствуются для создания элементов управления формы 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 |
Предыдущая статья — Оформление таблиц
Следующая статья — Плавающие элементы и очистка
Бен Хеник создает Web-сайты различного вида начиная с сентября 1995 г., когда он взялся за свой первый Web-проект как академический доброволец. С тех пор большая часть его работы была сделана в качестве фрилансера.
Бен является
Он живет в Лоуренсе, Канзас с тремя компьютерами и без телевизора. Вы может прочитать больше о нем и его работе на сайте henick.net ( http://www.henick.net/).
Статья имеет следующее содержание:
В статье содержится новая информация о реализации формы и компоновке интерфейса.
Можно сказать, что использование большого количества маркеров class и id нарушает принцип (принцип сохранения максимальной простоты). Однако сложные компоновки часто создают конфликты в каскадировании - конфликты, которые проще всего разрешаются добавлением к элементам маркеров, и написанием правил таблиц стилей, которые содержат несколько селекторов.
Наиболее сложные компоновки насыщены граничными случаями, которые часто лучше всего обрабатываются с помощью элементов 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 (которое находится за рамками этой статьи) для соответствующего размещения этих объектов. В связи с этим "требуемые" теги были помещены после их соответствующих элементов управления в порядке исходного кода (хотя и в том же контексте).
Текстовые поля и элементы управления отправкой были введены в предыдущей статье. Как было отмечено выше, существует ряд случаев применения, которые требуют, чтобы пользователь мог выбрать из двух или нескольких вариантов. Эти элементы описываются кратко ниже.
… <label for="availability">My account is unavailable:</label><input type="checkbox" name="is_down" id="availability" class="rInput" />
Вопросы регистрации и отказа обычно обрабатываются такими элементами управления. Другой случай их применения, когда требуется произвольно выбрать из нескольких вариантов, например, список личных интересов.
…
<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, который, если задан, активирует элемент управления по умолчанию, когда он выводится первый раз.
Вопрос использования радио-кнопок или флажков должен решаться после рассмотрения ряда различных факторов. Если вы хотите, чтобы пользователь подтвердил субъективный выбор (такой как регистрация в списке почтовой рассылки), то флажки будут, вероятно, лучшим вариантом. Если вы хотите вместо этого, чтобы пользователь выбрал между двумя объективными вариантами (например, скажем, пол), то тогда лучше использовать радио-кнопки.
…
<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, диапазон возраста, диапазон дохода) должны представляться в виде радио-кнопок.
Тщательное
Основное назначение элемента fieldset состоит в задании единого контекста последовательности тесно связанных элементов управления (элементы управления text для номера телефона, элементы select для даты, и т.д.).
Теперь, когда новый материал этой статьи очерчен в общих чертах, пришло время рассмотреть этот материал в действии - двенадцать следующих демонстраций показывают различные концепции дизайна и проблемы оформления, которые встречаются при разработке формы Web.
Читателям настоятельно рекомендуется самостоятельно использовать демонстрационный материал для экспериментов с правилами таблиц стилей.
Эти демонстрации представлены в порядке исходного кода, а не в том порядке, в котором были написаны таблицы стилей. Причины и последствия этого отклонения обсуждаются в дальнейшем в статье.
Начиная с правила, которое содержит 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;
}
Теперь, когда контейнеры страницы определены, следующая пара шагов изменяет или удаляет стили агента пользователя.
Оформление основного заголовка и удаление нежелательных пробелов.
Новые стили оформления:
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;
}
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$$
body, это правило создано специально для нормализации представления для различных браузеров.… Теперь для задания контейнеров для элементов формы.
Оформление элементов списка (контейнеры пар метка/значение) и fieldset
Новые стили оформления:
li {
clear: both;
height: 1.714em;
margin: 0;
}
fieldset {
height: 1.429em;
margin: 0 0 -.143em 0;
border: 0;
}
<cem>rowsem, то необходимость оформления высоты каждой (строки) для сохранения сетки становится очевидной. Поля элементов списка задаются нулевыми в пользу Internet Explorer и для удобства измерения в других случаях.float, элементам охватывающего списка присваивается значение clear: both, чтобы гарантировать, что каждый из них будет помещаться ниже своего предшественника как само собой разумеющееся.fieldset кажутся заданными достаточно произвольно. Фактически они были заданы после тестирования в различных браузерах, что еще раз обсуждается кратко в примечаниях к Демонстрации 11.select.Одним из самых значительных усилений хорошего графического дизайна (и вместе с этим, хорошего дизайна интерфейса) является то, что объекты размещаются с предсказуемыми интервалами. Эти интервалы обычно называют сеткой.
Как отмечалось выше, атомарная единица измерения демонстрационной формы имеет форму квадрата в 24 пикселя, но для получения однородной компоновки требуется нечто больше, чем размещение элементов дизайна с небольшими, предсказуемыми интервалами.
Истинно эффективная сетка имеет следующие характеристики:
Компоновки, которые демонстрируют такие характеристики, являются более привлекательными и легче для отслеживания, что обеспечивает большее удобство использования сайта.
Большинство профессионалов для создания композиций компоновки сайта используют инструмент Adobe Photoshop, и одним из его достоинств является легкость доступа к линиям сетки, которые он предоставляет. Для вывода атомарной сетки в Photoshop можно выбрать View $$\to$$ Show $$\to$$ Grid, что приведет к выводу линий сетки с интервалами, заданными в Guides Grid Preferences. Наложение направляющих для таких объектов, как столбцы, реализуется затем выбором View $$\to$$ Rulers, переключением в инструмент Move, и перетаскиванием указателя с линейки требуемым образом.
Как отмечается в статье 29 об оформлении текста - что подкрепляется несколькими правилами, включенными в демонстрационную таблицу стилей - лучшим способом реализации атомарной сетки в компоновке является использование единиц измерения em. Однако только этого будет недостаточно; оформитель должен также сохранять правильными свои преобразования простых дробей в десятичные при работе с альтернативными размерами шрифтов, пробелами и рамками.
Другая техника реализации сеток показана в демонстрационной таблице стилей: создание маркеров class, которые могут ссылаться на различные размеры элементов и столбцов в документе. При систематическом применении эти маркеры выполняют большую часть работы по реализации сетки.
Сохранение объектов выровненными по сетке означает присвоение свойств компоновки меткам и элементам управления формы.
Выравниваем два основных столбца
Новые стили оформления:
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;
}
%inline.label необходимо присвоить width ; в "строгом" режиме визуализации, заданное padding вдоль стороны делает рабочий пробел между элементами управления и метками достоверной реальностью.display и float, как и другим меткам (label) на форме. В паре с существующими значениями height и overflow, эти элементы конфликтуют в некоторых браузерах со следующей парой метка-элемент управления.radio появляются выровненными относительно друг друга в порядке исходного кода; это происходит, потому что промежуточные элементы управления label находятся теперь в различном контексте компоновки.overflow: auto. Прием, применяемый здесь, можно описать как правило: если один элемент %block находится внутри другого, и при условии, что только для одного из них высота height определена в статических единицах измерения или em, которая увеличивается до известного числа пикселей, то присваивание overflow: auto другому элементу — элементу без значения height — будет приводить к расширению его до height элемента с дискретным значением height. Эта техника используется также в Демонстрации 11.
(рис 34.1) Сцена ранней весны в Портланде, Орегон. На эту фотографию были наложены линии, иллюстрирующие Правило третей; обратите внимание, как нижнее правое пересечение и линии, которые его формируют, ограничивают видимую деятельность. Фото автора ©2000; авторские права защищены
При рассмотрении, что формирует хорошую композицию, существует почти универсальный прием: если разделить компоновку или иллюстрацию на трети, то можно обнаружить, что зрители стремятся сосредоточить свое внимание на линиях (и особенно на пересечениях этих линий), которые составляют эти разделы. Если эта особенность восприятия не используется, то может возникать ощущение несбалансированной компоновки.
Простейшее объяснение этого феномена состоит в том, что эти четыре линии близко соответствуют сетке, которая следует Золотому сечению, пропорции, которая равна приблизительно по значению одной шестой. Золотое сечение часто встречается в различных областях математики и в природе.
(рис 34.2) Снимок с экрана msnbc.msn.com с наложенными первыми семью золотыми прямоугольниками. Размеры четвертого и пятого прямоугольников иллюстрируют природу сетки компоновки страницы в целом
Форма демонстрации была размещена таким образом, чтобы элементы управления формы были бы выровнены по левому полю, размещенному на одной трети расстояния воображаемого правого края формы как целого; такой выбор был сделан продумано. Значительно менее продумана вертикальная композиция формы - когда в расчет принимается заголовок, текстовые поля разбиваются на две строки, описанные в предыдущем параграфе. Даже если заголовок не учитывается, требуемые поля отсекаются в самые верхние из этих строк.
Важный момент для оформителя состоит в том, что если Правило третей и сетку принять в расчет до начала работы над таблицей стилей, то задача нормализации таблицы стилей может существенно упрощаться.
Чтобы гарантировать, что созданная сетка сохраняется как по вертикали, так и по горизонтали, необходимо рассмотреть некоторые особенности. Эти изменения почти целиком носят косметический характер.
Слегка изменяем представление элементов управления 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%; }
select, чтобы удалить некоторую перекошенность, что делает их более похожими на текстовые элементы управления.Предыдущая демонстрация манипулирует представлением некоторых шрифтов; теперь пора закончить эту работу.
Нормализуем представление 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%;
}
border из этих правил является искусственным образованием производственного процесса, который был выполнен в порядке отличном от представления этих демонстраций — момент, который обсуждается подробнее позже.float задано как left. Это значение было выбрано по привычке, полученной в результате (неприятного) опыта, но не является строго необходимым.block текстовым элементам управления проблема визуализации в Safari, видимая в двух предыдущих демонстрациях, внезапно разрешилась. Такие странности встречаются достаточно часто при оформлении форм.border, не были нормализованы и значения font-size; задание значений 1em текстовым элементам управления и значений 100% элементам управления select было полностью произвольно.Необходимо изменить используемую по умолчанию ширину различных текстовых элементов управления.
Изменяем ширину текстовых элементов управления, чтобы сделать их более удобными для использования, или, по крайней мере, более согласованными.
Новые стили оформления:
.medium { width: 11.714em; }
select.medium { width: 12em; }
.long { width: 20.429em; }
.rInput { border: 0; }
class - одному из трех, связанных с шириной, элементов управления для текста и элементов управления select, и другие классы для элементов управления, которые зависят от ввода указателя/курсора, а не от ввода клавиатуры.rInput class можно будет также легко заменить на input[type="radio"], input[type="checkbox"]… если текущие производственные версии Internet Explorer вообще будут это поддерживать.class, такие как используются здесь, будут функционально бесполезны. Задание id для каждой пары метка/элемент управления предоставляет простейшую возможную ссылку на каждый элемент формы — простота, которая является ценной при оформлении работы дизайнера, который настаивает на своем вмешательстве в каждом элементе компоновки сайта.Кнопка отправки формы была вялой …
Точно настраиваем позицию кнопки отправки формы.
Новые стили оформления:
.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;
}
line-height; некоторые разработчики могут найти менее трудоемким использование вместо этого замену изображения (см. Библиографию) или input type="image".display: block для этого объекта кажется избыточным — и действительно является избыточным, если думать только в терминах единственной формы на единственной странице. Однако в контексте всего сайта это может оказаться не избыточным; многие сайты и приложения имеют несколько форм в одном документе с различными значениями display.Разместим "требуемые" теги там, где они должны находиться.
Выравниваем "требуемые" теги к воображаемому правому полю формы, и изменяем их текстовые свойства.
Новые стили оформления:
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;
}
fieldset, содержащий элементы управления radio все еще является блочным элементом, поэтому он распространяется до правого поля формы. В результате тег, присоединенный к этому множеству элементов управления, смещается ниже вычисленного нижнего края fieldset.auto, задаваемое для width "требуемых" тегов, определяет, что они не могут быть шире своего контента.Наконец пришло время уладить конфликты элементов управления 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;
}
display элементов управления radio и checkbox снова на inline. Это делается с целью избежать трудностей, которые возникают, когда они становятся плавающими, как остальные элементы input в форме.display: inline соответствующим элементам управления, они остаются "замененными" элементами: строковыми элементами с известными во время выполнения статическими размерами (т.е., до того как браузер реально начнет визуализацию контента). В связи с этим к этим объектам можно применять поля.fieldset — в частности, то что они являются только элементами %block, специально предназначенными для использования в формах — требует, чтобы в этом случае применялась дискретная ширина к любым fieldset, содержащим элементы управления, которые требуют активации пользователя. (См. обсуждение выше значений "требуемого" тега компоновки.)Для последней атаки, чтобы выровнять последние штрихи просто так …
Делаем корректировку окончательной компоновки для различных элементов управления.
Новые стили оформления:
#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;
}
overflow, как в Демонстрации 4; #availabilityField имеет label известной высоты (height), а #messageField аналогично textarea.#acctTypeField для изменения значения padding для fieldset, которое он содержит, вполне может быть слишком специфическим. Однако для этого требуется тонкая обработка при записи стилей, которые могут быть так легко подвержены влиянию стилей соседних элементов.radio, как в Safari 3, так и в Firefox 3. Результатом является базовая линия на метках (label) элементов управления radio, которые не в порядке в Firefox 3. Обычно можно сказать, что оформление элементов checkbox и radio является чем-то вроде тайного знания.Все предыдущие стили оформления были разработаны для 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; }
Последний раздел демонстрации показывает разновидность стилей оформления, отложенных для Internet Explorer 6 и 7, и требует обсуждения, насколько широко различные браузеры рассматриваются добросовестной командой разработчиков сайта.
Реальность Web состоит в том, что пользователи используют множество всевозможных браузеров во всевозможных рабочих средах. Некоторые из них являются старыми, в то время как другие находятся на переднем крае развития. Некоторые выполняются на полнофункциональных компьютерах, в то время как другие выполняются на мобильных устройствах, таких как телефоны. Все они разработаны в определенных операционных системах, а затем перенесены на другие с различной степенью поддержки стандартов. За исключением Opera, все поставщики браузеров, поставляют продукты, которые создаются для использования вместе с другими продуктами в более обширных пакетах -- требование разработки, которое делает эти браузеры более сложными, чем требуется для единственной задачи просмотра Web. Как будто бы было недостаточно рассмотрения множества сильных и слабых сторон браузеров, но существует также вопрос ошибок -- ошибок системы безопасности, ошибок компонентов, и особенно ошибок визуализации. Пользователи Safari 3.x обнаружили, что в определенный момент документ демонстрации выявляет разрушительную ошибку визуализации в их собственном браузере. Лучшим способом разрешения таких вопросов является определение уровней поддержки. Такая практика была впервые провозглашена командой разработки интерфейса в Yahoo!, которые назвали его "Ранжированной поддержкой браузеров".
Обычно уровни поддержки попадают в четыре широкие категории:
Особенности процесса сбора требований, который формирует определение уровней поддержки и распределяет по ним браузеры, были бы длительными и скучными, и поэтому были исключены из этой и так длинной статьи.
Среди базовых замечаний, приведенных выше, утверждалось, что демонстрация была представлена в порядке исходного кода таблицы стилей, а не в том порядке, в котором правила были фактически добавлены в таблицу стилей. Причины этого следующие:
В качестве агента пользователя во время разработки использовался браузер Opera 9.6 для OS X; с учетом этой оговорки и отмеченных выше других замечаний, ниже представлен общий порядок, в котором изменения и дополнения были сделаны в таблице стилей:
Описанный непосредственно выше процесс начинается с самых широко применяемых правил, и сужается в специфичности до рассмотрения индивидуальных особенностей отдельных браузеров … по большей части в порядке исходного кода самой таблицы стилей. Однако результаты коррелируют не точно. Это происходит, потому что различные процессоры визуализации и особенности таких объектов, как плавающий контекст, приносят почти непредвиденные последствия, когда смешиваются в общеизвестную смесь, поэтому реальный процесс требует больше, чем небольшого изменения, подстройки, и пересмотра.
Эта статья содержит достаточное основание для оформления и компоновки форм, но можно пойти еще дальше. Трудности, создаваемые операционными системами (компоненты которых заимствуются для создания элементов управления формы 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 |
Предыдущая статья — Оформление таблиц
Следующая статья — Плавающие элементы и очистка
Бен Хеник создает Web-сайты различного вида начиная с сентября 1995 г., когда он взялся за свой первый Web-проект как академический доброволец. С тех пор большая часть его работы была сделана в качестве фрилансера.
Бен является
Он живет в Лоуренсе, Канзас с тремя компьютерами и без телевизора. Вы может прочитать больше о нем и его работе на сайте henick.net ( http://www.henick.net/).
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.