css - 仅使用 CSS3 更改其子元素悬停时的元素样式

标签 css css-selectors css-transitions

我有一个网站,其背景图像在悬停在某些元素上时会发生变化。图像通常较暗,但有时较亮。光照图像应用了 .whiteImg 类。

通过将“背景”图像设置为悬停元素的同级图像,我已经使它仅与 CSS 一起工作。例如:

HTML:

<ul>
  <li>
    <a>link 1</a>
    <img src="http://foo.com/" />
  </li>
  <li>
    <a>link 2</a>
    <img src="http://foo.com/" />
  </li>
  <li>
    <a>link 3</a>
    <img src="http://foo.com/" class="whiteImg" />
  </li>
</ul>

CSS:

img{
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
  opacity: 0;
  transition: opacity 1s;
}
li a:hover + img{
opacity: 1;
}

现在一切正常。但我有 body{color: #fff;} 默认情况下,但需要更改为 #000.whiteImg 可见时。我试过用 jQuery(和它的颜色插件)解决这个问题,但是动画发生在 CSS 动画之后。所以我正在寻找一种纯 CSS 解决方案,以*在显示 .whiteImg 的同时将 body color 更改为黑色。

有没有办法做到这一点?我正在寻找类似于

 li a:hover + img.whiteImg < body {
    color: #000;
 }

灵感来自 this post 的末尾但显然实际上不起作用。

谢谢。

最佳答案

这是我能想到的唯一纯 CSS 解决方案:

http://jsfiddle.net/7K83g/3/

li, li * {
    position: relative;
    z-index: 2;
}
.whiteImg ~ .fakebg {
    display: block;
    position: absolute;
    z-index: 1;
    top: 0; left: 0;
    width: 100%;
    height: 100%;
    background: black;
}

这是一个 100% 的解决方案,使用 direction: rtl 将正确的位置应用到链接。

改用 jQuery:

 $(document.body).toggleClass("dark");

CSS:

 .dark { background: black; color: white; }

会成功的。
示例:http://jsfiddle.net/QKAh6/

关于css - 仅使用 CSS3 更改其子元素悬停时的元素样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18828007/

相关文章:

javascript - CSS3 响应式,动态八边形

javascript - last-of-type 应用于不存在的元素

html - 多个叠层类中的 CSS 选择元素

html - HTML 链接上的 CSS 转换效果会减慢点击时的页面转换速度吗?

html - 悬停在元素上时突然(意外)自动滚动

asp.net - 在 ASP.NET 中使用外部 CSS 文件显示背景图像时出现问题

css - Chrome 37 计算四舍五入

javascript - 试图改变 <a> 标签的 href

python - Selenium 找不到元素,但元素位于 https ://login. aliexpress.com/webpage 上

CSS 过渡重复?