html
中的contenteditable
,他是一个全局属性,可以大致理解为"可以使一个元素处于可编辑状态",像极了textarea
,不过还是存在许多不足跟问题,比如没有change
钩子等,本文不作深入探讨❌
开胃
使一个div
可以进行内容编辑:
<div contenteditable>点击我进行编辑</div>
乍一看,好像很普通,但是它可以解决一个
textarea
的一个痛点,那就是可以自适应高度,textarea
可不行 ❕
正文
假如... 把该属性加在style
元素上呢😍,是不是就可以在页面上直接编写样式并且自带"热更新"?因此有如下代码:
<head>
<style contenteditable>
html {
background-color: #f1f1f1;
}
</style>
</head>
然后激动的切到页面上看效果,发现空空如也:
经过一番研究,想要在页面上编辑style
元素,必须要满足以下两点:
-
style
元素必须放在body
元素内 -
style
元素要设置display: block;
于是代码变成了这样:
<body>
<style contenteditable style="display: block;">
html {
background-color: #fff;
}
</style>
</body>
于是就有了以下场景:
缺点
存在的缺点很明显,我也很刻意的去避开,那就是代码无法换行,因为回车后,内容会新增div
元素,破坏了原有的文本结构:
解决
网上冲浪查资料后,发现了一个css
属性 - user-modify
,可取值为以下四个:
read-only
read-write
write-only
read-write-plaintext-only
我们取第四个值就行,定义元素可以被编辑且只可输入纯文本
,因此回车也就不会产生div
👌,改造后的代码如下:
<style class="textarea" style="display: block; -webkit-user-modify: read-write-plaintext-only;">
html {
background-color: #fff;
}
</style>
于是就有了以下场景:
细心的人又发现了,我又刻意的不输入Tap制表符
,是的没错,因为按Tap键
会跳焦!所以应该需要用脚本去处理,具体网上冲浪一大堆哈 💦
总结
麦当劳的家有金桶挺好吃的
最后
本文到此结束,希望以上内容对你有些许帮助,如若喜欢请记得点个赞
跟关注
哦 💨
微信公众号
「前端宇宙情报局」
,将不定时更新最新、实用的前端技巧/技术性文章,欢迎关注,一起学习 🌘