::selection 无法防止截屏,它仅控制文本被选中时的视觉样式;截屏捕获的是渲染后的像素帧,与选择逻辑无关;真正影响盗用路径的是 user-select: none,但也不能禁止截屏。

::selection 本身不能防止截屏,它只控制用户选中文本时的视觉样式。想靠它“防截屏”是常见误解,必须立刻纠正。
为什么 ::selection 和截屏完全无关
截屏(无论系统级快捷键、截图工具还是录屏)捕获的是渲染后的像素帧,不经过文本选择逻辑。::selection 只在用户主动拖选时生效,且仅修改被选中区域的 CSS 样式(如 background-color、color),对画面最终输出无任何干预能力。
- 用户按下
Cmd+Shift+4或Win+Shift+S,直接抓取屏幕图层,::selection规则根本不会被触发 - 即使你把
::selection设成background: transparent; color: transparent;,截屏依然会拍到原始文字——因为那是未被选中状态下的真实渲染结果 - 浏览器 DevTools 里禁用
::selection样式后,截屏内容也不变,证明二者无因果关系
真正能影响截屏体验的 CSS 手段只有 user-select
虽然也不能“禁止截屏”,但 user-select: none 能阻止用户通过鼠标拖选触发复制/右键菜单等常规盗用路径,间接提高盗取门槛。注意写法必须完整:
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
/* 必须同时写全前缀,否则 Safari/Firefox 可能失效 */
.protected {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
- 不要直接作用于
或—— 这会让所有文本无法被屏幕阅读器聚焦,违反 WCAG 2.1 AA 级可访问性要求 - 只对明确需要保护的容器(如版权说明块、付费文章段落)加类,例如
<p class="protected">此处内容受版权保护</p> - 移动端 Safari 对
user-select: none支持不稳定,建议额外监听touchstart并e.preventDefault()防止长按唤出菜单
别踩这些 ::selection 典型误用坑
很多人试图用 ::selection “隐藏”选中内容来制造“防复制假象”,结果反而破坏体验:
- 写成
p::selection { background: #fff; color: #fff; }—— 在浅色背景上看似“看不见”,但深色模式下文字直接反白暴露;且高对比度辅助模式会强制覆盖该样式 - 全局设置
::selection { background: transparent; }—— 用户仍可复制,只是视觉反馈消失,造成操作困惑 - 忽略前缀只写
::selection—— Firefox 会忽略标准写法,必须保留::-moz-selection(尽管已非必需,但保险起见仍建议保留) - 在
contenteditable区域滥用 —— 编辑态下::selection行为异常,尤其 Safari 中选中范围可能错位
防截屏本质是客户端不可控的问题,任何前端手段都只能增加基础盗用成本。真正敏感的内容(如课程视频、加密文档)必须依赖服务端权限校验 + DRM 或水印追踪,而不是靠 CSS 伪元素打补丁。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










