javascript - 带标签的 Css 文本输入效果

标签 javascript jquery html css

我有一个文本输入字段,其中嵌套了一些标签文本。当用户单击以在该字段中键入内容时,在焦点上我正在使标签文本稍微缩放并将其移向文本字段的顶部. 一切正常,直到您移至下一个输入字段。然后你刚刚输入一个值的字段变回默认的比例和位置。但我希望它在用户输入内容后保持在那里。任何帮助将不胜感激。

form {
  width: 100%;
  text-align: center;
  padding: 45px 0;
}
form div {
  background: transparent;
  height: 55px;
  width: 100%;
  margin-bottom: 55px;
  position: relative;
}
input {
  width: 80%;
  height: 78px;
  border-radius: 25px;
  border-top: 4px solid #0275F5;
  border-right: 4px solid #0275F5;
  border-left: 4px solid #0275F5;
  border-bottom: 4px solid #0275F5;
  outline: 0;
  font-size: 1.6em;
  font-weight: bold;
  display: block;
  margin: 0 auto;
  text-align: center;
}
.formHeading {
  font-size: 2.6em;
  color: #0275F5;
  text-transform: uppercase;
  text-align: center;
  margin-top: 0;
}
form div label {
  position: absolute;
  bottom: 0;
  left: 0;
  padding: 0 0.25em;
  width: 100%;
  height: calc(100% - 1em);
  text-align: center;
  pointer-events: none;
  transition: .25s;
  text-transform: uppercase;
  font-size: 1.6em;
}
input:focus + label {
  transform: translate3d(0, -.8em, 0) scale3d(0.55, 0.55, 1);
}
<div id="wrapper">
  <h1 class="formHeading">Sign Up Form</h1>
  <form action="index.html" method="post">
    <div>
      <input type="text" name="user_name" id="name">
      <label>Name</label>
    </div>
    <div>
      <input type="email" name="user_email" id="email">
      <label>Email Address</label>
    </div>
    <div>
      <input type="password" name="user_password" id="password">
      <label>Password</label>
    </div>
    <div>
      <input type="text" name="user_city" id="city">
      <label>City</label>
    </div>
    <div>
      <input type="text" name="user_gender" id="gender">
      <label>Gender</label>
    </div>
  </form>
</div>

最佳答案

我不认为没有 javascript 就可以做到这一点(编辑:我看到你添加了 ,所以这个要求应该不是问题)。据我所知,没有办法匹配 CSS 中已输入内容的输入,因此您需要 JS 为这些输入添加一个类。

这是一个使用 jQuery 的解决方案草案,但您也可以使用纯 JS 来完成。

$('input').blur(function() {
  console.log($(this).val());
  if ($(this).val() !== '') {
    $(this).addClass('hasvalue')
  } else {
    $(this).removeClass('hasvalue');
  }
});
form {
  width: 100%;
  text-align: center;
  padding: 45px 0;
}
form div {
  background: transparent;
  height: 55px;
  width: 100%;
  margin-bottom: 55px;
  position: relative;
}
input {
  width: 80%;
  height: 78px;
  border-radius: 25px;
  border-top: 4px solid #0275F5;
  border-right: 4px solid #0275F5;
  border-left: 4px solid #0275F5;
  border-bottom: 4px solid #0275F5;
  outline: 0;
  font-size: 1.6em;
  font-weight: bold;
  display: block;
  margin: 0 auto;
  text-align: center;
}
.formHeading {
  font-size: 2.6em;
  color: #0275F5;
  text-transform: uppercase;
  text-align: center;
  margin-top: 0;
}
form div label {
  position: absolute;
  bottom: 0;
  left: 0;
  padding: 0 0.25em;
  width: 100%;
  height: calc(100% - 1em);
  text-align: center;
  pointer-events: none;
  transition: .25s;
  text-transform: uppercase;
  font-size: 1.6em;
}
input:focus + label,
input.hasvalue + label {
  transform: translate3d(0, -.8em, 0) scale3d(0.55, 0.55, 1);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="wrapper">
  <h1 class="formHeading">Sign Up Form</h1>
  <form action="index.html" method="post">
    <div>
      <input type="text" name="user_name" id="name">
      <label>Name</label>
    </div>
    <div>
      <input type="email" name="user_email" id="email">
      <label>Email Address</label>
    </div>
    <div>
      <input type="password" name="user_password" id="password">
      <label>Password</label>
    </div>
    <div>
      <input type="text" name="user_city" id="city">
      <label>City</label>
    </div>
    <div>
      <input type="text" name="user_gender" id="gender">
      <label>Gender</label>
    </div>
  </form>
</div>

关于javascript - 带标签的 Css 文本输入效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35938220/

相关文章:

javascript - 如何返回不匹配的单词?

html - 达到最大长度时如何向输入元素添加样式?

html - 如何阻止机器人抓取或索引 Angular 应用程序

javascript - 无法获取要打印的第一个数组元素

javascript - 使用 knockout 自定义绑定(bind)保存 wpColorPicker 值

jquery - 在循环中使用jquery滑动div

javascript - 如何在右键单击时启用网络浏览器的默认上下文菜单?

css - 全屏视频 - 不显示全屏

javascript - 如何在preact中创建辅助(高阶组件)?

jquery - 从 iframe 中重新加载父窗口