我一直在寻找一个很好的Material Design输入教程 - 我发现here - ,但是当我尝试在我的代码中应用它时,下划线不匹配。
聚焦时的下划线比常规border-bottom
短。
以下是我的意思的实例:Codepen
这是代码:
input {
font-size: 18px;
padding: 10px 10px 10px 5px;
display: block;
width: 300px;
border: none;
border-bottom: 1px solid #757575;
}
.bar {
position: relative;
display: block;
width: 300px;
}
.bar:before,
.bar:after {
content: '';
height: 2px;
width: 0;
bottom: 1px;
position: absolute;
background: rgba(37, 116, 169, 0.50);
transition: 0.2s ease all;
}
.bar:before {
left: 50%;
}
.bar:after {
right: 50%;
}
/* active state */
input:focus ~ .bar:before,
input:focus ~ .bar:after {
width: 50%;
}
<form>
<div class="group">
<input type="text" required>
<span class="bar"></span>
<label>Name</label>
</div>
<div class="group">
<input type="text" required>
<span class="bar"></span>
<label>Email</label>
</div>
</form>
有谁知道为什么会这样?
答案 0 :(得分:0)
您需要在输入元素上设置box-sizing:border-box;
:
input {
font-size: 18px;
padding: 10px 10px 10px 5px;
display: block;
width: 300px;
border: none;
border-bottom: 1px solid #757575;
box-sizing:border-box;
outline:none;
}
.bar {
position: relative;
display: block;
width: 300px;
}
.bar:before,
.bar:after {
content: '';
height: 2px;
width: 0;
bottom: 1px;
position: absolute;
background: rgba(37, 116, 169, 0.50);
transition: 0.2s ease all;
}
.bar:before {
left: 50%;
}
.bar:after {
right: 50%;
}
/* active state */
input:focus ~ .bar:before,
input:focus ~ .bar:after {
width: 50%;
}
&#13;
<form>
<div class="group">
<input type="text" required>
<span class="bar"></span>
<label>Name</label>
</div>
<div class="group">
<input type="text" required>
<span class="bar"></span>
<label>Email</label>
</div>
</form>
&#13;
那,或者将跨度的宽度设置为大约315px,当你考虑边界和填充时,它应该与输入的宽度相匹配。