【问题标题】:Access nested elements with CSS [closed]使用 CSS 访问嵌套元素 [关闭]
【发布时间】:2018-01-05 22:01:17
【问题描述】:

我正在尝试使用 CSS 访问嵌套的 html 元素以更改一些属性,但它似乎不起作用。

div.someid1 a:visited {
  color: #666666;
}

div.someid2 a:visited img {
  opacity: 0.25;
}
<div class="someid1">
  <a href="https://example.com">link</a>
</div>
<div class="someid2">
  <a href="https://example.com">
    <img src="https://pbs.twimg.com/profile_images/839721704163155970/LI_TRk1z_400x400.jpg">
  </a>
</div>

CSS 代码的第一部分完美运行,但第二部分却不行。它也不适用于“>”符号。我尝试用谷歌搜索其他不同的解决方案,但没有一个真正有效。

本质上,我正在尝试使访问链接内的图像显示为灰色,以表明用户已经点击了它们。

【问题讨论】:

  • 您需要包含您的 HTML,以便我们可以看到您的 CSS 试图应用于什么...
  • 您提供的代码没有明显错误。你需要一个minimal reproducible example。偏好作为使用堆栈 sn-ps 功能的现场演示。
  • 我猜someid 是一个ID
  • @TemaniAfif - 否,否则顶部或底部选择器均不适用。当然,这是一个奇怪的类名!
  • :visited 有一个white-list of available properties that can be changed,其中不包括opacity

标签: html css


【解决方案1】:

:visited伪类restricts changes to a white-list of properties

  • color
  • background-color
  • border-color
  • border-bottom-color
  • border-left-color
  • border-right-color
  • border-top-color
  • column-rule-color
  • outline-color

由于opacity 不在此列表中,因此您不会看到您的图像发生变化。


A note on why this list is restrictive:

由于样式表作者可能会滥用 :link 和 :visited 伪类来确定用户在未经用户同意的情况下访问了哪些站点,因此 UA 可以将所有链接视为未访问的链接或实施其他措施来保留以不同方式呈现已访问和未访问的链接时用户的隐私。

【讨论】:

  • 但是有没有其他方法可以达到类似的效果? (我刚刚在我原来的问题中添加了更好的解释,说明我为什么要这样做)。
  • @NewProger 我不知道使用img。但是,您可以 1) 将其替换为基于字体的图标(可以使用 color 设置样式),但请注意 alpha 值将被忽略,或者 2) 使用 SVG 并使用 fillstroke
  • @NewProger 我认为你遇到了死胡同。浏览器已经阻止使用 JavaScript 检测访问过的链接,所以这也是不行的。尽管您可以将“单击”操作保存到本地存储并向元素添加一个类并做任何您想做的事情,但对于这种小行为来说太多了?值得吗?
  • 字体是个好建议。
  • 这有点可惜……但我想我别无选择,只能放弃这种具体的做法,换一种方式。谢谢大家的帮助!