材料设计输入 - 焦点效果中的错误

时间:2015-07-07 14:17:57

标签: css3 material-design

我一直在寻找一个很好的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>

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

您需要在输入元素上设置box-sizing:border-box;

&#13;
&#13;
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;
&#13;
&#13;

那,或者将跨度的宽度设置为大约315px,当你考虑边界和填充时,它应该与输入的宽度相匹配。