有没有办法使DIV无法选择?


140

这是一个有趣的CSS问题!

我有一个带有透明背景的文本区域,上面覆盖着一些我想用作水印的文本。文本很大,占据了大部分文本区域。看起来不错,问题是当用户单击文本区域时,有时会选择水印文本。我希望水印文本永远不可选择。我原以为如果z索引中的某个值较低,那将是无法选择的,但浏览器在选择项目时似乎并不关心z索引层。有没有技巧或方法可以使该DIV永远不会被选择?


您对JavaScript解决方案满意吗?
2009年

Answers:


203

我写了一个简单的jQuery扩展以在一段时间前禁用选择:在jQuery中禁用选择。您可以通过以下方式调用它$('.button').disableSelection();

或者,使用CSS(跨浏览器):

.button {
        user-select: none;
        -moz-user-select: none;
        -khtml-user-select: none;
        -webkit-user-select: none;
        -o-user-select: none;
} 

@kasperTaeymans感谢您指出这一点。更新了代码段。
2011年

@kasperTaeymans但这是在W3C工作草案中的 ...为了以防万一,我将其包括在内。
卡米洛·马丁

2
我不赞成从最初的答案中取任何东西,但是它已经有3年以上的历史了。所以我在下面添加了一个答案(stackoverflow.com/questions/924916/…),并为触摸界面添加了设置。
安妮·冈恩

这就是我想要的可移动引导程序模式标题!谢谢!
开发人员

62

以下CSS代码几乎可以在现代浏览器中运行:

.unselectable {
    -moz-user-select: -moz-none;
    -khtml-user-select: none;
    -webkit-user-select: none;
    -o-user-select: none;
    user-select: none;
}

对于IE,您必须使用JS或在html标记中插入属性。

<div id="foo" unselectable="on" class="unselectable">...</div>

的目的是什么unselectable="on"。您能否提供参考
用户

4
我在这里找到:msdn.microsoft.com/en-us/library/hh801966(v=vs.85).aspx 但是我实际上在IE上进行了测试,并且可以正常工作。
金卡(KimKha)

1
我不确定。但是IE中可能包含<code> unselectable =“ on” </ code>,W3C验证程序不接受该属性。
2013年

虽然它可以在现代浏览器上运行,但W3C尚未指定它。
Ciro Santilli郝海东冠状病六四事件法轮功2014年

41

只需在CSS上添加一些内容,即可更新aleemb最初的,广受好评的答案。

我们一直在使用以下组合:

.unselectable {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    -o-user-select: none;
    user-select: none;
}

我们从以下网址获得了添加webkit-touch条目的建议:http :
//phonegap-tips.com/articles/essential-phonegap-css-webkit-touch-callout.html

2015年4月:仅使用可能会派上用场的变化来更新我自己的答案。如果您需要即时选择DIV或选择DIV,并且愿意使用Modernizr,则可以在javascript中巧妙地使用以下代码:

    var userSelectProp = Modernizr.prefixed('userSelect');
    var specialDiv = document.querySelector('#specialDiv');
    specialDiv.style[userSelectProp] = 'none';

应用user-select: nonediv具有任何作用。我很确定这user-select只是文字。还有其他方法可以使无法div选择吗?
oldboy

22

正如Johannes已经建议的那样,背景图像可能是仅在CSS中实现此目标的最佳方法。

JavaScript解决方案还必须影响“拖动开始”才能在所有流行的浏览器上均有效。

JavaScript:

<div onselectstart="return false;" ondragstart="return false;">your text</div>

jQuery的:

var _preventDefault = function(evt) { evt.preventDefault(); };
$("div").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);

丰富


13

您可以pointer-events: none;在CSS中使用

div {
  pointer-events: none;
}

6

您可以尝试以下方法:

<div onselectstart="return false">your text</div>

1
仍然可以双击选择。
ceving 2013年

6

文本区域的简单背景图像是否足够?


1
好吧,我宁愿说水印,但是透明的背景图像也可能起作用。另外,您不应该平铺很小的图像,因为在这种情况下,某些浏览器的运行速度会变得非常慢:)
Joey

特别是因为1000x1000的透明png(或gif)仅为4kb。
瑞安·佛罗伦萨

实际上更像是1 KiB :-)
乔伊(Joey)

4

WebKit浏览器(即Google Chrome和Safari)具有类似于Mozilla的-moz-user-select:none的CSS解决方案。

.no-select{    
    -webkit-user-select: none;
    cursor:not-allowed; /*makes it even more obvious*/
}



-1

确保将位置明确设置为绝对或相对位置,以使z-index可以进行选择。我有一个类似的问题,这为我解决了。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.