【问题标题】:Non-transparent child of semi-transparent parent element?半透明父元素的非透明子元素?
【发布时间】:2015-03-19 21:52:04
【问题描述】:

我有一个顶部导航,当它没有悬停时它是半透明的。

nav.top-bar {
  background: none;
  opacity: 0.6;
  transition: opacity 0.4s;
}

nav.top-bar:hover{
  opacity: 1.0;
}

此导航包含一个搜索字段。它通过 AJAX 实时搜索并在搜索字段下方显示搜索结果。

不过,它也是顶部导航的子项,在未悬停时会变得半透明。因此搜索结果也是半透明的。

如何防止它变成半透明?

编辑:将透明度应用于顶部导航的背景和文本颜色将不起作用,因为它还包含图像。

EDIT2:您可以在我的主页上查看问题。 因此转到http://midifight.club/blog,在搜索中输入“ali”之类的内容。结果就会出现。现在将鼠标拖到其他地方并再次将其拖到搜索结果中。什么都不会发生。

【问题讨论】:

  • 你不能,这就是它的工作原理,当你设置元素不透明度时,它也会影响该元素内的所有元素。一种解决方法是将背景设置为 RGBA,但这需要一个实际的背景
  • 1.去除不透明度。 2. 添加background: rgba() like rgba(255, 255, 255, 0.6) 3. 添加color : rgba() 和背景一样。颜色可以被继承,所以只需在您的搜索字段中更改它。虽然背景仅在元素本身上
  • 而不是让整个元素透明,只做你需要的css属性:background-color: rgba(255,0,0,0.5); border: 1px solid rgba(0,255,0,0.5);
  • 这行不通,因为顶部导航还包含 ,如果它们不透明的话会显得很傻。
  • @Hedge 然后将图像也设置为半透明

标签: jquery html css


【解决方案1】:

想到的最简单的解决方案是向导航添加一个类,以防止它在搜索某物时变得透明。

css

.top-bar.focused { opacity: 1 !important; }

JS

document.getElementById('searchBox').oninput = function(){
    if(this.value){
        document.getElementById('top-bar').classList.add('focused');
    }else{
        document.getElementById('top-bar').classList.remove('focused');
    }
}

显然这不会马上奏效,我只是给你一个想法。

编辑

Firefox 的 3d 视图在这种情况下非常有用

如您所见,搜索结果显示在其他内容的顶部,这意味着错误完全是由不透明度引起的,而不是 z-indexes。您也可以通过将鼠标悬停在菜单上并看到它在不褪色时出现在顶部来得出这个结论,如果是 z-index 问题,那么即使它不透明也不会出现在顶部。

【讨论】:

  • 这很聪明。由于我自己管理与搜索结果的出现和消失有关的所有事情,因此我可以完成这项工作。我不会将此标记为已回答,因为我很想知道为什么 Z 顺序如此糟糕。
  • @Hedge 我添加了一些关于“z-order”的信息
  • 不透明度行为真的有问题还是我用错了?现在,如果我可以只吃一个金枪鱼三明治,我会 100% 确定这是我正在寻找的答案:D 只是开玩笑,非常感谢!
  • @Hedge 不能告诉你,我不太擅长 CSS,但我想我的建议会奏效,或者至少我希望如此 :D
  • 我实现了它,它按照您的预期解决了问题。非常感谢。
猜你喜欢
  • 2011-01-22
  • 2019-06-13
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2010-11-02
  • 2017-09-29
相关资源
最近更新 更多