Как закодировать эту форму? - PullRequest
3 голосов
/ 17 июля 2009

Я пытаюсь уйти от использования HTML-тега TABLE, но не могу понять, как создать, как я хочу, чтобы он выглядел. Я сделал снимок экрана с помощью тега таблицы, Как бы я сделал это с divs или / и spans и т. Д., И при этом сохранил бы вертикальное выравнивание меток (имя, фамилия в этом примере)?
(размер и цвет шрифта и т. д. здесь, конечно, не имеет значения)
альтернативный текст http://img522.imageshack.us/img522/7857/forme.jpg

благодарен за любой вклад,
Modano

Ответы [ 4 ]

4 голосов
/ 17 июля 2009

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

<form [..]>
   <ul>
      <li class="hasError">
         <em class="feedback">error message here</em>
         <div class="attribute">
            <label for="firstName">First name:</label>
            <em>(required)</em>
         </div>
         <div class="input">
            <input type="text" name="firstName" id="firstName" />
            <em class="description">optional description here</em>
         </div>
         <span class="clearBoth" />
      </li>
      <li>
         <em class="feedback" />
         <div class="attribute">
            <label for="firstName">Last name:</label>
            <em>(required)</em>
         </div>
         <div class="input">
            <input type="text" name="lastName" id="firstName" />
            <em class="description">optional description here</em>
         </div>
         <span class="clearBoth" />
      </li>
   </ul>
</form>

Это обеспечивает следующее:

  • Поместив сообщение об ошибке выше div, вы можете сделать произвольно длинное сообщение об ошибке без потери выравнивания
  • Каждый элемент ввода (и метка) хранится в одном элементе списка, что позволяет сгруппировать их логически. Он также читает что-то вроде следующего в программе чтения с экрана: «Форма. Список из двух элементов. Метка [...]». Это дает пользователю подсказку о том, что форма содержит два ввода.
  • Добавив класс hasError к элементу списка, вы можете легко настроить таргетинг на элементы-потомки с помощью CSS для стилизации с учетом ошибок.

Пример файла CSS может выглядеть примерно так (обратите внимание, что это не проверено):

form li {
    width: 300px;
}
form li.hasErrors {
    width: 298px;
    border: 1px red;
    background-color: #C55;
}
form .attribute {
    float: left;
    clear: left;
    width: 60px;
}
form .input {
    float: right;
    clear: none;
    width: 240px;
}
form .feedback {
    display: block;
    padding-left: 50px;
    color: red;
}
form .description {
    display: block;
    clear: both;
    color: #888;
}
.clearBoth { display: block; clear: both; }
0 голосов
/ 17 июля 2009

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

<style type="text/css">
    form { overflow: auto; position: relative; }
    input { float: left; }
    label { clear: left; float: left; width: 10em; }
</style>

<form>
    <label>Field 1</label><input/>
    <label>Field 2</label><input/>
    <label>Field 3</label><input/>
</form>
0 голосов
/ 17 июля 2009

Очень хороший учебник по созданию доступных форм HTML / CSS можно найти в Список отдельно: более красивые формы

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

0 голосов
/ 17 июля 2009

Я не эксперт по CSS, но с этого стоит начать. Конечно, стили должны быть во внешней таблице стилей.

<html>
<head>
<style>
html {
    font-size: 76%;
}
body {
    font-size: 1.0em;
    font-family: verdana;
}
div.input {
    border: 1px solid white;
    clear: left;
    width: 25em;
    height: 5em;
    padding: 2px;
    margin-bottom: 1.0em;
}
div.error {
    border: 1px solid red;
}
div.label {
    float: left;
    width: 7em;
}
div.field {
    float: left;
}
div.errormessage {
    color: red;
}
div.description {
    color: #bbb;
}
input.text {
    width: 13em;
}
</style>
</head>
<body>
<form>
    <div class="input error">
        <div class="label">
            <div>&nbsp;</div>
            <label>First name:<br>(required)</label>
        </div>
        <div class="field">
            <div class="errormessage">error message here</div>
            <input type="text" name="FirstName" class="text">
            <div class="description">optional description here</div>
        </div>
    </div>
    <div class="input">
        <div class="label">
            <div>&nbsp;</div>
            <label>Last name:<br>(required)</label>
        </div>
        <div class="field">
            <div class="errormessage">&nbsp;</div>
            <input type="text" name="LastName" class="text">
            <div class="description">optional description here</div>
        </div>
    </div>
</form>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...