CSS规则在选择时禁用突出显示表列

时间:2013-04-02 01:36:16

标签: css select html-table cross-browser highlight

背景

想要禁用突出显示表格的第一列。

HTML源

<table>
<tbody>
    <tr><td class="unselectable" unselectable="on"><button value="1" unselectable="on" class="unselectable"><div unselectable="on" class="unselectable">&#x2718;</div></button></td><td>Row 1</td></tr>
    <tr><td class="unselectable" unselectable="on"><button value="2" unselectable="on" class="unselectable"><div unselectable="on" class="unselectable">&#x2718;</div></button></td><td>Row 2</td></tr>
    <tr><td class="unselectable" unselectable="on"><button value="3" unselectable="on" class="unselectable"><div unselectable="on" class="unselectable">&#x2718;</div></button></td><td>Row 3</td></tr>
</tbody>
</table>

CSS来源

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

小提琴

http://jsfiddle.net/2LQfg/1/

问题

当用户选择并在桌面上拖动鼠标按钮时,按钮文本(✘)将突出显示(不良行为)。当用户复制并粘贴值时,不包括值(✘)(所需行为)。

澄清一下,这是当前的行为(不受欢迎的):

Undesired

下图显示了在桌面上拖动鼠标后所需的行为:

Desired

大多数用户可能不会关心,但这是一种有点误导性的用户体验。无论用户突出显示文本并将其复制,都应该复制所有突出显示的文本。通过添加unselectable类,按钮'(✘)值会突出显示,但不会被复制。用户根本不应该突出显示(选择)(✘),因为它被设置为unselectable

环境

我在Xubuntu上使用Firefox 19.0.2,但我寻求跨浏览器解决方案。

问题

什么是跨浏览器方式阻止用户突出显示第一个表格列(包含按钮)?

相关

2 个答案:

答案 0 :(得分:2)

如果通过content CSS规则设置,浏览器似乎无法复制内容。希望您不需要支持IE7

button.unselectable:after {
    content: "\2718";
}

http://jsfiddle.net/ExplosionPIlls/2LQfg/50/

答案 1 :(得分:1)

只是一种解决方法

到目前为止,我只发现了一个相当不方便的解决方法。它隐藏了unselectable元素中的所有“实际”文本,并通过:before伪元素将其替换为伪文本。注意:如果不需要在html中实际拥有“实际”文本,那么可以消除嵌套的span元素(以及一些冗余的html)和下面关联的css,但这一切都取决于如何“重要”文本在您的实际应用程序中(对于屏幕阅读器,搜索引擎等)。

<强> Fiddle example.

<强> HTML

<table>
<tbody>
    <tr><td><button value="1"><div class="unselectable" data-content="&#x2718"><span>&#x2718;</span></div></button></td><td>Row 1</td></tr>
    <tr><td><button value="2"><div unselectable="on"   class="unselectable" data-content="&#x2718"><span>&#x2718;</span></div></button></td><td>Row 2</td></tr>
    <tr><td><button value="3"><div unselectable="on"  class="unselectable" data-content="&#x2718"><span>&#x2718;</span></div></button></td><td>Row 3</td></tr>
</tbody>
</table>

<强> CSS

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

*.unselectable span {
    display: none;
}

*.unselectable:before {
    content: attr(data-content);
}