user-select: none 是交互层视觉限制,可阻止鼠标选中文本但无法防右键、Ctrl+C、开发者工具等;需加全浏览器前缀,精准作用于保护容器,并注意无障碍影响。

用 user-select: none 可以有效阻止用户用鼠标拖拽或双击选中文字,从而让复制操作“无从下手”——但它不拦截右键菜单、不阻止 Ctrl+C、更不能防开发者工具查看源码。它本质是交互层的视觉限制,轻量且实用。
基础写法:覆盖主流浏览器
现代浏览器对 user-select 的支持已较统一,但为兼容旧版 Chrome、Firefox、Edge 和 Safari,必须加全前缀:
-
-webkit-user-select: none(Safari、Chrome、Opera) -
-moz-user-select: none(Firefox) -
-ms-user-select: none(IE10+、旧版 Edge) -
user-select: none(标准语法,当前所有新浏览器都支持)
作用范围要精准,别误伤体验
直接给 body 加 user-select: none 最省事,但会禁掉所有可交互文本——比如搜索框输入、表单提示、按钮文字说明都会无法选中,影响可用性。推荐做法是:
- 只作用于真正需要保护的内容容器,例如:
#article-content、.novel-text、.protected-section - 对表单控件、代码块、按钮等保留选择能力,可单独重置:
input, textarea, code { user-select: text; } - 若内容含图片或 SVG 图标,也建议一并设置:
img, svg { user-select: none; }
它不能做什么,你得心里有数
user-select: none 是一道“礼貌性门槛”,不是安全锁:
立即学习“前端免费学习笔记(深入)”;
- 用户打开开发者工具,删掉这行 CSS 或临时禁用样式,立刻恢复可选
- 通过“查看页面源代码”或网络面板(Network → HTML 响应)仍能拿到原始文本
- 右键菜单里的“复制”选项、Ctrl+C 快捷键、截图 OCR 等方式完全不受影响
- 屏幕阅读器、键盘导航等辅助功能可能因此受限,需评估无障碍影响
搭配 JS 可增强效果(按需)
如果确实需要进一步抑制复制行为,可在启用 user-select: none 的同时,用 JavaScript 封禁关键事件:
- 监听
copy事件并调用e.preventDefault() - 拦截
contextmenu阻止右键菜单弹出 - 禁用
selectstart和dragstart防止拖拽触发选择 - 注意:这些 JS 干预同样可被禁用或绕过,且可能干扰正常操作(如长按复制链接)


















