Bootstrap 表单布局
bootstrap已经使用很久了,但是对于表单布局,尤其是HTML
结构嵌套层次还有很多疑问。
所以又翻了一遍官网和资料,总结一下。
本文部分内容翻译自这里.
基本原则
Bootstrap表单控件自动获得一些全局样式,如所有textual <input>
,<textarea>
以及<select>
带类的元素.form-control
的宽度为100%。表单布局的基本规则如下;
- 始终使用
<form role="form">
,有助于改善使用屏幕阅读器的人的可访问性
- 用于最佳间距包装标签和表格控件
<div class="form-group">
- 将类
.form-control
添加到所有文本<input>,<textarea>
和<select>
元素
垂直布局也是Bootstrap
的默认布局,因为我们的浏览器默认的普通流就是从左到右(LTR),从上到下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html lang="en"> <head> <title>My first Bootstrap page </title> <meta name="viewport" content="width=device-width, initialscale=1"> <link href="CSS/bootstrap.min.css" rel="stylesheet"> <link href="CSS/bootstrap-theme.min.css" rel="stylesheet"> <script type="text/javascript" src="JS/bootstrap.min.js"></script> </head> <body> <div class="container" style="max-width:600px;margin:60px auto;"> <form role="form"> <div class="form-group"> <label for="name">First name</label> <input type="name" class="form-control" id="fname" placeholder="Enter name"> <div class="form-group">
|
水平形式与垂直形式布局的不同之处在于标记量和表单的表示形式。在此表单中,布局标签浮动到输入字段的左侧。标签和输入字段都出现在同一行上。除默认规则外,水平表单的规则,
所有你需要做的就是添加.form-horizontal
类的<form>
元素,.control-label
类的所有<label>
元素。使用Bootstrap的预定义网格类来对齐标签和表单控件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <div class="container" style="max-width:600px;padding:40px 20px;background:#ebeff2"> <h3>Signup</h3> <form class="form-horizontal" role="form"> <div class="form-group"> <label for="name" class ="control-label col-sm-3">First name</label> <div class="col-sm-8"> <input type="name" class="form-control" id="name" placeholder="Enter name"> </div> </div> <div class="form-group"> <label for="address" class ="control-label col-sm-3">Second name</label> <div class="col-sm-8"> <input type="address" class="form-control" id="address" placeholder="Enter address"> </div> <div class="form-group"> <label for="email" class ="control-label col-sm-3">Email</label> <div class="col-sm-8"> <input type="email" class="form-control" id="email" placeholder="Enter email"> </div> </div> <div class="form-group"> <label for="pwd" class ="control-label col-sm-3">Password</label> <div class="col-sm-8"> <input type="password" class="form-control" id="pwd" placeholder="Enter password"> </div> </div> <div class="col-sm-offset-2 col-sm-8"> <button type="submit" class="btn btn-default">Register</button> </div> </form> </div>
|
- 注意:
label
元素在水平布局中必须添加.control-label
样式。
Bootstrap的内联表单布局可用于将表单控件并排放置在紧凑的布局中。在内联形式中,所有元素都是直线,左对齐,标签位于旁边。为此,您需要将.form-inline
类添加到<form>
元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <form class="form-inline" role="form"> <div class="form-group"> <label for="name">Name</label> <input type="name" class="form-control" id="name" placeholder="Enter name"> </div> <div class="form-group"> <label for="email">Email</label> <input type="email" class="form-control" id="email" placeholder="Enter email"> </div> <div class="form-group"> <label for="pwd">Password</label> <input type="password" class="form-control" id="pwd" placeholder="Enter password"> </div> <button type="submit" class="btn btn-default">Register</button> </form>
|
注意事项
.form-group
类用于封装组中的多个控件 - 就像我们对标签和相应的文本框所做的那样。
.control-label
和.form-control
类分别用于设置标签和表单元素的样式。
- 使用
.input-group
类可以相邻地关联多个控件。
- 禁用或只读状态可用于控件 - Bootstrap将自动关联必要的样式,但是,所有控件都必须添加.form-control类。
- 为了控制大小,可以使用
.input-lg
,.input-sm
类。要控制组的大小,可以使用.form-group-lg
或.form-group-sm
类。
- 要显示任何帮助文本,可以在单独的标签中使用
.help-block
类。这将以新的一行显示文本。
静态表单
经常需要静态展示表单信息,所以顺便总结一下静态表单的展示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <form class="form-horizontal"> <div class="form-group"> <label class="col-sm-2 control-label">Email</label> <div class="col-sm-10"> <p class="form-control-static">email@example.com</p> </div> </div> <div class="form-group"> <label for="inputPassword" class="col-sm-2 control-label">Password</label> <div class="col-sm-10"> <input type="password" class="form-control" id="inputPassword" placeholder="Password"> </div> </div> </form>
|
参考这里
表单元素校验状态
涉及.input-group-addon
.has-feedback
.form-control-feedback
.has-success
.help-block
等。
这里有一个bootstrap-validation
校验库就是使用这些class
样式实现的.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <form class="form-horizontal"> <div class="form-group has-success has-feedback"> <label class="control-label col-sm-3" for="inputSuccess3">Input with success</label> <div class="col-sm-9"> <input type="text" class="form-control" id="inputSuccess3" aria-describedby="inputSuccess3Status"> <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span> <span id="inputSuccess3Status" class="sr-only">(success)</span> </div> </div> <div class="form-group has-success has-feedback"> <label class="control-label col-sm-3" for="inputGroupSuccess2">Input group with success</label> <div class="col-sm-9"> <div class="input-group"> <span class="input-group-addon">@</span> <input type="text" class="form-control" id="inputGroupSuccess2" aria-describedby="inputGroupSuccess2Status"> </div> <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span> <span id="inputGroupSuccess2Status" class="sr-only">(success)</span> </div> </div> </form>
|
例子参考这里
bootstrap表格样式class
总结一下bootstrap表格样式class的id,以下内容来自bootstrap的forms.less
文件。
表单元素标签样式
Bootstrap
内部对如下的标签进行过样式的修饰。
fieldset
legend
label
input[type=”search”]
input[type=”radio”]
input[type=”checkbox”]
input[type=”file”]
input[type=”range”]
select[multiple]
select[size]
output
select
textarea
input[type=”text”]
input[type=”password”]
input[type=”datetime”]
input[type=”datetime-local”]
input[type=”date”]
input[type=”month”]
input[type=”time”]
input[type=”week”]
input[type=”number”]
input[type=”email”]
input[type=”url”]
input[type=”search”]
input[type=”tel”]
input[type=”color”]
表单样式class
.control-label
静态表单展示使用
.form-group-sm
.form-group-lg
.input-group-addon
.input-group-btn
.input-sm
.input-lg
.input-group-lg
.input-group-sm
参考这里
.radio
和.checkbox
.radio
.radio-inline
.checkbox
.checkbox-inline
参考这里
.has-feedback
.form-control-feedback
1 2 3 4 5 6 7 8 9
| <div class="form-group has-success has-feedback"> <label class="control-label" for="inputGroupSuccess1">Input group with success</label> <div class="input-group"> <span class="input-group-addon">@</span> <input type="text" class="form-control" id="inputGroupSuccess1" aria-describedby="inputGroupSuccess1Status"> </div> <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span> <span id="inputGroupSuccess1Status" class="sr-only">(success)</span> </div>
|
参考这里
.help-block
.help-block
主要给表单做一些说明性的文字
<legend>
和<fieldset>
的使用
<legend>
的使用
<legend>
:主要用来添加表单标题说明的.
<fieldset>
使用
<fieldset>
标签平时使用比较少,主要用在,当表单元素比较多,不同的表单元素需要进行分组,这时比较方便,而且对于分组表单元素进行统一的禁用时。
注意:浏览器兼容性问题
1 2
| > <fieldset disabled="disabled">内部的表单元素都被禁用</fieldset> >
|
例子参考这里:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Example of Bootstrap 3 Disabled Fieldsets</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <style type="text/css"> .bs-example{ margin: 20px; } </style> </head> <body> <div class="bs-example"> <form class="form-horizontal"> <legend>登录信息</legend> <fieldset disabled="disabled"> <div class="form-group"> <label for="inputEmail" class="control-label col-xs-2">Email</label> <div class="col-xs-10"> <input type="email" class="form-control" id="inputEmail" placeholder="Email"> </div> </div> <div class="form-group"> <label for="inputPassword" class="control-label col-xs-2">Password</label> <div class="col-xs-10"> <input type="password" class="form-control" id="inputPassword" placeholder="Password"> </div> </div> <div class="form-group"> <div class="col-xs-offset-2 col-xs-10"> <div class="checkbox"> <label><input type="checkbox"> Remember me</label> </div> </div> </div> <div class="form-group"> <div class="col-xs-offset-2 col-xs-10"> <button type="submit" class="btn btn-primary">Login</button> </div> </div> </fieldset> </form> </div> </body> </html>
|
参考资料
http://stacktips.com/tutorials/bootstrap/vertical-horizontal-and-inline-form-example-in-bootstrap
https://v3.bootcss.com/css/#forms
https://www.tutorialrepublic.com/twitter-bootstrap-tutorial/
https://www.tutorialrepublic.com/twitter-bootstrap-tutorial/bootstrap-forms.php