我有一个<input>
元素。我想在其前面加上一个搜索图标,使用:before选择器,包括我创建的SVG字体。
.icon-search:before {
content: "\f109";
text-indent: -2em;
}
我的问题是,伪选择器:before
似乎不适用于<input>
你能告诉我如何以最优雅的方式完成这项工作吗?
这就是我完成后我想要的样子。
答案 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