编辑解释为什么不重复:
正如我在评论中所说,它并不是完全重复的,因为答案在这里没有解决方案。在这里,我开始解释我是如何将其作为(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)
。无论如何,这些随机数字来自哪里?我正在使用谷歌浏览器。
答案 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是不透明的,1
和1 - (1/256)
之间的所有值仍然是,但我无法使用这些值,因为它显然没有&# 39; t允许我使用opaque,因此我只能在0
和1 - (1/256)
之间使用。我不确定1 - (1/256)
的确切结果是否不透明。
所以最好的方法是使用background-color: rgba(0, 0, 0, calc(1 - 1 / 256));
。
答案 2 :(得分:0)
以十六进制格式提供颜色代码。
因此,您的::selection
变为:
::selection {
background-color: #000;
color: #fff;
}