聊一聊禁止文本复制一哥user-select【玩转CSS】

举报
叶一一 发表于 2023/05/26 12:21:56 2023/05/26
【摘要】 今天分享使用user-select如何实现文本禁止复制的方式,以及使用user-select实现实际开发中的不同需求。

前情提要

最近重温了一下MDN文档,果然温故而知新。

最近翻到CSS部分,刚把60多个伪类翻了一遍,准备翻翻别的。

它这个分类挺有趣的,以前看所有属性一大片,也没注意过,原来大家也可以分门别类。

今天翻阅基础用户界面相关的属性,大部分属性的花样连个手绢都绣不成,倒是最后这个user-select蛮有看头的。

禁止文本复制功能

禁止文本复制的实现很简单,为元素添加user-select属性,且属性值为none。

.select-none {
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}


user-select

user-select的作用是控制文本能否被选中。

属性

属性名

介绍

auto

auto 的具体取值是分条件的:

  • 如果元素是 ::before 或 ::after 伪元素,默认的属性值是 none
  • 如果元素是可编辑元素,默认的属性值是 contain
  • 如果此元素的父元素的 user-select 采用的属性值为 all,默认的属性值是all
  • 如果此元素的父元素的 user-select 采用的属性值为 none,默认的属性值是none
  • 其他条件,默认的属性值是text。

none

文本及子元素不可被选中。

text

文本可被选中。

all

单击即可选中文本。

当双击子元素或者上下文时,那么包含该子元素的最顶层元素也会被选中。

contain

允许在元素内选择。

但是,选区将被限制在该元素的边界之内。


实际开发中的不同需求

子元素样式重置之后可以被选中

实际开发中,总有那么几个需求要与众不同,要特立独行。

一段文本中,个别文本可以被复制也是有可能出现的。比如微信公众号,类似这种的特别文本。

这个时候将需要被复制的子元素的user-select属性值设置成text。

.select-none {
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.select-text {
  -moz-user-select: text;
  -webkit-user-select: text;
  -ms-user-select: text;
  user-select: text;
}
......
<div class='select-none'>
  我是无法被复制的
  <div class='select-text'>子元素设置user-select: text之后可以被选中</div>
</div>


::before/:after伪元素确实无法被选中

即便将::before的user-select设置为text,也无法被选中。

::before和::after的内容无法被选中的,已是不争的事实。

.select::before {
  content: '这里是::before';
  -moz-user-select: text;
  -webkit-user-select: text;
  -ms-user-select: text;
  user-select: text;
  display: block;
}


未完待续

user-select吃瓜告一段落。最大的收获就是,CSS能玩出花的技能又增加了。

我喜欢创作,每一幅作品都是我将想象用一只叫做“代码”的画笔,绘制而成。

当我寻找新的技术的时候,不是创意枯竭,而是我需要新的色彩。

而这个循序渐进的学习过程,虽然缓慢,但是积少成多、聚沙成塔。



作者:非职业「传道授业解惑」的开发者叶一一简介:「趣学前端」、「CSS畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。