【问题标题】:Background color hiding other box-shadow隐藏其他框阴影的背景颜色
【发布时间】:2018-10-05 11:35:04
【问题描述】:

我有一张桌子,我想在你悬停一行时设置一些样式,所以我使用了box-shadow,并添加了相应的 z-index 来完成这项工作。问题是当我将tds 设置为具有背景颜色时,它只是使其位于盒子阴影的顶部,因此悬停不起作用。

我该如何解决这个问题,以便在 td 元素中同时使用背景颜色,并在悬停在一行上时使用 box-shadow 样式?

我在这个简单的 jsfiddle 中复制了它: https://jsfiddle.net/pjz43a52/

检查当您将鼠标悬停在一行上时,盒子阴影是否位于其他行的后面。如果您评论 td 背景颜色的行,它就可以工作:

table td {
  /* background-color: #EFEFEF; */
  z-index: 1;
}

任何想法为什么会发生这种情况?

【问题讨论】:

标签: html css z-index box-shadow


【解决方案1】:

这是因为tdtr 的子代。当您的 CSS 将 tr 设置为在悬停时具有比 td 更高的 z-index 时,它将呈现在周围单元格的上方,因此您可以看到投射在其邻居身上的阴影。但是,不能对自己的孩子 td 投下任何阴影,因为他们也是与父母一起长大的。

您需要将父行设置为显示在其自己的子行之上。实现此目的的一种方法是将 td z-index 设置为 -1 并从 tr 中删除所有 z-index。这样做确实会使行的阴影显示在所有单元格的顶部,包括它自己的子单元格,但在 Chrome 和 Firefox 中,呈现效果很糟糕。

要使其正常工作,您还必须确保受 z-index 更改影响的每个元素都将其position 属性设置为非静态。

table tr {
  position: relative;
}

table td {
  position:relative;
  background-color: #EFEFEF;
  z-index: -1;
}

table tr:hover {
  position: relative;
  box-shadow: 
    inset 5px 0 0 #dadce0, 
    inset -3px 0 0 #dadce0, 
    0 5px 2px 0 rgba(60,64,67,.3), 
    0 5px 3px 1px rgba(60,64,67,.15);
}

【讨论】:

  • 我现在遇到了另一个问题,似乎当表格位于具有背景颜色的 div 内时,tds 不可见。检查这个例子:jsfiddle.net/pjz43a52/5
  • @PabloMatiasGomez 这是因为 tds 的 z-index 为 -1,因此它们被呈现在容器 div 下方。要解决此问题,您必须同时提供容器 div 和 <table> 元素 position: relative,并设置 .container 的 z-index 为 0,<table> 的 z-index 为 1。这些 z-index将强制表格及其子项呈现在容器上方。 td 的索引仍将位于行下方,但现在将显示在容器上方。
猜你喜欢
  • 1970-01-01
  • 2020-06-02
  • 2016-11-28
  • 1970-01-01
  • 2020-06-21
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
相关资源
最近更新 更多