html - 输入和带有模式的 float 标签

标签 html css

我有一个输入标签的问题,并标记它的 float 。一切正常读取,但当我在输入中插入一个模式时,如果此模式不满意,则不会实现 float 效果,并且文本输入与标签重叠。我希望我是清楚的,对不起我的英语。

这是CSS

.card .input-container {
  position: relative;
  margin: 0 60px 50px;
}
.card .input-container input {
  outline: none;
  z-index: 1;
  position: relative;
  background: none;
  width: 100%;
  height: 60px;
  border: 0;
  color: #212121;
  font-size: 24px;
  font-weight: 400;
}
.card .input-container input:focus ~ label {
  color: #9d9d9d;
  -webkit-transform: translate(-12%, -50%) scale(0.75);
  transform: translate(-12%, -50%) scale(0.75);
}
.card .input-container input:focus ~ .bar:before, .card .input-container input:focus ~ .bar:after {
  width: 50%;
}
.card .input-container input:valid ~ label {
  color: #9d9d9d;
  -webkit-transform: translate(-12%, -50%) scale(0.75);
  transform: translate(-12%, -50%) scale(0.75);
}
.card .input-container label {
  position: absolute;
  top: 0;
  left: 0;
  color: #757575;
  font-size: 24px;
  font-weight: 300;
  line-height: 60px;
  -webkit-transition: 0.2s ease;
  transition: 0.2s ease;
}
.card .input-container .bar {
  position: absolute;
  left: 0;
  bottom: 0;
  background: #757575;
  width: 100%;
  height: 1px;
}
.card .input-container .bar:before, .card .input-container .bar:after {
  content: '';
  position: absolute;
  background: #ed2553;
  width: 0;
  height: 2px;
  -webkit-transition: .2s ease;
  transition: .2s ease;
}
.card .input-container .bar:before {
  left: 50%;
}
.card .input-container .bar:after {
  right: 50%;
}
<div class="card">
  <h1 class="title">Login</h1>
  <form>
    <div class="input-container">
      <input type="text" id="Username" required="required" pattern=".{3,}"  title="3 characters minimum" />
      <label for="Username">Username</label>
      <div class="bar"></div>
    </div>
  </form>
</div>

最佳答案

如果您想保持动画完整,我会建议您这样做。检查输入的有效性,应该使用 JavaScript 完成并进行输入,只是必需的。完全删除 pattern 并给出如下内容:

.card .input-container {
  position: relative;
  margin: 0 60px 50px;
}
.card .input-container input {
  outline: none;
  z-index: 1;
  position: relative;
  background: none;
  width: 100%;
  height: 60px;
  border: 0;
  color: #212121;
  font-size: 24px;
  font-weight: 400;
}
.card .input-container input:focus ~ label {
  color: #9d9d9d;
  -webkit-transform: translate(-12%, -50%) scale(0.75);
  transform: translate(-12%, -50%) scale(0.75);
}
.card .input-container input:focus ~ .bar:before, .card .input-container input:focus ~ .bar:after {
  width: 50%;
}
.card .input-container input:valid ~ label {
  color: #9d9d9d;
  -webkit-transform: translate(-12%, -50%) scale(0.75);
  transform: translate(-12%, -50%) scale(0.75);
}
.card .input-container label {
  position: absolute;
  top: 0;
  left: 0;
  color: #757575;
  font-size: 24px;
  font-weight: 300;
  line-height: 60px;
  -webkit-transition: 0.2s ease;
  transition: 0.2s ease;
}
.card .input-container .bar {
  position: absolute;
  left: 0;
  bottom: 0;
  background: #757575;
  width: 100%;
  height: 1px;
}
.card .input-container .bar:before, .card .input-container .bar:after {
  content: '';
  position: absolute;
  background: #ed2553;
  width: 0;
  height: 2px;
  -webkit-transition: .2s ease;
  transition: .2s ease;
}
.card .input-container .bar:before {
  left: 50%;
}
.card .input-container .bar:after {
  right: 50%;
}
<div class="card">
  <h1 class="title">Login</h1>
  <form>
    <div class="input-container">
      <input type="text" id="Username" required="required"  title="3 characters minimum" />
      <label for="Username">Username</label>
      <div class="bar"></div>
    </div>
  </form>
</div>

或者您可以使用 JavaScript/jQuery 将新类添加到 input 来制作动画。一个纯 CSS 的解决方案可能无法同时拥有这两者。 我说可能不会,因为我想不出一个。让我们看看其他人是否提出了解决方案。


使用 jQuery 的替代解决方案:

$(function () {
  $("input").keyup(function () {
    if ($(this).val().trim().length > 0)
      $(this).addClass("non-empty");
    else
      $(this).removeClass("non-empty");
  });
});
.card .input-container {
  position: relative;
  margin: 0 60px 50px;
}
.card .input-container input {
  outline: none;
  z-index: 1;
  position: relative;
  background: none;
  width: 100%;
  height: 60px;
  border: 0;
  color: #212121;
  font-size: 24px;
  font-weight: 400;
}
.card .input-container input:focus ~ label {
  color: #9d9d9d;
  -webkit-transform: translate(-12%, -50%) scale(0.75);
  transform: translate(-12%, -50%) scale(0.75);
}
.card .input-container input:focus ~ .bar:before, .card .input-container input:focus ~ .bar:after {
  width: 50%;
}
.card .input-container input.non-empty ~ label {
  color: #9d9d9d;
  -webkit-transform: translate(-12%, -50%) scale(0.75);
  transform: translate(-12%, -50%) scale(0.75);
}
.card .input-container label {
  position: absolute;
  top: 0;
  left: 0;
  color: #757575;
  font-size: 24px;
  font-weight: 300;
  line-height: 60px;
  -webkit-transition: 0.2s ease;
  transition: 0.2s ease;
}
.card .input-container .bar {
  position: absolute;
  left: 0;
  bottom: 0;
  background: #757575;
  width: 100%;
  height: 1px;
}
.card .input-container .bar:before, .card .input-container .bar:after {
  content: '';
  position: absolute;
  background: #ed2553;
  width: 0;
  height: 2px;
  -webkit-transition: .2s ease;
  transition: .2s ease;
}
.card .input-container .bar:before {
  left: 50%;
}
.card .input-container .bar:after {
  right: 50%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="card">
  <h1 class="title">Login</h1>
  <form>
    <div class="input-container">
      <input type="text" id="Username" required="required" pattern=".{3,}"  title="3 characters minimum" />
      <label for="Username">Username</label>
      <div class="bar"></div>
    </div>
  </form>
</div>

关于html - 输入和带有模式的 float 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34592554/

相关文章:

css - 为什么我的 Agency FB 字体在 Firefox 和 Chrome 中可以正常工作,但在 IE 中却不行。 www.serialquilting.com

html - 为什么我删除这些元素时会出现空白?

css - Chrome 不缓存 css 文件。缓存适用于 .js/.png 文件。

javascript - 如何突出显示(闪烁)具有某些 bling 功能的 html 链接上标文本?

javascript - 从 iframe 获取文本并设置范围

html - 是否可以在给定的字符串长度上触发 html5 数据列表?

html - 如何堆叠两个 div 容器都响应地占用屏幕大小

php - 隐藏html5/javascript代码的方法

html - div 没有调整到相同的高度

html - 文本周围的 CSS 框,设置框大小