如何将字形图标添加到文本类型输入框?例如,我想在用户名输入中包含“ icon-user”,如下所示:



评论

这是我的替代解决方案(2014年),JSFiddle [jsfiddle.net/rcotrina94/cyCFS/272]

晚到聚会,但检查出我的答案,即时通讯仅使用引导程序来获得该效果,并更改颜色和边框,我正在使用两行CSS。它解决了答案部分stackoverflow.com/a/40945821/2914407
中讨论的其他问题

#1 楼

如果没有Bootstrap:

我们将稍后介绍Bootstrap,但这是基本CSS概念的使用,您可以自己完成此操作。正如猎物所指出的那样,您可以通过将CSS绝对放置在输入元素内的图标来使用CSS。然后在任一侧添加填充,以使文本不会与图标重叠。

对于以下HTML:

 <div class="inner-addon left-addon">
    <i class="glyphicon glyphicon-user"></i>
    <input type="text" class="form-control" />
</div>
 


您可以使用以下CSS左右对齐字形:

 /* 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; }
 


Plunker中的演示




注意:这假定您使用的是字形符号,但效果很好带有font-awesome。
对于FA,只需将.glyphicon替换为.fa



使用Bootstrap:

正如缓冲区指出的那样,可以通过使用带有可选图标的验证状态在Bootstrap中本地完成。这是通过将.form-group元素赋予.has-feedback的类别,并将图标赋予.form-control-feedback的类别来实现的。

最简单的示例如下所示:

<div class="form-group has-feedback">
    <label class="control-label">Username</label>
    <input type="text" class="form-control" placeholder="Username" />
    <i class="glyphicon glyphicon-user form-control-feedback"></i>
</div>




包括对不同表单类型(基本,水平,内联)的支持
包括对不同控件尺寸(默认,小,大)的支持
/>
缺点:


不包括对左对齐图标的支持

为了克服缺点,我将这个拉动请求与更改以支持左对齐的图标。由于这是一个相对较大的更改,已推迟到以后的发行版中,但是如果您今天需要这些功能,这里有一个简单的实施指南:

只需将这些形式的更改包括在css中(也通过底部的隐藏堆栈片段内联)*少:或者,如果通过更少的内容进行构建,则这是更少的形式更改

然后,您要做的就是在具有.has-feedback-left类别的任何组中包括.has-feedback类别,以使图标左对齐。

由于存在许多不同表单类型的html配置,不同的控件大小,不同的图标集和不同的标签可见性,我创建了一个测试页,其中显示了每个排列的正确HTML设置以及实时演示。

这是Plunker中的演示




PS frizi关于添加pointer-events: none;的建议已添加到引导程序中


找不到您想要的东西?尝试以下类似问题:


将Twitter Bootstrap图标添加到输入框
在文本框引导程序附近放置搜索图标

为左对齐的反馈图标添加CSS




 .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的css选择器更加明确,否则它将被.input-group-addon覆盖。

–米歇尔·穆勒(MichelMüller)
13-10-25在14:51

@MichelMüller,不确定在您建议的修改中看到的值。 .focusedInput类是在.input-group-addon之后定义的,因此当样式表层叠时,后一种样式应优先。您能否更好地描述导致此问题的情况?

– KyleMit
13-10-25在15:05

我建议添加“指针事件:无;”图标,因为默认情况下它们会干扰输入聚焦。

– Frizi
2013年12月20日16:46

@Leandro,当然可以!仅仅是因为FontAwesome在版本4中引入了重大更改。如果要将版本从3.x升级到4.x,则必须将 更改为 。每当您考虑更新外部库时,请务必阅读发行说明和新文档,以确定您的应用程序是否仍然兼容或需要升级。

– KyleMit
2014年3月28日在21:39

@Leando,您可以详细了解FA 4.0中的新命名约定以及从3.21到4的完整迁移指南。

– KyleMit
2014年3月28日在21:46

#2 楼

官方方法。不需要自定义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>

此演示基于Bootstrap文档中的示例。在此处http://getbootstrap.com/css/#forms-control-validation
向下滚动到“带有可选图标”


评论


+1-在引导程序中内置本机方法绝对不错。尽管像问题所要求的那样,在左对齐图标上并没有那么热,但绝对是一种好方法。

– KyleMit
2014年6月26日15:46

向glyphicon类添加{left:0}应该注意左对齐。 jsfiddle.net/LS2Ek/30。不过,我喜欢您的“轮廓+阴影”方法。看起来很整洁!

–用户
2014年7月4日在5:05



最初我也是这么想的,但是您将不得不在不同情况下重新创建很多CSS工作。如果添加标签,将会看到一些问题。在嵌入式表单上,left:0不再标识输入的开始。另外,您还需要在输入的左侧添加填充,并在右侧将其删除。仍然是一个非常不错且干净的解决方案。我认为,识别输入的左侧是最困难的部分,这是一个带有position:relative的包装器的方便之处。

– KyleMit
2014年7月4日在12:43

您应该将此补丁添加到引导程序。这是一个方便且经常使用的功能。

–用户
2014年7月4日在13:18

@tillias更新

–用户
20-10-18在12:45

#3 楼

这是仅CSS的替代方案。我将其设置为搜索字段,以达到类似于Firefox(及其他一百种应用程序)的效果。

这里是一个小提琴。

HTML

<div class="col-md-4">
  <input class="form-control" type="search" />
  <span class="glyphicon glyphicon-search"></span>
</div>


CSS

.form-control {
  padding-right: 30px;
}

.form-control + .glyphicon {
  position: absolute;
  right: 0;
  padding: 8px 27px;
}


评论


+1很棒的解决方案。我将其调整为左右实用程序类,但绝对是正确的方法

– KyleMit
13年11月26日,0:26

是的,如此简单,只是完美

– PeMa
17-2-22在13:57

#4 楼

这是我仅使用默认引导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>


这是它的外观:



#5 楼

可以使用官方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>


这里是输出



要对其进行自定义,请向其中添加几行自定义css您自己的custom.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示例

这将解决自定义css与标签重叠,使用时对齐的问题input-lg并关注标签问题。

#6 楼

此“作弊”将带有glyphicon类将更改输入控件的字体的副作用。

Fiddle

<input class="form-control glyphicon" type="search" placeholder="&#57347;"/>


如果您想要消除副作用,可以删除“ glyphicon”类并添加以下CSS(可能会有更好的方式设置占位符伪元素的样式,而我仅在Chrome上进行了测试。)

小提琴

.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";
}


甚至更干净的解决方案:

小提琴

CSS

.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="&#57347; search" />
<input class="form-control glyphicon" type="text"  placeholder="&#57352; username" />
<input class="form-control glyphicon" type="password"  placeholder="&#57395; password" />


#7 楼

这是一个非引导解决方案,通过使用base64 URI编码将glyphicon的图像表示形式直接嵌入CSS中,可以简化标记。




 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"> 




#8 楼

如果您使用的是Fontawesome,则可以执行以下操作:

<input type="text" style="font-family:Arial, FontAwesome"  placeholder="&#xf007;" />


结果



Unicode的完整列表可以在完整的Font Awesome 4.6.3图标参考中找到

#9 楼




 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"> 




评论


很棒的“ jugad”,但这对设置自定义图标也非常有用。谢谢。

– Dhruv Raval
18年8月7日在11:54

#10 楼

这是通过在CSS中使用:before伪元素放置glyphicon来实现的另一种方法。
在jsFiddle中运行演示
对于此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>
 

使用此CSS(兼容Bootstrap 3.x和基于Webkit的浏览器)
 .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;
}
 

正如@Frizi所说,我们必须添加pointer-events: none;,以使光标不会干扰输入焦点。其他所有CSS规则都是用于居中并添加适当的间距。
结果:


#11 楼

您可以使用其Unicode HTML

,因此要添加用户图标,只需将&#xe008;添加到placeholder属性,或在任何需要的位置。

您可能想要检查此作弊项表格。

示例:




 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<input type="text" class="form-control" placeholder="&#xe008; placeholder..." style="font-family: 'Glyphicons Halflings', Arial">
<input type="text" class="form-control" value="&#xe008; value..." style="font-family: 'Glyphicons Halflings', Arial">
<input type="submit" class="btn btn-primary" value="&#xe008; submit-button" style="font-family: 'Glyphicons Halflings', Arial"> 






不要忘记使用以下代码将输入的字体设置为Glyphicon字体:font-family: 'Glyphicons Halflings', Arial,其中
Arial是字体输入中的常规文本。


#12 楼

经过Bootstrap 4的测试。

加上form-control,并将is-valid添加到其类中。请注意控件是如何变为绿色的,但更重要的是,请注意控件右侧的对勾图标吗?这就是我们想要的!

示例:




 .my-icon {
    padding-right: calc(1.5em + .75rem);
    background-image: url('https://use.fontawesome.com/releases/v5.8.2/svgs/regular/calendar-alt.svg');
    background-repeat: no-repeat;
    background-position: center right calc(.375em + .1875rem);
    background-size: calc(.75em + .375rem) calc(.75em + .375rem);
} 

 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<div class="container">
  <div class="col-md-5">
	<input type="text" id="date" class="form-control my-icon" placeholder="Select...">
  </div>
</div> 




评论


嗨,美好的一天,您从哪里获得此链接? use.fontawesome.com/releases/v5.8.2/svgs/regular/…对于其他图标,我无法获得相似的链接。

–约翰·雅马罗(Aljohn Yamaro)
20/08/27在13:19

啊,不记得了。但是,该技巧将起作用,您可以使用任何图标,只要它来自5.8.2版本即可。您可以在此处看到这些图标:fontawesome.com/icons?d=gallery&v=5.8.0,5.8.2

–伊戈尔K
20年8月28日在14:09

#13 楼

对于Bootstrap 3.3.5,对于这种情况,我也有一个决定:

<div class="col-sm-5">
    <label for="date">
       <input type="date" placeholder="Date" id="date" class="form-control">         
    </label>
    <i class="glyphicon glyphicon-calendar col-sm-pull-2"></i>
</div>


输入时,我会有这样的东西:


#14 楼

如果您足够幸运,只需要现代的浏览器,请尝试CSS转换翻译。这不需要包装器,并且可以进行自定义,以便您可以为input [type = number]留出更大的间距以适应输入微调器,或将其移到手柄的左侧。

    @import url("//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css");


.is-invalid {
  height: 30px;
  box-sizing: border-box;
}

.is-invalid-x {
  font-size:27px;
  vertical-align:middle;
  color: red;
  top: initial;
  transform: translateX(-100%);
}




 <h1>Tasty Field Validation Icons using only css transform</h1>
    <label>I am just a poor boy nobody loves me</label>
    <input class="is-invalid"><span class="glyphicon glyphicon-exclamation-sign is-invalid-x"></span>


http://codepen.io/anon/pen/RPRmNq?editors=110

#15 楼

您应该可以使用现有的引导程序类和一些自定义样式来执行此操作。

<form>
    <div class="input-prepend">
        <span class="add-on">
            <i class="icon-user"></i>
        </span>
        <input class="span2" id="prependedInput" type="text" placeholder="Username" style="background-color: #eeeeee;border-left: #eeeeee;">
    </div>         





编辑通过icon-user引用该图标类。此答案是在Bootstrap版本2时写的。您可以在以下页面上找到参考:http://getbootstrap.com/2.3.2/base-css.html#images

评论


在此答案中看不到bootstrap glyphicon参考

–柯比
2015年9月3日在22:35

@Kirby,通过icon-user类引用了该图标。此答案是在Bootstrap版本2时写的。您可以在以下页面上找到参考-getbootstrap.com/2.3.2/base-css.html#images

– YOOOEE
2015年9月5日下午0:15