2011-02-03 43 views
4

请考虑下面这个例子:(working example如何使绝对定位的(溢出:隐藏)容器的绝对定位的孩子显示在父母的区域之外?

的样式声明:

body {background:#333;font:1em Arial, Helvetica, sans-serif;} 
h1 {color:#ececec;text-align:center;margin:1.5em 0 1em;} 
h2 {font-weight:normal;font-size:1.15em; 
    padding-bottom:5px;border-bottom:1px solid #999;} 
p {padding-right:1em;color:#000;} 
pre {font-size:1em;color:#06f;margin:1em 0;} 

#wrapper {position:absolute;width:100px;height:100px;background:#ececec; 
      overflow:hidden;zoom:1;padding:20px;border-bottom:1px solid #000; 
      border-right:1px solid #000;border-top:1px solid #fff; 
      border-left:1px solid #fff;} 
.css {float:right;width:50%;} 
.markup {float:left;width:50%;margin-right:-1px;} 
.box1, 
.box2, 
.box3, 
.box4 {background:#fff;position:absolute;padding:10px;border:1px solid #333;} 
.box1 {left:0;top:-20px;} 
.box2 {right:0;top:0;} 
.box3 {left:0;bottom:0;} 
.box4 {right:-20px;bottom:-20px;} 

标记:

<body> 
<h1>overflow:hidden and absolutely positioned elements</h1> 
<div id="wrapper"> 
<div class="markup"> 

     <div class="box1">box 1</div> 
     <div class="box2">box 2</div> 
     <div class="box3">box 3</div> 
     <div class="box4">box 4</div> 
</div> 
</body> 

正如你所看到的,Box1Box4被裁剪。我如何让它们在包含div的边界之外可见?基本上这些框应该像工具提示一样显示(它们必须是页面上最顶层的元素)。关于首选的解决方案

标准:

  • 没有标记修改
  • 没有用CSS3
  • 的工程跨浏览器
  • id为wrapper在div必须保持 绝对定位的,并且必须保持overflow:hidden

编辑:我知道我的要求很难,但我必须与他们合作。我必须在一个我无法控制的环境中解决这个任务。

编辑#2:好的,这里是为什么我需要的方块不能在标记中重新定位。在具体的情况下,我想将它们用作其他元素的工具提示(特别是BeautyTips)。工具提示在DOM树中的位置是库的内部运作的结果。当我想使用BeautyTips时,在我的示例中可以看到的问题阻止了整个工具提示的显示:它被剪裁。

+2

我不是CSS专家,但肯定'overflow:hidden`的整点是子div不会出现在外面?如果你不想要它的功能,为什么你需要`overflow:hidden`? – 2011-02-03 21:26:03

+2

你没有发现你的要求不合逻辑吗?这就像要求某人跑100公里,而手刹准备就绪,并且你推动刹车 – Sotiris 2011-02-03 21:27:15

回答

6

你试图做的事情是不可能的,你所设定的条件。根据定义,overflow:隐藏了在父元素的视口外延伸的后代元素中的任何内容或内容。

要使其工作的唯一方法是删除溢出:隐藏或移动包装器外面的剪辑框。

http://www.w3.org/TR/CSS21/visufx.html

2

那么,您的方框#wrapper是第一个非默认定位的祖先,因此形成box1box4的边界框。并且由于您已将#wrapper设置为overflow: hidden,因此它将隐藏box1box4的重叠其边缘的部分。

您可以从#wrapper删除overflow: hidden,或者您可以将这些框移到#wrapper之外。

0

wrapper其完成删除overflow:hidden

相关问题