我在HTML中有一个简单的input元素,它在输入前加上$
,这样就不会将其包含在输入值中。为此,我使用CSS,如下面的示例所示。
我遇到的问题是输入的焦点状态不适用于:before
之前的$
元素,由于可访问性原因,这不是很好。有没有办法用纯CSS做到这一点,所以当输入集中时,它也会使$
改变颜色吗?
input {
margin: 3em;
padding-left: 2em;
padding-top: 1em;
padding-bottom: 1em;
}
input:focus {
color: green;
}
.test {
position: relative;
background-color: #dedede;
display: inline;
}
.test:before {
content: '$';
position: absolute;
top: 0;
left: 40px;
z-index: 1;
}
<div class="test">
<input type="text"/>
</div>
答案 0 :(得分:1)
您可以在此处使用focus-within功能。但是:focus-within
不支持IE。
.test input {
padding-left: 2em;
padding-top: 1em;
padding-bottom: 1em;
}
.test input:focus,
.test input:focus + label {
color: green;
}
.test label {
display: block;
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 10px;
z-index: 1;
}
.test {
position: relative;
background-color: #dedede;
display: inline;
}
<div class="test">
<input id="input" type="text"/>
<label for="input">$</label>
</div>
当您需要使用“:before”选择器时;
.test input {
padding-left: 2em;
padding-top: 1em;
padding-bottom: 1em;
}
.test input:focus,
.test input:focus + label {
color: green;
}
.test label:before {
display: block;
content: '$';
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 10px;
z-index: 1;
}
.test {
position: relative;
background-color: #dedede;
display: inline;
}
<div class="test">
<input id="input" type="text"/>
<label for="input"></label>
</div>