1. 为什么要自定义呢?
原生的 input 和 textarea 在某些特定场景下存在功能或兼容性限制,因此使用 div 元素自定义实现,突破原生输入框在样式、功能、兼容性上的限制。
1、解决火狐浏览器换行问题
某些版本的火狐浏览器中,原生 textarea 存在回车不换行而显示为空格的问题。这种行为在开发文本编辑器或多行输入框时造成不便。
2、提供更灵活的样式和内容格式
原生 input 和 textarea 元素样式定制有限,比如:无法直接改变 textarea 的行高或在内容中插入动态元素,如:标签或图标。原生输入框的内容只能是纯文本,难以直接支持复杂的文本格式,如:加粗、斜体或自定义样式。
3、跨平台或多浏览器兼容
不同的浏览器和设备对原生输入框的支持程度有所不同,尤其是一些老旧浏览器或特定版本的浏览器可能会对 input 和 textarea 产生不同的渲染结果。
2. 实现方法
contenteditable = "true" 是一个 HTML 属性,能够将 div 或其他元素变成一个可编辑的区域。用户可以输入文本,而浏览器会处理光标、输入等基本交互行为。通过监听相应的事件,可以让这个可编辑的 div 元素实现更复杂的行为和功能。
2.1 实现带 placeholder 的输入框
div 本身并没有内建的 placeholder 属性,但可以使用 CSS 和 JavaScript 来模拟该功能。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8&#