没有效果,输入内容后占位符仍会消失
时间: 2024-12-11 21:41:44 浏览: 12
看起来之前的解决方案并没有完全符合您的需求,因为您提到即使输入内容后占位符也会消失。为了保持占位符始终显示,当用户开始输入文字时,占位符应该不再响应`:not(:placeholder-shown)`伪类。这是更新后的代码:
```css
/* 用于处理placeholder的样式 */
.has-placeholder {
position: relative;
}
.has-placeholder::placeholder {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
opacity: 1;
transition: all 0.3s ease;
}
/* 当输入框获得焦点时,占位符移到左上角并降透明度 */
.has-placeholder:focus::placeholder {
top: 0;
left: 0;
transform: none;
opacity: 0.5;
}
/* 非空情况下,占位符保持不变 */
.has-placeholder:not(:placeholder-shown) {
&::placeholder {
display: none; /* 这里隐藏占位符,当输入框内有内容时 */
}
}
/* 如果输入框是可编辑的内容区域,例如textarea,那么当内容为空时显示占位符 */
.has-placeholder[contenteditable]:empty::placeholder {
display: block;
}
```
在这个版本中,我们添加了一个新的选择器`.has-placeholder:not(:placeholder-shown)`,当输入框有内容时,将其内部的占位符隐藏(`display: none`)。对于`<textarea>`或其他可编辑区域,如果内容为空,就显示占位符。这样,无论何时只要输入框内有内容,占位符就不会消失。
阅读全文