user-select

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程的每个阶段提供云产品。 立即开始使用 $200 的免费积分!

CSS 中的 user-select 属性控制允许选择元素中的文本的方式。 例如,它可以用来使文本不可选。

.row-of-icons {
  -webkit-user-select: none;  /* Chrome all / Safari all */
  -moz-user-select: none;     /* Firefox all */
  -ms-user-select: none;      /* IE 10+ */
  user-select: none;          /* Likely future */      
}

这在您希望为用户提供更轻松/更干净的复制粘贴体验的情况下很有用(不会让他们意外地选择无用的东西,例如图标或图像)。 然而,它有点bug。 Firefox 强制执行这样一个事实,即与该选择器匹配的任何文本都无法复制。 WebKit 仍然允许您选择周围的元素时复制文本。

您也可以用它来强制整个元素被选中

.force-select {  
  -webkit-user-select: all;  /* Chrome 49+ */
  -moz-user-select: all;     /* Firefox 43+ */
  -ms-user-select: all;      /* No support yet */
  user-select: all;          /* Likely future */   
}

以下是这些演示

查看 user-select 演示,由 Chris Coyier (@chriscoyier) 在 CodePen 上创建。

这个属性很长一段时间都没有规范,但现在在 CSS 基本用户界面模块级别 4 中有介绍。

默认值为 auto,这使得选择按预期正常发生。“正常”有点复杂。 这里值得引用规范:

  • ::before::after 伪元素上,计算值是 none
  • 如果元素是可编辑元素,则计算值是 contain
  • 否则,如果此元素的父元素上 user-select 的计算值为 all,则计算值为 all
  • 否则,如果此元素的父元素上 user-select 的计算值为 none,则计算值为 none
  • 否则,计算值为 text

换句话说,它会智能地级联并重置为一个合理的 state。 它看起来可能可以用此功能使伪元素可选,但还没有最终决定。

旧的/专有的

Firefox 支持 -moz-none,它与 none 相似,只是它表示子元素可以覆盖级联,并使用 -moz-user-select: text; 再次可选。 从 Firefox 21 开始,none 的行为类似于 -moz-none

Internet Explorer 也 支持 一个迄今为止专有的值,element,您可以在元素内部选择文本,但选择将在该元素的边界处停止。

更多信息

浏览器支持

这专门针对 -*-user-select: none;

此浏览器支持数据来自 Caniuse,其中包含更多详细信息。 数字表示浏览器在该版本及更高版本中支持此功能。

台式机

ChromeFirefoxIEEdgeSafari
4*2*10*12*3.1*

移动/平板电脑

Android ChromeAndroid FirefoxAndroidiOS Safari
1271272.1*3.2*