我们稍后会讲到Bootstrap,但是这里有一些基本的CSS概念可以让你自己实现。正如beard of prey指出,你可以通过绝对定位图标在输入元素内部来实现此目的。然后在两侧添加填充,以使文本不与图标重叠。
因此,下面是HTML代码:
<div class="<b>inner-addon left-addon</b>">
<i class="glyphicon glyphicon-user"></i>
<input type="text" class="form-control" />
</div>
/* enable absolute positioning */
.inner-addon {
position: relative;
}
/* style icon */
.inner-addon .glyphicon {
position: absolute;
padding: 10px;
pointer-events: none;
}
/* align icon */
.left-addon .glyphicon { left: 0px;}
.right-addon .glyphicon { right: 0px;}
/* add padding */
.left-addon input { padding-left: 30px; }
.right-addon input { padding-right: 30px; }
.glyphicon
替换为.fa
。
正如buffer所指出的, 这可以通过Bootstrap本身来实现,方法是使用带可选图标的验证状态。这可以通过给.form-group
元素添加.has-feedback
类和图标添加.form-control-feedback
类来完成。
最简单的示例可能是像这样的:
<div class="form-group <b>has-feedback</b>">
<label class="control-label">Username</label>
<input type="text" class="form-control" placeholder="Username" />
<i class="glyphicon glyphicon-user <b>form-control-feedback</b>"></i>
</div>
优点:
缺点:
为了克服这个缺点,我整理了这个pull-request,实现了支持将图标左对齐的更改。由于这是一个相对较大的更改,它被推迟到将来的版本发布,但如果你需要这些功能今天,这里有一个简单的实现指南:
只需在css中包含这些表单更改(也可通过底部的隐藏堆栈片段进行内联).has-feedback
的组中包含类.has-feedback-left
,以便左对齐图标。P.S. frizi's suggestion of adding
pointer-events: none;
has been added to bootstrap
没有找到您要找的内容?尝试这些类似的问题:
.has-feedback .form-control {
padding-right: 34px;
}
.has-feedback .form-control.input-sm,
.has-feedback.form-group-sm .form-control {
padding-right: 30px;
}
.has-feedback .form-control.input-lg,
.has-feedback.form-group-lg .form-control {
padding-right: 46px;
}
.has-feedback-left .form-control {
padding-right: 12px;
padding-left: 34px;
}
.has-feedback-left .form-control.input-sm,
.has-feedback-left.form-group-sm .form-control {
padding-left: 30px;
}
.has-feedback-left .form-control.input-lg,
.has-feedback-left.form-group-lg .form-control {
padding-left: 46px;
}
.has-feedback-left .form-control-feedback {
left: 0;
}
.form-control-feedback {
line-height: 34px !important;
}
.input-sm + .form-control-feedback,
.form-horizontal .form-group-sm .form-control-feedback {
width: 30px;
height: 30px;
line-height: 30px !important;
}
.input-lg + .form-control-feedback,
.form-horizontal .form-group-lg .form-control-feedback {
width: 46px;
height: 46px;
line-height: 46px !important;
}
.has-feedback label.sr-only ~ .form-control-feedback,
.has-feedback label.sr-only ~ div .form-control-feedback {
top: 0;
}
@media (min-width: 768px) {
.form-inline .inline-feedback {
position: relative;
display: inline-block;
}
.form-inline .has-feedback .form-control-feedback {
top: 0;
}
}
.form-horizontal .has-feedback-left .form-control-feedback {
left: 15px;
}
.focusedInput
类在.input-group-addon
之后定义,因此当样式表级联时,后者的样式应该优先。您能更好地描述导致这成为问题的情况吗? - KyleMit<i class="icon-user"></i>
更改为<i class="fa fa-user"></i>
。每当你考虑更新外部库时,请务必阅读发布说明和新文档,以确定你的应用程序是否仍然兼容或需要升级。 - KyleMit官方方法。无需自定义CSS:
<form class="form-inline" role="form">
<div class="form-group has-success has-feedback">
<label class="control-label" for="inputSuccess4"></label>
<input type="text" class="form-control" id="inputSuccess4">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
</form>
演示: http://jsfiddle.net/yajf3b7q
本演示基于 Bootstrap 文档中的一个示例。请在此处向下滚动至“带可选图标”http://getbootstrap.com/css/#forms-control-validation
{left:0}
添加到glyphicon类中即可处理左对齐。http://jsfiddle.net/LS2Ek/30/。不过我喜欢你的轮廓+阴影方法。看起来很整洁! - userleft:0
不再标识输入的开始。此外,你需要在输入框左侧添加填充,并在右侧删除它。尽管如此,这仍然是一个非常好的、干净的解决方案。我认为确定输入框的左侧是困难的部分,这就是使用带有position:relative
的包装器的地方。 - KyleMit这里有一个仅使用CSS的替代方案。我为搜索字段设置了这个效果,类似于Firefox(和其他数百个应用程序)。
HTML
<div class="col-md-4">
<input class="form-control" type="search" />
<span class="glyphicon glyphicon-search"></span>
</div>
CSS
->CSS
.form-control {
padding-right: 30px;
}
.form-control + .glyphicon {
position: absolute;
right: 0;
padding: 8px 27px;
}
可以使用官方Bootstrap 3.x版本中的类,而无需使用任何自定义CSS来完成。
在输入标签之前使用 input-group-addon
类,在 input-group
中使用任何一个图标字体,以下是代码:
<form>
<div class="form-group">
<div class="col-xs-5">
<div class="input-group">
<span class="input-group-addon transparent"><span class="glyphicon glyphicon-user"></span></span>
<input class="form-control left-border-none" placeholder="User Name" type="text" name="username">
</div>
</div>
</div>
</form>
这里是输出结果
若您想进一步自定义,请在您自己的custom.css文件中添加一些自定义CSS代码(如有需要,请调整填充)。
.transparent {
background-color: transparent !important;
box-shadow: inset 0px 1px 0 rgba(0,0,0,.075);
}
.left-border-none {
border-left:none !important;
box-shadow: inset 0px 1px 0 rgba(0,0,0,.075);
}
通过将 input-group-addon
的背景设置为透明并将输入标签的左渐变设置为零,输入框会呈无缝状态。下面是自定义的输出结果。
这里有一个 jsbin 的示例。input-lg
时的标签重叠、对齐和选项卡问题等自定义CSS问题。以下是我如何只使用默认的Bootstrap CSS v3.3.1来实现它:
<div class="form-group">
<label class="control-label">Start:</label>
<div class="input-group">
<input type="text" class="form-control" aria-describedby="start-date">
<span class="input-group-addon" id="start-date"><span class="glyphicon glyphicon-calendar"></span></span>
</div>
</div>
这是它的外观:
如果你正在使用 Fontawesome,你可以这样做:
<input type="text" style="font-family:Arial, FontAwesome" placeholder="" />
结果
完整的Unicode列表可以在Font Awesome 4.6.3图标参考手册中找到。
这个“作弊方法”会使glyphicon类改变输入控件的字体。
<input class="form-control glyphicon" type="search" placeholder=""/>
.form-control[type="search"]::-webkit-input-placeholder:first-letter {
font-family:"Glyphicons Halflings";
}
.form-control[type="search"]:-moz-placeholder:first-letter {
font-family:"Glyphicons Halflings";
}
.form-control[type="search"]::-moz-placeholder:first-letter {
font-family:"Glyphicons Halflings";
}
.form-control[type="search"]:-ms-input-placeholder:first-letter {
font-family:"Glyphicons Halflings";
}
.form-control.glyphicon {
font-family:inherit;
}
.form-control.glyphicon::-webkit-input-placeholder:first-letter {
font-family:"Glyphicons Halflings";
}
.form-control.glyphicon:-moz-placeholder:first-letter {
font-family:"Glyphicons Halflings";
}
.form-control.glyphicon::-moz-placeholder:first-letter {
font-family:"Glyphicons Halflings";
}
.form-control.glyphicon:-ms-input-placeholder:first-letter {
font-family:"Glyphicons Halflings";
}
HTML
<input class="form-control glyphicon" type="search" placeholder=" search" />
<input class="form-control glyphicon" type="text" placeholder=" username" />
<input class="form-control glyphicon" type="password" placeholder=" password" />
input {
border:solid 1px #ddd;
}
input.search {
padding-left:20px;
background-repeat: no-repeat;
background-position-y: 1px;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADbSURBVDhP5ZI9C4MwEIb7//+BEDgICA6C4OQgBJy6dRIEB6EgCNkEJ4e3iT2oHzH9wHbpAwfyJvfkJDnhYH4kHDVKlSAigSAQoCiBKjVGXvaxFXZnxBQYkSlBICII+22K4jM63rbHSthCSdsskVX9Y6KxR5XJSSpVy6GbpbBKp6aw0BzM0ShCe1iKihMXC6EuQtMQwukzPFu3fFd4+C+/cimUNxy6WQkNnmdzL3NYPfDmLVuhZf2wZYz80qDkKX1St3CXAfVMqq4cz3hTaGEpmctxDPmB0M/fCYEbAwZYyVKYcroAAAAASUVORK5CYII=);
}
<input class="search">
input {
border:solid 1px #ddd;
}
input.search {
padding-left:20px;
background-repeat: no-repeat;
background-position-y: 1px;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADbSURBVDhP5ZI9C4MwEIb7//+BEDgICA6C4OQgBJy6dRIEB6EgCNkEJ4e3iT2oHzH9wHbpAwfyJvfkJDnhYH4kHDVKlSAigSAQoCiBKjVGXvaxFXZnxBQYkSlBICII+22K4jM63rbHSthCSdsskVX9Y6KxR5XJSSpVy6GbpbBKp6aw0BzM0ShCe1iKihMXC6EuQtMQwukzPFu3fFd4+C+/cimUNxy6WQkNnmdzL3NYPfDmLVuhZf2wZYz80qDkKX1St3CXAfVMqq4cz3hTaGEpmctxDPmB0M/fCYEbAwZYyVKYcroAAAAASUVORK5CYII=);
}
<input class="search">
另一种方法是通过在CSS中使用伪元素:before
来放置glyphicon。
对于这个HTML:
<form class="form form-horizontal col-xs-12">
<div class="form-group">
<div class="col-xs-7">
<span class="usericon">
<input class="form-control" id="name" placeholder="Username" />
</span>
</div>
</div>
</form>
.usericon input {
padding-left:25px;
}
.usericon:before {
height: 100%;
width: 25px;
display: -webkit-box;
-webkit-box-pack: center;
-webkit-box-align: center;
position: absolute;
content: "\e008";
font-family: 'Glyphicons Halflings';
pointer-events: none;
}
pointer-events: none;
,以便光标不会干扰输入焦点。所有其他CSS规则都是用于居中和添加适当的间距。