纯CSS如何禁止用户复制网页的内容


Posted in HTML / CSS onNovember 01, 2021

前言

在敲打自己的个人博客时,在博客的详情页,对于不同的内容,我是想有不同的复制方式的。例如代码块我就想读者单击就可以复制,这样方便读者本地调试,而对于文字描述部分,希望可以不允许读者复制。作为一个坚定的能用CSS绝不上JS的极端份子,我最终找到了CSS3中的user-select。

兼容性

纯CSS如何禁止用户复制网页的内容

user-select

用来控制用户是否可以选中文本。全选,部分选中。

全选

在很多时候用户希望的可能是一次性复制完整的内容,例如一段代码,密码,一些key。
user-select:all :  让用户可以单击选中元素。
这里我们演示了三个不同的Html标签下的效果。

h2 {
        user-select: all;
      }

      code {
        user-select: all;
        width: 500px;
        display: block;
        padding: 10px;
        color: #31808c;
        background-color: #f5f4ef;
      }

      div {
        user-select: all;
      }
<h2>点击试试看</h2>
    <pre>
        <code>
        const num = 1;

        const result = (function () {
          delete num;
          return num;
        })();
        
        console.log(result);
        </code>
    </pre>
    <p>
      const num = 1; const result = (function () { delete num; return num; })();
      console.log(result);
    </p>

纯CSS如何禁止用户复制网页的内容

不过all同样存在一个令人尴尬的缺点,只要你设定了all,那你就不能选中部分内容。

禁止选中

对于网页中的元素,可以使用user-select: none; 禁止用户选中内容。

部分选中

为啥会有这个说法吗,对于通常的网页,我们是可以选择特定的内容的。例如在下面的页面中,我们就可以部分选择内容,

纯CSS如何禁止用户复制网页的内容

但是这里的标题的部分,主要是指在对立面无法选中的元素。例如html中有这样一个标签sup,这个标签主要是用来给元素添加角标。

<p>我后面有个角标<sup>1</sup>我前面有角标</p>

当你想复制这段文本的时候:我后面有个角标1我前面有角标,这个角标也会被复制下来。
此时我们就需要针对角标设置,这样设置还可以保证当你p标签是user-select:all的时候,复制也会忽略角标!

sup {
  -webkit-user-select: none;
  user-select: none;
}

纯CSS如何禁止用户复制网页的内容

扩展:设置选中式样

CSS提供了::selection`伪元素来设置文本选择的样式
您可以通过定位::selection伪元素来设置文本选择的样式。但是,只有下面的几个属性可以设置:

color
background-color
cursor
caret-color
outline and its longhands
text-decoration and its associated properties
text-emphasis-color (en-US)
text-shadow

例如

p::selection {
  color: #fffaa5;
  background-color: #f38630;
  text-shadow: 2px 2px #31808c;
}

选中后的效果如下:

 纯CSS如何禁止用户复制网页的内容

到此这篇关于纯CSS如何禁止用户复制网页的内容的文章就介绍到这了,更多相关CSS禁止用户复制内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS3弹性盒模型开发笔记(三)
Apr 26 HTML / CSS
CSS3教程(2):网页边框半径和网页圆角
Apr 02 HTML / CSS
CSS3支持IE6, 7, and 8的边框border属性
Dec 28 HTML / CSS
CSS3中:nth-child和:nth-of-type的区别深入理解
Mar 10 HTML / CSS
CSS3绘制有活力的链接下划线
Jul 14 HTML / CSS
HTML5重塑Web世界它将如何改变互联网
Dec 17 HTML / CSS
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
May 15 HTML / CSS
canvas之自定义头像功能实现代码示例
Sep 29 HTML / CSS
用canvas做一个DVD待机动画的实现代码
Apr 12 HTML / CSS
canvas绘制树形结构可视图形的实现
Apr 03 HTML / CSS
html5中嵌入视频自动播放的问题解决
May 25 HTML / CSS
浅谈amaze-ui中datepicker和datetimepicker注意的几点
Aug 21 HTML / CSS
CSS实现单选折叠菜单功能
CSS 一行代码实现头像与国旗的融合
如何利用 CSS Overview 面板重构优化你的网站
基于HTML十秒做出淘宝页面
css 边框添加四个角的实现代码
HTML基础详解(下)
Oct 16 #HTML / CSS
HTML基础详解(上)
Oct 16 #HTML / CSS
You might like
非常不错的MySQL优化的8条经验
2008/03/24 PHP
php $_ENV为空的原因分析
2009/06/01 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
Python Trie树实现字典排序
2014/03/28 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
python字典DICT类型合并详解
2017/08/17 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
wxPython实现分隔窗口
2019/11/19 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
《月亮湾》教学反思
2014/04/14 职场文书
实习单位鉴定评语
2014/04/26 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
锅炉工岗位职责
2015/02/13 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
个人工作能力自我评价
2015/03/05 职场文书
故意杀人案辩护词
2015/05/21 职场文书
MySql数据库触发器使用教程
2022/06/01 MySQL