Как разместить сложную форму с несколькими полями в строке по экрану?
Формы с несколькими столбцами, без таблиц
Ответ 1
Почему люди так хвалились, избегая таблиц?
Таблицы не устаревают и должны использоваться при отображении содержимого, которое логически принадлежит таблице.
Если ваша форма логически сгруппирована, чтобы таблица была интуитивно понятной, используйте таблицу.
Всегда думайте: "Какой самый чистый, самый простой и удобный способ достижения этого результата".
Если вам нужна жидкая форма с столбцами с переменным номером, то не обращайте на это внимания.
Ответ 2
Я предпочитаю немного более семантический способ, используя список определений:
<dl class="form">
    <dt><label for="input1">One:</label></dt>
    <dd><input type="text" name="input1" id="input1"></dd>
    <dt><label for="input2">Two:</label></dt>
    <dd><input type="text" name="input2" id="input2"></dd>
</dl>
Тогда ваш CSS:
dl.form {
    width:100%;
    float:left;
    clear:both;
}
dl.form dt {
    width:50%;
    float:left;
    clear:left;
    text-align:right;
}
dl.form dd {
    width:50%;
    float:left;
    clear:right;
    text-align:left;
}
Это должно создать форму по центру страницы, с метками в левом столбце и входами в правом.
Ответ 3
Существует много разных способов сделать это. Все это зависит от предпочтений. Обычно я использую оболочку div, содержащую все строки, а затем блок div для каждой строки, содержащий метку, ввод и валидатор. Вы можете использовать свойство CSS высотной линии, чтобы помочь вам с вертикальным выравниванием. Пример:
<div class="formWrapper">
<form>
   <div class="formItem">
      <label for="firstName">First Name:</label>
      <input name="firstName" id="firstName" class="required" type="text" />
      <span class="validator" style="display: none;">*</>
   </div>
   ... <!-- Rinse repeat -->
</form>
</div>
<style type="text/css">
   .formWrapper { width: 400px }
   .formWrapper .formItem { line-height: 35px; height: 35px; }
   .formWrapper label { width: 50px; }
   .formWrapper input { width: 100px; border: 1px solid #000; }
   .formWrapper .validator { padding-left: 10px; color: #FF0000; }
</style>
Надеюсь, что это поможет.
Ответ 4
Посмотрев на множество разных решений, я нашел примеры на этой странице (в частности, из "Fatal"?), некоторые из самых полезных. Но обширные
и теги меня немного беспокоили. Итак, вот небольшая модификация, которая может кому-то понравиться. Кроме того, вы обнаружите какой-то тип "обертка" или "стиль поля", который очень необходим, чтобы предотвратить поплавок, влияющий на другой HTML. См. Примеры выше.
<style>
.formcol{
float: left;
padding: 2px;
} 
.formcol label {
font-weight: bold;
display:block;} 
</style>
<div class="formcol">
    <label for="org">organization</label>
    <input type="text" id="org" size="24" name="org" />
  </div>
 <div class="formcol">
    <label for="fax">fax</label>
    <input type="text" id="fax" name="fax" size="2" />
  </div>
  <div class="formcol">
    <label for="3">three</label>
    <input type="text" id="3" name="3" />
    <label for="4">four</label>
    <input type="text" id="4" name="4" />
    <label for="5">five</label>
    <input type="text" id="5" name="5" />
  </div>
 <div class="formcol">
    <label for="6">six</label>
    <input type="text" id="6" name="6" />
  </div>
Ответ 5
Это было бы сделано с помощью CSS, установив свойство "display" в "inline" (поскольку элементы формы по умолчанию являются элементами уровня блока).
Ответ 6
Сделайте поиск "макетов без таблиц". Многие сайты описывают форматирование с помощью CSS. Вот простое введение: http://www.htmlgoodies.com/beyond/css/article.php/3642151
Ответ 7
Я предлагаю вам схему CSS для чертежей. Быстро посмотрите на демонстрационную страницу .
Ответ 8
Это то, что я обычно использую, когда мне нужно создавать довольно сложные формы.
HTML:
<fieldset>
    <legend>Consent group</legend>
    <form>
        <fieldset class="nolegend">
            <p><label><span>Title</span> <input type="text" name="title" size="40" value="" /></label></p>
            <p><label><span>Short name</span> <input type="text" name="sname" size="20" value="" /></label></p>
            <p><label><br /><input type="checkbox" name="approval"> This consent group requires approval</label></p>
     </fieldset>
        <fieldset class="nolegend">
            <p><label><span>Data use limitations</span> <textarea name="dul" cols="64" rows="4"></textarea></label></p>
        </fieldset>
        <input type="submit" value="Submit" />
    </form>
</fieldset>CSS
body, input, textarea, select {
    font: 1em Arial, Helvetica, sans-serif;
}
input, textarea, select { font-size: .8em }
fieldset,
fieldset legend {
    background-color: #EEE;
}
fieldset {
    border: none;
    margin: 0;
    padding: 0 0 .5em .01em;
    top: 1.25em;
    position: relative;
    margin-bottom: 2em;
}
fieldset fieldset {
    margin: 0 0 1em 0;
}
fieldset legend {
    padding: .25em .5em 0 .5em;
    border-bottom: none;
    font-weight: bold;
    margin-top: -1.25em;
    position: relative;
    *left: -.5em;
    color: #666;
}fieldset form,
fieldset .fieldset {
    margin: 0;
    padding: 1em .5em 0 .5em;
    overflow: hidden;
}
fieldset.nolegend {
    position: static;
    margin-bottom: 1em;
    background-color: transparent;
    padding: 0;
    overflow: hidden;
}
fieldset.nolegend p,
fieldset.nolegend div {
    float: left;
    margin: 0 1em 0 0;
}
fieldset.nolegend p:last-child,
fieldset.nolegend div:last-child {
    margin-right: 0;
}
fieldset.nolegend label>span {
    display: block;
}
fieldset.nolegend label span {
    _display: block;
}Я пропустил пару строк CSS с хаками Safari. Вы можете проверить живую версию этого кода.
Ответ 9
Pace KyleFarris, но я просто должен был дать Бен S голос за то, что у него хватило смелости упомянуть таблицы. Просто посмотрите на множество решений CSS на этой странице и в Интернете по смехотворно простой проблеме. CSS однажды может стать хорошим решением, но в настоящее время реплицируется простая сетка строк и столбцов, которую предоставляет тег таблицы, чрезвычайно сложна. Я потратил бесчисленные бесплодные часы с этим предрассудком на столы для вещей вроде формы. Почему мы делаем это с собой?
Ответ 10
Поля вводапо умолчанию являются встроенными. Поэтому вы можете просто использовать их линию без 
 Еще один вариант, если вы хотите, чтобы они выстроились правильно, выглядит следующим образом:
<div id="col1" style="float: left;>
    <input type="text" name="field1" />
    <br />
    <input type="text" name="field3" />
</div>
<div id="col2" style="float: left;>
    <input type="text" name="field2" />
    <br />
    <input type="text" name="field4" />
</div>
Ответ 11
Я предпочитаю использовать fieldset для группировки всех элементов и p для каждого поля формы.
<html>
<head>
<style type="text/css">
    fieldset {
        width: 500px;
        background-color: lightblue;
    }
    fieldset legend {
        font-weight: bold;
    }
    fieldset p {
        clear:both;
        padding: 5px;
    }
    fieldset label {
        text-align: left;
        width: 100px;
        float: left;
        font-weight: bold;
    }
    fieldset .Validator {
        color: red !important;
        font-weight: bold;
    } 
</style>
<head>
<body>
    <form>
        <fieldset>
            <legend>Data</legend>
            <p>
                <label for="firstName">First Name:</label>
                <input name="firstName" id="firstName" class="required" type="text" />
                <span class="Validator" style="display: none;">*</span>
            </p>
            <p>
                <label for="lastName">Last Name:</label>
                <input name="lastName" id="lastName" class="required" type="text" />
                <span class="Validator">*</span>
            </p>
        </fieldset>
    </form>
</body>
</html>
