我在输入文件中做了一个浮动标签,如下所示。而且它的工作正常。但是当我删除required
输入字段时,浮动标签不起作用(尽管我不需要required
字段)。请提出一些解决此问题的方法。
input:focus~.floating-label,
input:not(:focus):valid~.floating-label {
top: 6px;
bottom: 12px;
left: 20px;
font-size: 11px;
opacity: 1;
}
.floating-label {
position: absolute;
pointer-events: none;
left: 20px;
top: 18px;
text-transform: uppercase;
transition: 0.2s ease all;
color: #b2b2b2;
}

<input type="text" id="floating_name" value="" required/>
<span class="floating-label">Enter</span>
&#13;
答案 0 :(得分:5)
选择器
使用input:focus
在获得焦点时选择输入,如果input:not(:focus):valid
不是焦点,则选择器valid input
选择输入。required attribute
并且不在其中输入任何值时A。:
1)在对焦前和失去焦点时:没有选择任何东西。(原始状态)
2)焦点输入无效后,用
删除input:focus
选择。required
属性时B :
1)在使用
input:not(:focus):valid
进行焦点选择之前。2)使用
input:focus
进行焦点选择后。因此,输入将永远被选中,而
.floating-label
将不会返回到原始状态。
在你的问题中,你说:&#34;我不需要所需的文件&#34;
因此,请删除
input:not(:focus):valid~.floating-label
。
完整代码:
input:focus ~ .floating-label {
top: 6px;
bottom: 12px;
left: 20px;
font-size: 11px;
opacity: 1;
}
.floating-label {
position: absolute;
pointer-events: none;
left: 20px;
top: 18px;
text-transform: uppercase;
transition: 0.2s ease all;
color: #b2b2b2;
}
&#13;
<input type="text" id="floating_name" value="">
<span class="floating-label">Enter</span>
&#13;
答案 1 :(得分:2)
:valid
选择器仅适用于有限制的表单元素。当您删除CSS的required
部分不再适用时。我删除了input:not(:focus):valid ~ .floating-label
,然后再次运行。
input:focus~.floating-label {
top: 6px;
bottom: 12px;
left: 20px;
font-size: 11px;
opacity: 1;
}
.floating-label {
position: absolute;
pointer-events: none;
left: 20px;
top: 18px;
text-transform: uppercase;
transition: 0.2s ease all;
color: #b2b2b2;
}
&#13;
<input type="text" id="floating_name" value="" />
<span class="floating-label">Enter</span>
&#13;
答案 2 :(得分:1)
请尝试另一种方法,该方法可以没有'required'属性
使用':placeholder-shown'
:显示占位符的CSS伪类表示当前正在显示占位符文本的任何input或textarea元素。
因此有2种情况下标签会浮动
还有1个标签不浮动的情况
.form-group {
position: relative;
margin-bottom: 1.5rem;
}
input:placeholder-shown + .form-control-placeholder{
margin-top:0%;
}
input + .form-control-placeholder ,
.form-control:focus + .form-control-placeholder{
position: absolute;
transition: all 200ms;
margin-left:-25%;
margin-top:-3%;
}
<br><br>
<div class="form-group">
<input type="text" id="name" class="form-control" placeholder=" " >
<label class="form-control-placeholder" for="name">Name</label>
</div>
答案 3 :(得分:0)
function checkForInput(element) {
// element is passed to the function ^
const $label = $(element).siblings('label');
if ($(element).val().length > 0) {
$label.addClass('input-has-value');
}
else {
$label.removeClass('input-has-value');
}
}
// The lines below are executed on page load
$('input').each(function () {
checkForInput(this);
});
// The lines below (inside) are executed on change & keyup
$('input').on('change keyup', function () {
checkForInput(this);
});
$('input').focus(function () {
const $label = $(this).siblings('label');
$label.addClass('input-has-value');
});
答案 4 :(得分:0)
尝试一下。使用input:not(:placeholder-shown)应该可以正常工作:
input:focus ~ .floating-label,
input:not(:placeholder-shown) ~ .floating-label{
top: 8px;
bottom: 10px;
left: 20px;
font-size: 11px;
opacity: 1;
}
.inputText {
font-size: 14px;
width: 200px;
height: 35px;
}
.floating-label {
position: absolute;
pointer-events: none;
left: 20px;
top: 18px;
transition: 0.2s ease all;
}
<div>
<input placeholder="" type="text" class="inputText" />
<span class="floating-label">Your email address</span>
</div>