CSS如何禁止复制或选中文本

171 阅读2分钟

CSS如何禁止复制或选中文本

要通过 CSS 实现禁止复制或选中文本的效果,可以使用以下组合方案:

核心实现方法

/* 全局禁止文本选中 */
* {
  user-select: none;          /* 标准属性 */
  -webkit-user-select: none;  /* Safari/Chrome */
  -moz-user-select: none;     /* Firefox */
  -ms-user-select: none;      /* IE10+ */
}

/* 可选:隐藏选中高亮 */
::selection {
  background: transparent;
  color: inherit;
}
::-moz-selection {
  background: transparent;
  color: inherit;
}

/* 针对输入框的例外处理 */
input, textarea {
  user-select: auto; /* 允许输入框正常操作 */
}

扩展加强方案

/* 禁用长按弹出菜单 (移动端) */
body {
  -webkit-touch-callout: none; /* iOS Safari */
  -webkit-tap-highlight-color: transparent; /* 移除点击高亮 */
}

/* 禁用图片拖拽 */
img {
  pointer-events: none; /* 阻止点击/拖拽事件 */
  user-drag: none;      /* 旧版 Safari */
  -webkit-user-drag: none;
}

注意事项

  1. 兼容性说明

    • user-select 在 IE10+ 和现代浏览器有效
    • 老版本浏览器需使用 onselectstart 事件配合 JavaScript
  2. 安全警示

    • 前端限制无法真正防止内容复制(可通过开发者工具、截图等方式获取)
    • 重要内容应通过服务器端加密、法律声明等方式保护
  3. 用户体验建议

    • 谨慎使用该功能,避免影响正常表单操作
    • 建议通过 CSS 类名控制特定区域而非全局应用

完整示例

<!DOCTYPE html>
<html>
<head>
<style>
.protected-content {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;

  /* 隐藏选中效果 */
  ::selection {
    background: transparent;
    color: inherit;
  }
}
</style>
</head>
<body>
  <div class="protected-content">
    <h2>受保护内容(无法选中)</h2>
    <p>这段文字无法通过鼠标选中或复制</p>
  </div>

  <div class="normal-content">
    <h2>正常内容</h2>
    <p>这段文字可以自由选中和复制</p>
  </div>
</body>
</html>

高级防护方案(需结合 JavaScript)

// 禁用右键菜单
document.addEventListener('contextmenu', function(e) {
  e.preventDefault();
});

// 禁用快捷键 (Ctrl+C/Ctrl+V)
document.addEventListener('keydown', function(e) {
  if (e.ctrlKey && (e.keyCode === 67 || e.keyCode === 86)) {
    e.preventDefault();
  }
});

浏览器支持情况

属性/方法ChromeFirefoxSafariEdgeIE
user-select54+69+3+79+10+
-webkit-user-select4+3+79+
-moz-user-select2+

建议根据实际需求选择实现方案,对于重要内容建议采用:

  1. 动态内容加载(AJAX)
  2. 文字图片化处理
  3. 数字水印技术
  4. 内容加密传输 等更安全的保护方式

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github