【问题标题】:How do I disable text selection with CSS or JavaScript? [duplicate]如何使用 CSS 或 JavaScript 禁用文本选择? [复制]
【发布时间】:2011-04-16 07:47:11
【问题描述】:

我正在制作一个 HTML/CSS/jQuery 画廊,有几个页面。

我确实有一个“下一步”按钮,它是一个带有 jQ​​uery 点击监听器的简单链接。

问题是如果用户点击按钮几次,按钮的文本被选中,然后是整行文本。在我真正黑暗的设计中,这真的很丑陋和荒谬。

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

【问题讨论】:

标签: html css cross-browser textselection


【解决方案1】:

我不确定你是否可以关闭它,但你可以改变它的颜色:)

myDiv::selection,
myDiv::-moz-selection,
myDiv::-webkit-selection {
    background:#000;
    color:#fff;
}

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

【讨论】:

  • 你可以把它压缩成一个 CSS 规则。 myDiv.webkit::-webkit-selection,myDiv.moz::-moz-selection,myDiv.normal::selection{ 背景:#000;颜色:#fff; }
  • @yc:使用多重选择器,我会编辑,谢谢 :)
  • #galleryPagesNavigation a.normal::selection { background:#000; } #galleryPagesNavigation a.moz::-moz-selection { 背景:#000; } #galleryPagesNavigation a.webkit::-webkit-selection { 背景:#000; }
  • 你有“普通”“moz”和“webkit”,删除它们,从这个答案中复制更新的代码:)
【解决方案2】:
<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>

【讨论】:

  • webkit 的 CSS 类似于 Firefox 的 CSS,我编辑了答案以添加它。
  • @daviddarx 适用于 Chrome 17 和 Safari 5。
  • 更新后可在 IE 和 Opera 中使用
  • 2014年这样还好吗?
【解决方案3】:

你可以使用 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;
    }
}

肥皂盒: 您真的不应该以这种方式与客户端的用户代理搞砸。如果客户想要选择文档上的东西,那么他们应该能够选择文档上的东西。 是否不喜欢高亮颜色也没关系,因为不是查看文档的人。

【讨论】:

  • 肥皂盒反驳:我有一个按钮,当点击它时,会运行一些 JavaScript 来更改图片的比例。用户没有理由在该按钮内选择“+”或“-”,但大多数网络浏览器最终会在单击几次按钮后选择文本。同样,如果您通过 javascript 进行拖放,则您不想选择拖过的东西。也就是说,即使您不同意目标,我也很感激您仍然回答了这个问题。
  • 我承认在某些情况下它可以成为有效的设计选择。但问题提到他会想念 Flash,这意味着他会想念能够控制用户的客户端。我不同意这种思维方式。作为用户,我不喜欢网站重新定义我的本地软件的工作方式。这也是一个可访问性问题。
  • @jsumners 有很多种情况。做一些开箱即用的思考,你会想出多种场景。仅仅因为浏览器默认启用此功能并不意味着我们作为程序员应该遵守。此外,移动计算正在摒弃传统的文本选择方式。所以它变得越来越重要。你让它听起来像是某种过时的黑客或其他东西,这是一个支持的功能(请参阅上面的答案。)
  • @b1naryatr0phy 再次,OP 专门描述了一个场景,在该场景中,他纯粹出于审美原因想要控制用户的客户端。他的目标与功能无关,无论是触摸还是其他。他特别指出,他会怀念像使用 Flash 一样完全控制用户交互的能力。我认为这是一种不完善的网络开发方式,并且在 提供了一个不依赖于可能未实现的 CSS 功能的解决方案(当时)之后说了这么多。
  • @jsumners 用户如何与他/她的页面进行交互不是网站设计师的决定,无论审美或功能目的如何?
【解决方案4】:

试试这个 CSS 代码以获得跨浏览器的兼容性。

-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;

【讨论】:

  • 轻松成为 2021 年的 Web 开发人员:user-select: none; 就足够了。
【解决方案5】:

2017 年 1 月更新:

根据Can I use,目前所有浏览器都支持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 */
}
<p>
  Selectable text.
</p>
<p class="noselect">
  Unselectable text.
</p>

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


更多信息可以在Mozilla Developer Network documentation找到。

【讨论】:

  • “正确的 CSS 变体”...?唯一正确的 CSS“变体”是 user-select
  • 好的,所以其他的是供应商特定的前缀,我想其他人会认为这些是正确的变体。
  • 哈哈,你打算用相同的答案赢得所有代表吗?不错:)
  • 每个人都应该知道这在哪里有效,在哪里无效caniuse.com/user-select-none
  • 提供的解决方案不适用于 Opera 浏览器。如何为opera设置用户选择选项
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 2013-05-19
  • 2015-02-19
  • 2016-12-24
  • 2014-03-21
  • 2017-08-01
  • 2016-02-19
  • 2011-02-11
相关资源
最近更新 更多