IE 8 绝对定位元素在其父剪辑问题之外

Posted

技术标签:

【中文标题】IE 8 绝对定位元素在其父剪辑问题之外【英文标题】:IE 8 absolute positioned element outside its parent clipping problem 【发布时间】:2011-04-17 13:08:59 【问题描述】:

我在另一个绝对定位的 div 中有一个绝对定位的 div。子 div 内容远大于父级可以包含的内容。这是设计使然。我需要子 div 溢出其父级。它在除 IE 8 之外的所有其他浏览器中都这样做(IE 7 看起来不错,不确定)在 IE8 中,超出父级的子级部分被剪裁。它在那里,但只是不可见,可以通过 IE 开发人员工具进行验证。 我尝试了 z-index,尝试显式设置溢出:可见,完全没有运气。

更新:我发现问题是由父 div 中定义的过滤器引起的,如下所示:

-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#66C6DEA2,endColorstr=#66C6DEA2)";

有人知道如何解决这个问题吗?

【问题讨论】:

这让我很头疼 更新是救命稻草 - 这个问题快把我逼疯了! 【参考方案1】:

我用这个How do I stop internet explorer's propriety gradient filter from cutting off content that should overflow?解决了它

我的解决方案稍作修改,只需在您想要透明的容器内放置一个带有“ie_rgba_fix”类的空 div,将此 CSS 添加到特定于 IE 的某个位置,并且孩子不会再像溢出一样剪辑:隐藏

/* IE8 RGB A workaround */
div.ie_rgba_fix

  position: absolute;
  z-index: -1;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: transparent;
  -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#66C6DEA2,endColorstr=#66C6DEA2)";

【讨论】:

【参考方案2】:

尝试在绝对定位元素position:relative 中创建元素,和/或在该绝对定位元素中的所有元素周围添加一个包装器并对其进行相对定位。

【讨论】:

绝对子div中的元素是相对的。它们是两个 div,位置:相对,里面有文本。 我更新了问题,找到了原因,但仍然不知道如何解决。【参考方案3】:

我从此处检查的答案和链接的问题中获得了提示,但不想使用空 DIV(尤其是因为其他浏览器不需要它)。

相反,我设置了使用容器 DIV 的 :before 伪元素的特定于 IE8 的 CSS。

但是,伪元素是styled content,而不是DOM 对象,所以-ms-filter 属性是没有用的。为了妥协,我使用与我想要的原始过滤器匹配的 PNG(实际上是 data: URL,但两者都可以)作为 background-image

i 强制伪元素到容器的全尺寸,绝对定位它,ta-da,子元素在父元素外可见,父元素仍然获得透明度背景。

.container.ie8 
    background-color: transparent;
    position: relative;

.container.ie8:before 
    background-image: url("data:image/png;base64,...");
    display: block;
    height: 100%;
    left: 0;
    position: absolute;
    top: 0;
    width: 100%;

【讨论】:

以上是关于IE 8 绝对定位元素在其父剪辑问题之外的主要内容,如果未能解决你的问题,请参考以下文章

绝对定位( Absolute positioning )

IE8 没有将绝对定位的元素排除在外

css绝对定位

table中绝对定位元素相对td定位失效解决方案

table中绝对定位元素相对td定位失效解决方案

IE6下绝对定位元素父级宽高是奇数,绝对定位元素的right和bottom值会有1个像素的偏差