contenteditable跟user-modify还能这么玩🌚

html中的contenteditable,他是一个全局属性,可以大致理解为"可以使一个元素处于可编辑状态",像极了textarea,不过还是存在许多不足跟问题,比如没有change钩子等,本文不作深入探讨❌

开胃

使一个div可以进行内容编辑:

<div contenteditable>点击我进行编辑</div>

image

乍一看,好像很普通,但是它可以解决一个textarea的一个痛点,那就是可以自适应高度,textarea可不行 ❕

正文

假如... 把该属性加在style元素上呢😍,是不是就可以在页面上直接编写样式并且自带"热更新"?因此有如下代码:

<head>
  <style contenteditable>
    html {
      background-color: #f1f1f1;
    }
  </style>
</head>

然后激动的切到页面上看效果,发现空空如也:


image

经过一番研究,想要在页面上编辑style元素,必须要满足以下两点:

  • style元素必须放在body元素内
  • style元素要设置display: block;

于是代码变成了这样:

<body>
  <style contenteditable style="display: block;">
    html {
      background-color: #fff;
    }
  </style>
</body>

于是就有了以下场景:

image

缺点

存在的缺点很明显,我也很刻意的去避开,那就是代码无法换行,因为回车后,内容会新增div元素,破坏了原有的文本结构:

image
image

解决

网上冲浪查资料后,发现了一个css属性 - user-modify,可取值为以下四个:

  • read-only
  • read-write
  • write-only
  • read-write-plaintext-only

CSS user-modify属性行为表现测试实例页面

我们取第四个值就行,定义元素可以被编辑且只可输入纯文本,因此回车也就不会产生div👌,改造后的代码如下:

<style class="textarea" style="display: block; -webkit-user-modify: read-write-plaintext-only;">
  html {
    background-color: #fff;
  }
</style>

于是就有了以下场景:


image

细心的人又发现了,我又刻意的不输入Tap制表符,是的没错,因为按Tap键会跳焦!所以应该需要用脚本去处理,具体网上冲浪一大堆哈 💦

总结

麦当劳的家有金桶挺好吃的

最后

本文到此结束,希望以上内容对你有些许帮助,如若喜欢请记得点个关注哦 💨

image

微信公众号「前端宇宙情报局」,将不定时更新最新、实用的前端技巧/技术性文章,欢迎关注,一起学习 🌘

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,124评论 0 3
  • Mobile Web Favorites 参与贡献 移动前端开发收藏夹,欢迎使用Issues以及 Pull Req...
    柴东啊阅读 4,227评论 0 2
  • CSS参考手册 一、初识CSS3 1.1 CSS是什么 CSS3在CSS2.1的基础上增加了很多强大的新功能。目前...
    没汁帅阅读 9,454评论 1 13
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 9,721评论 0 0
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 12,081评论 2 19