移到文本区域之外时,文本区域的占位符不可见

迈克尔·苏

我一直在遵循这个小教程,将动画添加到输入字段的占位符。当输入字段被聚焦时,动画将占位符移出输入字段。

该动画在输入字段上可以完美工作,并且占位符在输入字段上方可见,但是当我将此动画添加到文本区域时,占位符一旦通过文本区域的边缘就会消失。

 input,
textarea {
  margin: 30px 0 0 0;
}

input::-webkit-input-placeholder,
textarea::-webkit-input-placeholder {
 -webkit-transition: all 0.3s ease-in-out;
 transition: all 0.3s ease-in-out;
}

input:focus::-webkit-input-placeholder,
textarea:focus::-webkit-input-placeholder{ 
 -webkit-transform: translateY(-20px);
 transform: translateY(-20px);
 visibility: visible !important;
}
<input type="text" id="edit-field-name-0-value" value="" size="60" maxlength="255" placeholder="Name *" required="required">
<textarea rows="8" cols="60" placeholder="Message *" required="required"></textarea>

这是一个JSFiddle来演示该问题。

有谁知道我也可以在上面显示文本区域的占位符?

特里

@somethinghere的评论所提到,当输入字段为非空时,您将遇到可访问性/可用性问题,这将删除占位符。尽管与原始方法有所不同,但结合使用CSS定位,HTML标签和flexbox可以达到相同的效果,而不会在填充每个字段时丢失每个字段的指示符。

方法很简单:

  • <div>元素中包装输入和标签元素。标签必须出现相邻兄弟选择器的输入之后+才能起作用
  • 使用flexbox通过使用反转列方向,将标签放置在输入之前flex-direction: column-reverse这种方法的优点是您可以根据需要对元素进行重新排序,例如在移动屏幕等上。
  • 使用+通过改变其移动标签top时附带的输入/ textarea的是在焦点房地产

这是一个概念验证示例:

div {
  display: flex;
  flex-direction: column-reverse;
  }
input,
textarea {
  display: block;
  font-family: 'Arial';
  font-size: 1em;
}
label {
  display: block;
  font-family: 'Arial';
  font-size: 1em;
  position: relative;
  top: 1.5em;
  left: .35em;
  transition: all .5s ease-in-out;
}
input:focus + label,
textarea:focus + label {
  top: 0;
  }
<div>
  <input type="text" id="edit-field-name-0-value" value="" size="60" maxlength="255" placeholder="Name *" required="required">
  <label for="edit-field-name-0-value">Name *</label>
</div>
<div>
  <textarea rows="8" cols="60" placeholder="Message *" required="required" id="textarea0"></textarea>
  <label for="textarea0">Message *</label>
</div>


如果要使用CSS变换而不是top定位,则也可以:

div {
  display: flex;
  flex-direction: column-reverse;
  }
input,
textarea {
  display: block;
  font-family: 'Arial';
  font-size: 1em;
}
label {
  display: block;
  font-family: 'Arial';
  font-size: 1em;
  position: relative;
  transform: translateY(1.5em);
  left: .35em;
  transition: all .5s ease-in-out;
}
input:focus + label,
textarea:focus + label {
  transform: translateY(0);
  }
<div>
  <input type="text" id="edit-field-name-0-value" value="" size="60" maxlength="255" placeholder="Name *" required="required">
  <label for="edit-field-name-0-value">Name *</label>
</div>
<div>
  <textarea rows="8" cols="60" placeholder="Message *" required="required" id="textarea0"></textarea>
  <label for="textarea0">Message *</label>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章