Bootstrap提供了多种类型的表单布局,包括垂直表单、内联表单、水平表单和垂直或基本表单。每种布局方式都有其特定的适用场景和实现方法。 Bootstrap 适用于几乎所有的窗体控件,因此默认情况下窗体将垂直堆叠。
一、表单组
.form-groupmargin-bottom类是向窗体添加某些结构的最简单方法。它提供了一个灵活的类,鼓励对标签、控件、可选帮助文本和表单验证消息进行适当的分组。默认情况下,.form-inline会根据需要选取其他样式。将它与<fieldset>、<div>或几乎任何其他元素一起使用。
<form> <div class="form-group"> <label for="formGroupExampleInput">Example label</label> <input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input placeholder"> </div> <div class="form-group"> <label for="formGroupExampleInput2">Another label</label> <input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input placeholder"> </div> </form>
二、表单网格
可以使用我们的网格类构建更复杂的表单。将这些用于需要多列、不同宽度和其他对齐选项的表单布局。
<form> <div class="row"> <div class="col"> <input type="text" class="form-control" placeholder="First name"> </div> <div class="col"> <input type="text" class="form-control" placeholder="Last name"> </div> </div> </form>
三、表单行
.row也可以换成.form-row,这是标准网格行的变体,它覆盖了默认的列间距,以实现更紧凑、更紧凑的布局。
<form> <div class="form-row"> <div class="col"> <input type="text" class="form-control" placeholder="First name"> </div> <div class="col"> <input type="text" class="form-control" placeholder="Last name"> </div> </div> </form>
还可以使用网格系统创建更复杂的布局。
<form> <div class="form-row"> <div class="form-group col-md-6"> <label for="inputEmail4">Email</label> <input type="email" class="form-control" id="inputEmail4"> </div> <div class="form-group col-md-6"> <label for="inputPassword4">Password</label> <input type="password" class="form-control" id="inputPassword4"> </div> </div> <div class="form-group"> <label for="inputAddress">Address</label> <input type="text" class="form-control" id="inputAddress" placeholder="1234 Main St"> </div> <div class="form-group"> <label for="inputAddress2">Address 2</label> <input type="text" class="form-control" id="inputAddress2" placeholder="Apartment, studio, or floor"> </div> <div class="form-row"> <div class="form-group col-md-6"> <label for="inputCity">City</label> <input type="text" class="form-control" id="inputCity"> </div> <div class="form-group col-md-4"> <label for="inputState">State</label> <select id="inputState" class="form-control"> <option selected>Choose...</option> <option>...</option> </select> </div> <div class="form-group col-md-2"> <label for="inputZip">Zip</label> <input type="text" class="form-control" id="inputZip"> </div> </div> <div class="form-group"> <div class="form-check"> <input class="form-check-input" type="checkbox" id="gridCheck"> <label class="form-check-label" for="gridCheck"> Check me out </label> </div> </div> <button type="submit" class="btn btn-primary">Sign in</button> </form>
四、水平形式
通过将.row类添加到窗体组,并使用.col-*-* 类指定标签和控件的宽度,使用网格创建水平窗体。确保将.col表单标签也添加到label中,以便它们与相关表单控件垂直居中。
有时,可能需要使用margin或padding实用程序来创建所需的完美对齐。例如,我们移除了堆叠的单选按钮标签上的填充顶部,以便更好地对齐文本基线。
<form> <div class="form-group row"> <label for="inputEmail3" class="col-sm-2 col-form-label">Email</label> <div class="col-sm-10"> <input type="email" class="form-control" id="inputEmail3"> </div> </div> <div class="form-group row"> <label for="inputPassword3" class="col-sm-2 col-form-label">Password</label> <div class="col-sm-10"> <input type="password" class="form-control" id="inputPassword3"> </div> </div> <fieldset class="form-group row"> <legend class="col-form-label col-sm-2 float-sm-left pt-0">Radios</legend> <div class="col-sm-10"> <div class="form-check"> <input class="form-check-input" type="radio" name="gridRadios" id="gridRadios1" value="option1" checked> <label class="form-check-label" for="gridRadios1"> First radio </label> </div> <div class="form-check"> <input class="form-check-input" type="radio" name="gridRadios" id="gridRadios2" value="option2"> <label class="form-check-label" for="gridRadios2"> Second radio </label> </div> <div class="form-check disabled"> <input class="form-check-input" type="radio" name="gridRadios" id="gridRadios3" value="option3" disabled> <label class="form-check-label" for="gridRadios3"> Third disabled radio </label> </div> </div> </fieldset> <div class="form-group row"> <div class="col-sm-10 offset-sm-2"> <div class="form-check"> <input class="form-check-input" type="checkbox" id="gridCheck1"> <label class="form-check-label" for="gridCheck1"> Example checkbox </label> </div> </div> </div> <div class="form-group row"> <div class="col-sm-10"> <button type="submit" class="btn btn-primary">Sign in</button> </div> </div> </form>
水平表单标签大小调整:请确保对code><label>或<legend>使用 .col-form-label-sm或<legend>,以正确遵循.form-control-lg和.form-control-sm的大小。
<form> <div class="form-group row"> <label for="colFormLabelSm" class="col-sm-2 col-form-label col-form-label-sm">Email</label> <div class="col-sm-10"> <input type="email" class="form-control form-control-sm" id="colFormLabelSm" placeholder="col-form-label-sm"> </div> </div> <div class="form-group row"> <label for="colFormLabel" class="col-sm-2 col-form-label">Email</label> <div class="col-sm-10"> <input type="email" class="form-control" id="colFormLabel" placeholder="col-form-label"> </div> </div> <div class="form-group row"> <label for="colFormLabelLg" class="col-sm-2 col-form-label col-form-label-lg">Email</label> <div class="col-sm-10"> <input type="email" class="form-control form-control-lg" id="colFormLabelLg" placeholder="col-form-label-lg"> </div> </div> </form>
五、列大小
如前面的示例所示,我们的网格系统允许在一行中放置任意数量的.col。他们将平均分配可用宽度。还可以选择列的一个子集来占用更多或更少的空间,而其余的.col会使用特定的列类(如.col-sm-7)来平均分割其余的列。
<form> <div class="form-row"> <div class="col-7"> <input type="text" class="form-control" placeholder="City"> </div> <div class="col"> <input type="text" class="form-control" placeholder="State"> </div> <div class="col"> <input type="text" class="form-control" placeholder="Zip"> </div> </div> </form>
六、自动调整大小
下面的示例使用弹性盒子实用类将内容垂直居中,并将.col更改为.col-auto,以便列只占用所需的空间。换句话说,列的大小是基于内容的。
<form> <div class="form-row align-items-center"> <div class="col-auto"> <label class="sr-only" for="inlineFormInput">Name</label> <input type="text" class="form-control mb-2" id="inlineFormInput" placeholder="Jane Doe"> </div> <div class="col-auto"> <label class="sr-only" for="inlineFormInputGroup">Username</label> <div class="input-group mb-2"> <div class="input-group-prepend"> <div class="input-group-text">@</div> </div> <input type="text" class="form-control" id="inlineFormInputGroup" placeholder="Username"> </div> </div> <div class="col-auto"> <div class="form-check mb-2"> <input class="form-check-input" type="checkbox" id="autoSizingCheck"> <label class="form-check-label" for="autoSizingCheck"> Remember me </label> </div> </div> <div class="col-auto"> <button type="submit" class="btn btn-primary mb-2">Submit</button> </div> </div> </form>
然后,可以再次将其与特定于大小的列类重新混合。
<form> <div class="form-row align-items-center"> <div class="col-sm-3 my-1"> <label class="sr-only" for="inlineFormInputName">Name</label> <input type="text" class="form-control" id="inlineFormInputName" placeholder="Jane Doe"> </div> <div class="col-sm-3 my-1"> <label class="sr-only" for="inlineFormInputGroupUsername">Username</label> <div class="input-group"> <div class="input-group-prepend"> <div class="input-group-text">@</div> </div> <input type="text" class="form-control" id="inlineFormInputGroupUsername" placeholder="Username"> </div> </div> <div class="col-auto my-1"> <div class="form-check"> <input class="form-check-input" type="checkbox" id="autoSizingCheck2"> <label class="form-check-label" for="autoSizingCheck2"> Remember me </label> </div> </div> <div class="col-auto my-1"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> </form>
当然,还支持自定义表单控件。
<form> <div class="form-row align-items-center"> <div class="col-auto my-1"> <label class="mr-sm-2 sr-only" for="inlineFormCustomSelect">Preference</label> <select class="custom-select mr-sm-2" id="inlineFormCustomSelect"> <option selected>Choose...</option> <option value="1">One</option> <option value="2">Two</option> <option value="3">Three</option> </select> </div> <div class="col-auto my-1"> <div class="custom-control custom-checkbox mr-sm-2"> <input type="checkbox" class="custom-control-input" id="customControlAutosizing"> <label class="custom-control-label" for="customControlAutosizing">Remember my preference</label> </div> </div> <div class="col-auto my-1"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> </form>
七、内联表单
使用.form-inline类在单个水平行上显示一系列标签、窗体控件和按钮。内联窗体中的窗体控件与其默认状态略有不同。
控件是display: flex,折叠任何 HTML 空白,并允许使用间距和 flexbox 实用程序提供对齐控制。
width: autowidth: 100%控件和输入组接收以覆盖 Bootstrap 默认值。
控件仅以内联方式显示在宽度至少为 576px 的视口中,以考虑移动设备上的窄视口。
可能需要使用间距实用程序手动处理各个表单控件的宽度和对齐方式(如下所示)。最后,请确保始终在每个窗体控件中包含一个 with,即使需要使用 .<label>.sr-only
<form class="form-inline"> <label class="sr-only" for="inlineFormInputName2">Name</label> <input type="text" class="form-control mb-2 mr-sm-2" id="inlineFormInputName2" placeholder="Jane Doe"> <label class="sr-only" for="inlineFormInputGroupUsername2">Username</label> <div class="input-group mb-2 mr-sm-2"> <div class="input-group-prepend"> <div class="input-group-text">@</div> </div> <input type="text" class="form-control" id="inlineFormInputGroupUsername2" placeholder="Username"> </div> <div class="form-check mb-2 mr-sm-2"> <input class="form-check-input" type="checkbox" id="inlineFormCheck"> <label class="form-check-label" for="inlineFormCheck"> Remember me </label> </div> <button type="submit" class="btn btn-primary mb-2">Submit</button>
<form class="form-inline"> <label class="my-1 mr-2" for="inlineFormCustomSelectPref">Preference</label> <select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref"> <option selected>Choose...</option> <option value="1">One</option> <option value="2">Two</option> <option value="3">Three</option> </select> <div class="custom-control custom-checkbox my-1 mr-sm-2"> <input type="checkbox" class="custom-control-input" id="customControlInline"> <label class="custom-control-label" for="customControlInline">Remember my preference</label> </div> <button type="submit" class="btn btn-primary my-1">Submit</button> </form>
还支持自定义表单控件和选择。
<form class="form-inline"> <label class="my-1 mr-2" for="inlineFormCustomSelectPref">Preference</label> <select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref"> <option selected>Choose...</option> <option value="1">One</option> <option value="2">Two</option> <option value="3">Three</option> </select> <div class="custom-control custom-checkbox my-1 mr-sm-2"> <input type="checkbox" class="custom-control-input" id="customControlInline"> <label class="custom-control-label" for="customControlInline">Remember my preference</label> </div> <button type="submit" class="btn btn-primary my-1">Submit</button> </form>
八、帮助文本
可以使用(以前称为 v3)创建表单中的块级帮助文本。内联帮助文本可以使用任何内联 HTML 元素和实用程序类(如 ..form-text.help-block.text-muted)。
输入下方的帮助文本可以使用.form-textdisplay: block设置样式。此类包含并添加了一些上边距,以便于与上面的输入间距。
<label for="inputPassword5">Password</label> <input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock"> <small id="passwordHelpBlock" class="form-text text-muted"> Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji. </small>
内联文本可以使用任何典型的内联 HTML 元素(无论是<small>、<span> 还是其他元素),而只包含一个实用程序类。
<form class="form-inline"> <div class="form-group"> <label for="inputPassword6">Password</label> <input type="password" id="inputPassword6" class="form-control mx-sm-3" aria-describedby="passwordHelpInline"> <small id="passwordHelpInline" class="text-muted"> Must be 8-20 characters long. </small> </div> </form>
九、禁用的表单
在disabled上输入添加 boolean 属性,以防止用户交互并使其看起来更轻。
<input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here..." disabled>
将disabled属性添加到 <fieldset> 以禁用其中的所有控件。
<form> <fieldset disabled> <legend>Disabled fieldset example</legend> <div class="form-group"> <label for="disabledTextInput">Disabled input</label> <input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input"> </div> <div class="form-group"> <label for="disabledSelect">Disabled select menu</label> <select id="disabledSelect" class="form-control"> <option>Disabled select</option> </select> </div> <div class="form-group"> <div class="form-check"> <input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled> <label class="form-check-label" for="disabledFieldsetCheck"> Can't check this </label> </div> </div> <button type="submit" class="btn btn-primary">Submit</button> </fieldset> </form>
锚点注意事项:
- 浏览器将<input>中的所有本机表单控件(<select>、<button> 和<fieldset disabled>元素)视为禁用,从而阻止其上的键盘和鼠标交互。
- 但是,如果窗体还包含类似按钮的自定义元素,例如<a … class=”btn btn-*”>,则只会为这些元素提供样式。