CSS 选择器 ::selection 没有使用给定的背景颜色

Posted

技术标签:

【中文标题】CSS 选择器 ::selection 没有使用给定的背景颜色【英文标题】:CSS selector ::selection is not using given background color 【发布时间】:2022-01-12 15:17:18 【问题描述】:

我正在尝试制作一些 RGB 文本,这很有效,但是当我尝试制作 ::selection 时,它会隐藏文本,并且由于某种原因会采用文本的背景颜色。我已经尝试了我能想到的任何东西,目前,我正在为 chrome 制作它,稍后将在 firefox 上工作。

研究

在我的研究中,我发现您不需要使用像.rgb 这样的选择器。在查看一些文档/示例时,我遇到了许多奇怪的事情,例如当我使用 .rgb::selection 时,我无法突出显示/选择屏幕上的任何文本。

当我查看 W3schools 时,他们只是使用

::selection 
  color: red;
  background: yellow;

它有效。我问过我的老师和我的同龄人。他们都不明白为什么::selection 会占用 animate 属性。我的想法是,当我使用-webkit-background-clip 时,这就是它无法正常工作的原因。如果是这种情况,那么我该怎么做才能让它仍然需要它。当我阅读更多内容时,我尝试使用!important,这是我得到的最接近的。它使文本变为白色,但背景中的颜色仍在变化。我查看了here 以尝试了解如何正确使用它,但我认为我已经正确使用了它。我似乎无法让背景颜色保持一种颜色。

这是我到目前为止所得到的。

@import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');

* 
    margin: 0;
    padding: 0;
    background-color: #1e1e1e;
    font-family: 'Montserrat', sans-serif;


.rgb

  position:fixed;
  background: linear-gradient(to right, #008AFF, #00FFE7);
  animation:animate 10s forwards infinite;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;


::selection !important
    background: red;
    color: white;


@keyframes animate

  0%, 100%
  
    filter:hue-rotate(0deg);
  
  50%
  
    filter:hue-rotate(360deg);
  
<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <h1 class="rgb">Welcome to my webpage</h1>
    </body>
</html>

我在这个网站上到处寻找有这个问题的人或人,但似乎我是第一个。

【问题讨论】:

仔细看看你的 CSS 和你的 HTML。例如, div .rgb 不存在 - 没有类 rgb 的元素是 div 的子元素。您可以在此处查找各种类型的组合器:developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/… 空格非常重要。 &lt;div class="rgb" /&gt; - 这只是一个我忘记删除的测试,但它在那里,我很抱歉我忘了删除它,但是在 css 中选择所有 div,然后过滤他们到所有具有“rgb”类的div? @AHaworth 我的问题已更新以消除抱歉 您错误地使用了!important。它遵循每个属性,而不是选择器规则。喜欢background: red !important;。由于您使用的是背景动画和文本填充,因此您需要在选择中取消设置这些属性。您不能简单地覆盖颜色。 啊,当我尝试这样做时,虽然它让我回到了原来的位置,当我在那里输入代码时,它根本不会向我显示文本,只是掩盖文本而不是让它变白再次。 【参考方案1】:

要避开过滤器,一种有点笨拙的方法可能是拥有第二个标题副本,该副本位于原始标题之上,实际上是进行选择的元素。

它的文本和背景是透明的,直到有一个选区,此时选区(仅)分别变为白色和红色。

@import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
* 
  margin: 0;
  padding: 0;
  background-color: #1e1e1e;
  font-family: 'Montserrat', sans-serif;


.rgb 
  position: fixed;
  background: linear-gradient(to right, #008AFF, #00FFE7);
  animation: animate 10s forwards infinite;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;


.shadow 
  color: transparent;
  position: absolute;
  top: 0;
  left: 0;
  background-color: transparent;


.shadow::selection 
  background: red;
  color: white;


@keyframes animate 
  0%,
  100% 
    filter: hue-rotate(0deg);
  
  50% 
    filter: hue-rotate(360deg);
  
<h1 class="rgb">Welcome to my webpage</h1>
<h1 class="shadow">Welcome to my webpage</h1>

【讨论】:

以上是关于CSS 选择器 ::selection 没有使用给定的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

扩展选择(下拉)元素的 CSS 选择器

元素和选择器 伪类 选择器的优先级

css选择器的1.13 UI元素状态伪类选择器

CSS3选择器归类整理(附CSS优先级要点)

CSS选择器,看这一篇就够了

CSS3之选择器