html - 如何使用纯 CSS 创建动画表单占位符

标签 html css twitter-bootstrap bootstrap-4

<分区>

我正在使用 Bootstrap-Vue 构建一个表单,我希望占位符文本具有动画效果,以便它位于使用 CSS Transitions 的输入之上。

我目前有这段由 Bootstrap-Vue 生成的代码:

<form class="form" _lpchecked="1">
  <div role="group" class="form-group">

    <label for="year" class="d-block form-control-placeholder">Year</label>

    <div>
      <input id="year" name="year" type="text" class="form-control">
    </div>

  </div>
</form>

我无法更改上述标记,因为 Bootstrap-Vue 使用组件进行输入并为我生成标记的表单组。因此,在 StackOverflow 上提出的其他类似问题无法回答我的问题。

至于我的 CSS,它看起来像这样:

.form-group {
  position: relative;
  margin-bottom: 1.5rem;
}

.form-control-placeholder {
  position: absolute;
  top: 0;
  padding: 7px 0 0 13px;
  transition: all 200ms;
  opacity: 0.5;
  color: red;
}


.form-control:focus + .form-control-placeholder,
.form-control:valid + .form-control-placeholder {
  font-size: 75%;
  transform: translate3d(0, -100%, 0);
  opacity: 1;
}

上面代码的Codepen在这里:https://codepen.io/Canvasandcode/pen/OJJZLmM

最佳答案

您的代码非常接近所需的方法!

但是您只需要进行一些小调整即可使其正常工作;

首先,删除<div> <input> 外的 wrapper 使它们相邻

切换<input><label>所以.class:focus/valid + .class CSS 选择器可以工作。 原因是因为你写 + 的方式指的是下一个相邻元素。

然后添加required="required"给你的<input>为了使用 CSS :valid .

就是这样!干杯。以下代码片段只是根据您自己的代码进行的更改。

.form-group {
  position: relative;
  margin-bottom: 1.5rem;
}

.form-control-placeholder {
  position: absolute;
  top: 0;
  padding: 7px 0 0 13px;
  transition: all 200ms;
  opacity: 0.5;
  color: red;
}

.form-control:focus + .form-control-placeholder,
.form-control:valid + .form-control-placeholder {
  font-size: 75%;
  transform: translate3d(0, -100%, 0);
  opacity: 1;
}
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">


<div class='container m-5'>
<form class="form" _lpchecked="1">
  <div role="group" class="form-group">
    <input id="year" name="year" type="text" class="form-control" required="required">
    <label for="year" class="d-block form-control-placeholder" required="required">Year</label>
  </div>
</form>
  </div

关于html - 如何使用纯 CSS 创建动画表单占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58735327/

上一篇:html - 如果需要,带滚动条的 Bootstrap 列全高

下一篇:css - 第一个元素应该占用一个空闲空间,下一个元素应该有固定的大小

相关文章:

css - 定位 CSS 调用框以正确对齐

html - Divshot 是否导入外部 Bootstrap 模板?

javascript - textarea.val() 值改变但不显示在页面上

php - 如何从 Bootstrap Modal 表单获取值?

php - 如何将 PHP 变量添加到我的 Jquery 图像 slider 中?

javascript - 将 div 的子级插入 javascript 数组

css - 桌面的 Bootstrap 固定宽度和其他设备的流动宽度

css - 在 Bootstrap 3 面板标题中嵌入搜索表单

css 100%宽度div不占用父级的整个宽度

html - Bootstrap CSS - 视频页面 - 令人头疼的布局