在Twitter Bootstrap中水平内的表单内联表单?


199

在没有任何自制类的情况下,在Twitter Bootstrap中设计如下所示的表单的最佳方法是什么(请参见下面的链接)?

是否可以像下面的示例一样在水平表单内设置内部表单内联:

用户界面目标的屏幕截图

Answers:


316

不要嵌套<form>标签,那是行不通的。只需使用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>

您可以通过多种方式实现该行为,这只是一个示例。在此启动程序上对其进行测试

引导程序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来获取正确的样式.controls
您可以在 jsfiddle 上对其进行测试


3
您还可以在div上添加表单类,在我的情况下,我在span6 div上使用了垂直表单类,在span12 div上使用了水平表单类
Iftah 2013年

3
这适用于bootstrap2。对于自举3,请访问:stackoverflow.com/questions/18429121/...
托米斯拉夫MUIC

1
在引导程序3中,如果输入下方有间隙,请删除“ form-group”。它在您使用它的每个div的底部添加了15px的间隙。
darkzangel 2014年

您不需要在键+值示例中将表单组与行混合。@ rap-2-h:您可以复制粘贴示例代码,然后单击运行。
塞巴斯蒂安

这行得通,但是我能够在当前版本的Bootstrap 3中对其进行简化...看来此解决方案的关键只是将所有输入控件放在div内,否则col-xx网格布局不起作用。不必嵌套表单组,父col-xx-#可以共享相同的div,并且不需要“行”类,因为父表单已经是水平的表单(100%)。
Tony Wall

92

对于bootstrap 3,上面的示例可以工作,但是过于复杂,而不是使用form-group将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”,它应该可以工作。
塞德里克Guillemette

1
这是行不通的。尝试执行问题所要求的操作,而使用form-inline是不可能的。
塞巴斯蒂安2015年

唯一的问题是该子区域不会扩展到全宽,并且使用网格大小调整的任何尝试都将相对于所需的最小内容宽度进行压缩。另一个解决方案更好,就是没有那么多div(请参阅我的评论)。
托尼·沃尔

3
您必须将所有表单组都包装在表单内联类中
ymakux 2015年

jsfiddle.net/9637fywb似乎并没有达到预期的效果-使用当前最新的引导CDN(3.3.5)。此示例也没有考虑“内联”部分中的两个标签。也许小提琴琴缺少某种包装纸,但如果这样的话,似乎应该将其包括在答案中。
emragins 2015年

14

这使用具有一个CSS类的twitter bootstrap 3.x来使标签位于输入的顶部。这是一个小提琴链接,请确保将结果面板扩展到足以看到效果的范围。

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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.