CSS【实战】可编辑元素实现 placeholder -- contenteditable=“true“

效果


技术要点

HTML 中,placeholder 属性原生支持 <input><textarea> 等表单元素,但对于可编辑元素(如 contenteditable="true" 的普通元素),需要通过CSS 实现类似 placeholder 的效果。

  • 利用 CSS 伪类 :empty 检测元素是否为空
  • 使用 ::before 伪元素显示占位文本
  • 结合 :focus 伪类在元素获得焦点时隐藏占位文本

代码

html 复制代码
<script setup lang="ts"></script>

<template>
  <div
    class="editable box"
    contenteditable="true"
    data-placeholder="请输入内容..."
  ></div>
</template>
<style scoped>
.box {
  min-height: 80px;
  padding: 12px;
  border: 1px solid #ddd;
  border-radius: 6px;
  outline: none;
  transition: border-color 0.2s;
}

.box:focus {
  border-color: #3b82f6;
  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
}
/* 占位文本样式 */
.editable:empty::before {
  content: attr(data-placeholder);
  color: #9ca3af;
  pointer-events: none; /* 点击时不触发伪元素 */
}

/* 聚焦时隐藏占位文本 */
.editable:focus:empty::before {
  content: "";
}
</style>
相关推荐
elangyipi12328 分钟前
cursor: not-allowed 与 pointer-events: none 深度解析
css
七月十二1 小时前
类似渐变色弯曲border
css
ttod_qzstudio2 小时前
Vue 3 的魔法:用 v-bind() 让 CSS 爱上 TypeScript 常量
css·vue.js·typescript
咬人喵喵2 小时前
CSS Flexbox:拥有魔法的排版盒子
前端·css
yzp01122 小时前
css收集
前端·css
代码不停3 小时前
前端基础知识
javascript·css·html
sleeppingfrog4 小时前
konva实现canvas画图基础版本
前端·javascript·css
Bigger15 小时前
Coco AI 技术演进:Shadcn UI + Tailwind CSS v4.0 深度迁移指南 (踩坑实录)
前端·css·weui
八哥程序员18 小时前
从DOM结构到布局流:display: content的深度解析与实战应用
前端·css
前端达人1 天前
CSS终于不再是痛点:2026年这7个特性让你删掉一半JavaScript
开发语言·前端·javascript·css·ecmascript