完全不透明的黑色文字选择

时间:2017-03-14 09:06:47

标签: html css

编辑解释为什么不重复:
正如我在评论中所说,它并不是完全重复的,因为答案在这里没有解决方案。在这里,我开始解释我是如何将其作为(1, 1, 1)并希望它为(0, 0, 0),而在那里他们没有去过那么精确并且仅将其归结为(2, 2, 2)。你可以说问题是一样的,但我认为我的解释更好,我需要对我提供的信息给出一个很好的答案。

默认情况下,文本选择的背景颜色为蓝色,但有一些不透明度。

我尝试使用::selection并测试rgba()的alpha值来使其全黑,但我最接近的只有rgb(1, 1, 1)。是否可以获得rgb(0, 0, 0)?这是代码:

::selection {
  background-color: rgba(0, 0, 0, 0.996093750000000055511151231257827021181583404);
  color: #fff;
}

textarea {
  border: 1px solid #000;
  outline: 0;
  resize: none;
}
<textarea autofocus onfocus="this.select()" spellcheck="false">Text.</textarea>

如果我将其更改为0.996093750000000055511151231257827021181583405,我会因为一些奇怪的原因而获得rgb(51, 51, 51)。无论如何,这些随机数字来自哪里?我正在使用谷歌浏览器。

3 个答案:

答案 0 :(得分:2)

  

[..]我得到rgb(51,51,51)因为一些奇怪的原因。[..]

一点点琐事

此伪元素::selection位于CSS选择器级别3的草稿中,但在候选推荐阶段已删除。

见这里:https://www.w3.org/TR/selectors/#selection

但是,它又在Pseudo-Elements Level 4中添加了。

见这里:https://drafts.csswg.org/css-pseudo-4/#highlight-selectors

我试图挖掘旧的参考资料,例如:https://www.w3.org/TR/2001/CR-css3-selectors-20011113/#UIfragments;但我无法找到你所面临的问题。

<强>原因

我借鉴Level-4 specs,其中说:

  

对于未替换的内容,UA必须尊重颜色和   指定的背景颜色(包括其alpha通道)。   但是,对于替换内容,UA应该创建半透明   洗涤以涂覆内容,以便通过选择显示。   如果不是,则该洗涤应具有指定的背景颜色   透明的,否则是指定的颜色;但UA可能会调整   alpha通道,如果它是不透明的

所以,你所看到的实际上是UA正在实施的 wash

这解释了替换内容的行为,例如textareas和输入。但是,虽然规格说明对于未替换的内容,UA 必须尊重颜色(使用alpha通道);似乎浏览器尚未完全实现规范(即level-4,可以这么说)。他们无论如何都不受约束。哎呀他们还没有达成完全三级合规的协议。

而且,::selection无论如何都被弃用了3级!所以,这是你能得到的最接近的原因。和它一起生活。

答案 1 :(得分:1)

我找到了这个公式/原因,说明为什么我的尝试方式不可能。

&#34;随机数&#34;是1 - (1 / 256),换句话说,它不会让我有不透明,它必须具有最小的不透明度,如果没有它就会改变原始颜色,这使得rgb(1, 1, 1)永远不会得到无论我找到多少十进制数,都可以rgb(0, 0, 0)

除非有另一种改变我不知道的文字选择颜色的技巧,否则不可能获得完全不透明的黑色,只有最小不透明度的黑色/没有人能看到人眼差异的透明度,但仍然是rgba(1, 1, 1)。 :C

另一种先进,复杂和不必要的方法是使用带有大量假视觉效果的黑客/技巧/变通办法,而且可能是JavaScript,这完全不值得工作。

恢复:值为1的Alpha是不透明的,11 - (1/256)之间的所有值仍然是,但我无法使用这些值,因为它显然没有&# 39; t允许我使用opaque,因此我只能在01 - (1/256)之间使用。我不确定1 - (1/256)的确切结果是否不透明。

所以最好的方法是使用background-color: rgba(0, 0, 0, calc(1 - 1 / 256));

答案 2 :(得分:0)

以十六进制格式提供颜色代码。

因此,您的::selection变为:

::selection {
  background-color: #000;
  color: #fff;
}