通过以下方式添加图标:<input />元素

时间:2015-03-23 16:34:08

标签: html css css3 svg

我有一个<input>元素。我想在其前面加上一个搜索图标,使用:before选择器,包括我创建的SVG字体。

.icon-search:before { 
  content: "\f109"; 
  text-indent: -2em;
}

我的问题是,伪选择器:before似乎不适用于<input> 你能告诉我如何以最优雅的方式完成这项工作吗?

这就是我完成后我想要的样子。

enter image description here

3 个答案:

答案 0 :(得分:1)

以下是实现此目的的一种方法:http://jsfiddle.net/n9gjb3kr/ 您需要将input放入div

<div class="icon-search"><input type="text"></input></div>

.icon-search:before { 
    content: "\f109"; 
    position: absolute;
    left: 0;
    top: 0;
    height: 24px;
    width: 24px;
    margin-left: .5em;
    width: 0;
    overflow: visible;
    display: inline-block;
    line-height: 24px;
    z-index: 1;
}

.icon-search { 
    position: relative;
    line-height: 24px;
}

.icon-search > input { 
    border-radius: 12px;
    height: 24px;
    border: 1px solid black;
    margin: 0;
    padding: 0;
    padding-left: 32px;
}

答案 1 :(得分:1)

之前/之后的伪元素包含在元素中,但输入不能包含,所以你必须使用另一个选择器,如span或div。这是一个类似于bootstrap的实现......

<强> FIDDLE

HTML:

<div class="wrapper">
    <div class="inputgroup"> <span class="innericon searchicon"></span>

        <input type="text" class="search" placeholder="search..." />
    </div>
</div>

CSS:

body {
    color: gray;
}
.wrapper {
    margin: 20px auto;
    width: 40%;
}
* {
    box-sizing: border-box;
}
.inputgroup {
    position:relative;
    display: inline-block;
    height: 30px;
    line-height: 30px;
    vertical-align: middle;
}
.search {
    border-radius: 8px;
    height: 30px;
    line-height: 30px;
    padding: 3px 6px 3px 32px;
    border: none;
    font-size: 13px;
    display: inline-block;
    vertical-align: middle;
    border: 1px solid #CCC;
    box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.075) inset;
}
.inputgroup .innericon {
    position: absolute;
    top: 4px;
    left: 8px;
    z-index: 2;
    display: block;
    text-align: center;
    pointer-events: none;
}

.searchicon:before {
   content: "\f109"; 
}

答案 2 :(得分:0)

您可以将输入包装到span中,使用position:relative和设置范围 然后添加到输入和图标position:absolute并使用边距和z-index来创建相同的效果。如果您使用响应式设计考虑范围和输入的正确方式,这对于响应也非常可靠。

使用评论中已经提到的jquery