在表格单元格内时出现 CSS z-index 问题

Posted

技术标签:

【中文标题】在表格单元格内时出现 CSS z-index 问题【英文标题】:CSS z-index issue when inside of table cell 【发布时间】:2012-05-10 05:34:21 【问题描述】:

我有一个日历/表格,当您将鼠标悬停在每一天上时,我们有一个小弹出窗口,绝对位于每个单元格下方。

为了完成这项工作,我在每个单元格中添加了一个<div style="relative" />。在 FF 中可以正常工作,尽管当您在 IE 中将鼠标悬停在它上面时,z-index 将被忽略。

我已经尝试了所有我能想到的让它在 IE 7 + 8 中工作的技巧。

【问题讨论】:

这里现在没有 ie 但你尝试过 display: inline 吗? 既然弄乱 z-index 会变得很混乱,最好的解决方案是将所有弹出窗口放在表格之外和之后。这将解决您的分层问题。 给我们你的代码人! Arr ze C0dez 在哪里! 【参考方案1】:

不需要.wrapper div 中td 元素内的所有单独的z-indexes(我相信它们都可以设置为1),并设置这些属性:

/* add these two to your selector */
#calendar tbody td 
  position: relative;
  z-index: 1;


/* create this new selector */
#calendar tbody td:hover 
  z-index: 2;

使用 firebug 和 IE 的开发人员工具,在我看来它可以在 Firefox 和 IE7 和 8 中运行。

【讨论】:

虽然相对位置在td 上不起作用,但这一半有效,所以我在每个单元格内添加了一个.wrapper div。然后td:hover .wrapper【参考方案2】:

尝试在tabletd 上设置position: relativez-index

【讨论】:

【参考方案3】:

在绝对定位的悬停元素中,放置一个相对定位的 div 并为其设置一个类似 500 的 z-index。Ie7 将绝对定位和相对定位的元素视为具有单独的 z-index 堆栈

<div class="hoverContent" style="opacity: 1; display: none;">
    <div style='position:relative;z-index:500;'>
        <a class="btn popme" >Book Now</a>
        <p>content etc</p>
        <label></label>
    </div>
</div>

我猜是这样的

【讨论】:

解决这个问题的好主意,虽然这也没有任何区别【参考方案4】:

我以前用它来帮助我解决类似的问题: http://css-tricks.com/snippets/jquery/fixing-ie-z-index/

如果这没有帮助,是否给表本身的 z-index 设置为 1 或更低是否重要?

【讨论】:

虽然没有效果,但我在 smarty 中实现了这一点 通过增加 z-index 得到与 @JustinY 相同的答案 现在查看演示,我已经在 smarty 而不是 jquery 中添加了这个 我在笔记本电脑上查看了它在 IE7 和 IE8 中运行的演示。你修好了吗?【参考方案5】:

该问题可能是由 IE 的 z-index 堆叠问题引起的,如this answer 相关问题所述。

在您的示例中,我能够通过将 z-index 添加到表格单元格内的 div.wrapper 来解决 z-index 问题。

要绕过之前和之后的单元格分层,您必须使用 javascript 更改单元格的 z-index。

但是由于弄乱 z-index 会变得一团糟,最好的解决方案是将所有弹出窗口放在表格之外和之后。这将解决您的分层问题,而无需疯狂/骇人的 CSS。

【讨论】:

遗憾的是,使用您增加 z-index 的方法,这永远不会在像日历这样的表格网格中工作,因为您总是在之前/之后/上方/下方有一个单元格 @JohnMagnolia 我建议将弹出窗口放在桌子外面。【参考方案6】:

问题是.hoverContent.wrapper 的子级,您应该移动它使其处于同一水平:

 <td class="available">
    <div class="wrapper" style="z-index: 0;">
        <span class="date">10</span><strong class="price">£200</strong>
        <a href="/victory_cottage/booking/init/id/1/from/1336611600/nights/7" class="link popme"></a>
    </div>
    <div class="hoverContent">...

td 设置为position:relative,将.hoverContent 设置为position:absolute,这将解决您的问题。

【讨论】:

【参考方案7】:

如果您的组件本身是绝对定位并临时显示在其他组件之上,只需将其添加到顶层即页面,然后您就不必担心表格的 z 顺序或定位类型。

【讨论】:

以上是关于在表格单元格内时出现 CSS z-index 问题的主要内容,如果未能解决你的问题,请参考以下文章

excel输入时出现后面文字被覆盖了怎么办?

表格单元格内的css绝对位置:奇怪的Firefox显示

excel输入时出现后面文字被覆盖了怎么办?

如何在表格单元格内垂直对齐 div?

如何在固定大小的表格单元格内按比例缩放图像

重用表格视图单元格时出现问题?