Форма встроенная внутри формы горизонтальная в Twitter начальной загрузки?


200

Какой лучший способ создать форму, которая выглядит следующим образом (см. Ссылку ниже) в Twitter-загрузчике без каких-либо домашних занятий?

Можно ли установить внутреннюю форму внутри строки внутри формы, как показано ниже:

скриншот цели пользовательского интерфейса

Ответы:


317

Не вкладывайте <form>теги, это не сработает. Просто используйте классы Bootstrap.

Bootstrap 3

<form class="form-horizontal" role="form">
    <div class="form-group">
      <label for="inputType" class="col-md-2 control-label">Type</label>
      <div class="col-md-3">
          <input type="text" class="form-control" id="inputType" placeholder="Type">
      </div>
    </div>
    <div class="form-group">
        <span class="col-md-2 control-label">Metadata</span>
        <div class="col-md-6">
            <div class="form-group row">
                <label for="inputKey" class="col-md-1 control-label">Key</label>
                <div class="col-md-2">
                    <input type="text" class="form-control" id="inputKey" placeholder="Key">
                </div>
                <label for="inputValue" class="col-md-1 control-label">Value</label>
                <div class="col-md-2">
                    <input type="text" class="form-control" id="inputValue" placeholder="Value">
                </div>
            </div>
        </div>
    </div>
</form>

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

Bootstrap 2

<form class="form-horizontal">
    <div class="control-group">
        <label class="control-label" for="inputType">Type</label>
        <div class="controls">
            <input type="text" id="inputType" placeholder="Type">
        </div>
    </div>
    <div class="control-group">
        <span class="control-label">Metadata</span>
        <div class="controls form-inline">
            <label for="inputKey">Key</label>
            <input type="text" class="input-small" placeholder="Key" id="inputKey">
            <label for="inputValue">Value</label>
            <input type="password" class="input-small" placeholder="Value" id="inputValue">
        </div>
    </div>
</form>

Обратите внимание, что я использую, .form-inlineчтобы получить стиль propper внутри .controls.
Вы можете проверить это на этом jsfiddle


3
Вы можете также добавить классы форм на дивы, в моем случае я использовал вертикальный класс формы на span6 DIV и горизонтальной формы класса на span12 DIV
Ифтах

3
Это работает для bootstrap2. Для начальной загрузки 3 посетите: stackoverflow.com/questions/18429121/…
Томислав Муик

1
В начальной загрузке 3, если под входом есть пробел, удалите «form-group». Это добавляет 15px разрыв в нижней части каждого div, с которым вы используете его.
darkzangel

Вам не нужно смешивать группу форм со строкой в ​​примере Key + Value. @ Rap-2-H: Вы можете скопировать вставить пример кода и нажмите кнопку «Выполнить».
Себастьян

Это работает, но я смог упростить его в текущей версии Bootstrap 3 ... Кажется, ключом к этому решению является просто поместить любые элементы управления вводом в div, иначе макет сетки col-xx не работает. Не нужно было вкладывать группу форм, родительский столбец col-xx- # может использовать один и тот же div, и нет необходимости в классе «row», поскольку родительская форма уже является горизонтальной формой (100%).
Тони Уолл

92

Для начальной загрузки 3 приведенный выше пример работает, но он слишком сложен, вместо использования группы форм используйте form-inline для полей, которые вы хотите встроить.

Например:

<div class="form-group">
     <label>CVV</label>
     <input type="text" size="4" class="form-control" />
</div>

<div class="form-inline">
      <label>Expiration (MM/YYYY)</label><br>
      <input type="text" size="2" class="form-control" /> / <input type="text" size="4" class="form-control" />
</div>

Он может не работать для вас из-за класса управления формой, который устанавливает «display: block». Если вы переопределите его на «display: inline-block», оно должно работать.
Седрик Гиймет

1
Это не работает. Попробуйте сделать то, что задает вопрос, это невозможно с помощью встроенной формы.
Себастьян

Единственная проблема, связанная с этим, заключается в том, что подобласть не расширяется до полной ширины, и любая попытка использовать размер сетки будет подавлена ​​относительно минимальной требуемой ширины содержимого. Другое решение лучше просто без такого количества div'ов (см. Мой комментарий там).
Тони Уолл

3
Вы должны обернуть все группы форм в класс
in-line

jsfiddle.net/9637fywb Это, кажется, не работает должным образом - с использованием текущей последней CDN начальной загрузки (3.3.5). Этот пример также не учитывает две метки внутри секции «inline». Возможно, на скрипке отсутствует какая-то обертка, но, похоже, это следует включить в ответ, если так.
Emragins

14

При этом используется твиттер 3.x Twitter с одним классом CSS, чтобы надписи располагались поверх входных данных. Вот ссылка на скрипку , убедитесь, что панель результатов развернута достаточно широко, чтобы увидеть эффект.

HTML:

  <div class="row myform">
     <div class="col-md-12">
        <form name="myform" role="form" novalidate>
           <div class="form-group">
              <label class="control-label" for="fullName">Address Line</label>
              <input required type="text" name="addr" id="addr" class="form-control" placeholder="Address"/>
           </div>

           <div class="form-inline">
              <div class="form-group">
                 <label>State</label>
                 <input required type="text" name="state" id="state" class="form-control" placeholder="State"/>
              </div>

              <div class="form-group">
                 <label>ZIP</label>
                 <input required type="text" name="zip" id="zip" class="form-control" placeholder="Zip"/>
              </div>
           </div>

           <div class="form-group">
              <label class="control-label" for="country">Country</label>
              <input required type="text" name="country" id="country" class="form-control" placeholder="country"/>
           </div>
        </form>
     </div>
  </div>

CSS:

.myform input.form-control {
   display: block;  /* allows labels to sit on input when inline */
   margin-bottom: 15px; /* gives padding to bottom of inline inputs */
}

2

Поскольку в начальной загрузке 4 используется div class = "form-row" в сочетании с div class = "form-group col-X". X - это ширина, которая вам нужна. Вы получите хорошие встроенные столбцы. Смотри скрипку .

<form class="form-horizontal" name="FORMNAME" method="post" action="ACTION" enctype="multipart/form-data">
    <div class="form-group">
        <label class="control-label col-sm-2" for="naam">Naam:&nbsp;*</label>
        <div class="col-sm-10">
            <input type="text" require class="form-control" id="naam" name="Naam" placeholder="Uw naam" value="{--NAAM--}" >
            <div id="naamx" class="form-error form-hidden">Wat is uw naam?</div>
        </div>
    </div>

    <div class="form-row">

        <div class="form-group col-5">
            <label class="control-label col-sm-4" for="telefoon">Telefoon:&nbsp;*</label>
            <div class="col-sm-12">
                <input type="tel" require class="form-control" id="telefoon" name="Telefoon" placeholder="Telefoon nummer" value="{--TELEFOON--}" >
                <div id="telefoonx" class="form-error form-hidden">Wat is uw telefoonnummer?</div>
            </div>
        </div>

        <div class="form-group col-5">
            <label class="control-label col-sm-4" for="email">E-mail: </label>
            <div class="col-sm-12">
                <input type="email" require class="form-control" id="email" name="E-mail" placeholder="E-mail adres" value="{--E-MAIL--}" >
                <div id="emailx" class="form-error form-hidden">Wat is uw e-mail adres?</div>
                    </div>
                </div>

        </div>

    <div class="form-group">
        <label class="control-label col-sm-2" for="titel">Titel:&nbsp;*</label>
        <div class="col-sm-10">
            <input type="text" require class="form-control" id="titel" name="Titel" placeholder="Titel van uw vraag of aanbod" value="{--TITEL--}" >
            <div id="titelx" class="form-error form-hidden">Wat is de titel van uw vraag of aanbod?</div>
        </div>
    </div>
<from>

1

Я знаю, что это старый ответ, но вот что я обычно делаю:

CSS:

.form-control-inline {
   width: auto;
   float:left;
   margin-right: 5px;
}

Затем оберните поля, которые вы хотите встроить в div, и добавьте .form-control-inline к входным данным, например:

HTML

<label class="control-label">Date of birth:</label>
<div>
<select class="form-control form-control-inline" name="year"> ... </select>
<select class="form-control form-control-inline" name="month"> ... </select>
<select class="form-control form-control-inline" name="day"> ... </select>
</div>

1

чтобы сделать это просто, просто добавьте class="form-inline"перед входом.

пример:

<div class="col-md-4 form-inline"> //add the class here...
     <label>Lot Size:</label>
     <input type="text" value="" name="" class="form-control" >
 </div>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.