如何禁用CSS或JavaScript文本选择?

dav*_*arx 240 html css cross-browser textselection

可能重复:
禁用文本选择突出显示的CSS规则

我正在制作一个包含多个页面的HTML/CSS/jQuery库.

我确实有一个"下一步"按钮,这是一个与jQuery点击监听器的简单链接.

问题是,如果用户多次单击该按钮,则选择该按钮的文本,然后选择整行文本.在我真正的黑暗设计中,这真的是丑陋而荒谬的.

所以这是我的问题:您可以禁用HTML上的文本选择吗?如果没有,我会非常怀念flash及其在文本字段上的高级配置......

Jer*_*ome 297

<div 
 style="-moz-user-select: none; -webkit-user-select: none; -ms-user-select:none; user-select:none;-o-user-select:none;" 
 unselectable="on"
 onselectstart="return false;" 
 onmousedown="return false;">
    Blabla
</div>
Run Code Online (Sandbox Code Playgroud)

  • 是的,它是http://caniuse.com/#feat=user-select-none (3认同)
  • 这在 2014 年还好吗? (2认同)

Blo*_*sie 269

更新2017年1月:

根据我可以使用,user-select除了Internet Explorer 9和早期版本之外,所有浏览器目前都支持(但遗憾的是仍然需要供应商前缀).


所有正确的CSS变体都是:

.noselect {
  -webkit-touch-callout: none; /* iOS Safari */
    -webkit-user-select: none; /* Safari */
     -khtml-user-select: none; /* Konqueror HTML */
       -moz-user-select: none; /* Firefox */
        -ms-user-select: none; /* Internet Explorer/Edge */
            user-select: none; /* Non-prefixed version, currently
                                  supported by Chrome and Opera */
}
Run Code Online (Sandbox Code Playgroud)
<p>
  Selectable text.
</p>
<p class="noselect">
  Unselectable text.
</p>
Run Code Online (Sandbox Code Playgroud)


请注意,它是非标准功能(即不是任何规范的一部分).它不能保证在任何地方都可以工作,并且浏览器之间的实现可能存在差异,并且在将来的浏览器中可能会失去对它的支持.


可以在Mozilla Developer Network文档中找到更多信息.

  • 好的,所以其他的是供应商特定的前缀,我认为其他人会认为那些是正确的变化. (14认同)
  • "正确的CSS变化"......?唯一正确的CSS"变体"是"用户选择". (8认同)
  • 哈哈,你打算用同样的答案赚取你所有的代表吗?好啊:) (3认同)
  • 每个人都应该知道这在哪里工作,哪里不知道http://caniuse.com/user-select-none (2认同)

Nyx*_*nyx 29

试试这个CSS代码以实现跨浏览器兼容性.

-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;
Run Code Online (Sandbox Code Playgroud)

  • 2021 年成为 Web 开发者很容易:“用户选择:无;”就足够了。 (4认同)

Jam*_*ers 7

您可以使用JavaScript来执行您想要的操作:


if (document.addEventListener !== undefined) {
  // Not IE
  document.addEventListener('click', checkSelection, false);
} else {
  // IE
  document.attachEvent('onclick', checkSelection);
}

function checkSelection() {
    var sel = {};
    if (window.getSelection) {
        // Mozilla
        sel = window.getSelection();
    } else if (document.selection) {
        // IE
        sel = document.selection.createRange();
    }

    // Mozilla
    if (sel.rangeCount) {
        sel.removeAllRanges();
        return;
    }

    // IE
    if (sel.text > '') {
        document.selection.empty();
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

肥皂盒: 你真的不应该以这种方式搞砸客户的用户代理.如果客户想要在文档上选择内容,那么他​​们应该能够在文档上选择内容.如果不喜欢高亮颜色并不重要,因为不是查看文档的人.

  • **肥皂盒反驳**:我有一个按钮,当点击时,运行一些javascript来改变图片的比例.用户没有理由在该按钮内选择"+"或" - ",但大多数Web浏览器最终会在点击几下按钮后选择文本.同样,如果您通过javascript进行拖放操作,则不希望选择拖动某些内容的内容.也就是说,即使你不同意这个目标,我也很感激你仍然回答了这个问题. (23认同)
  • 我承认在某些情况下它可以成为有效的设计选择.但问题是他错过了Flash,暗示他错过了能够控制用户的客户端.我不同意这种思维方式.作为用户,我不喜欢网站重新定义本地软件的工作方式.这也是一个可访问性问题. (2认同)
  • @jsumners 有很多情况。进行一些创造性的思考,你会想出多种场景。仅仅因为浏览器默认启用此功能并不意味着我们作为程序员就应该遵守。此外,移动计算正在废除传统的文本选择方式。所以它变得越来越重要。你让它听起来像是某种过时的黑客之类的东西,它是一个__支持的功能__(请参阅上面的答案。) (2认同)
  • @jsumners网站设计师决定用户如何与他/她的网页进行互动,而不论其审美或功能目的是什么? (2认同)

Kyl*_*yle 5

我不确定是否可以将其关闭,但是可以更改其颜色:)

myDiv::selection,
myDiv::-moz-selection,
myDiv::-webkit-selection {
    background:#000;
    color:#fff;
}
Run Code Online (Sandbox Code Playgroud)

然后将颜色匹配到您的“深色”设计,看看会发生什么:)