2013-04-24 91 views
3

这里有一个参考http://cssdesk.com/rHWczCSS - 使用绝对定位

我试图做的是有div的一个是包含在盒子眼影盒阴影覆盖了所有包含的div。我认为使用绝对定位可能会给我一些问题,但它必须是绝对定位的。 无论哪一个,但其中一个盒子的div不能放在盒子阴影的顶部。 任何想法?

+0

你可以提供你迄今尝试过的任何代码吗? – PlantTheIdea 2013-04-24 17:46:11

+0

是的,在我的帖子最顶部的链接是我在做什么 – 2013-04-24 17:47:04

+0

这是由孩子divs背景颜色引起的..如果您将它们设置为'RGBA'而不是一个较低的alpha,它会通过..也..试试看这个问题:http://stackoverflow.com/questions/7870499/how-do-i-make-sure-child-elements-do-not-cover-up-inset-shadow – Dimser 2013-04-24 17:57:57

回答

3

为解决这个问题,您可能需要解决一些问题。第一个是你的HTML是模糊/不良形成:

<div class="out"><div class="left"> 
</div> 
<div class="right"></div> 

我的假设是,你真正的意思是:

<div class="out"> 
<div class="left"></div> 
<div class="right"></div> 
</div> 

(你是缺少一个右</div>

有了这个固定,最简单的解决方案实际上是将潜在标记(.outdiv)的取出,并改为将影子创建为覆盖

例子:

<div class="out"> 
<div class="left"></div> 
<div class="right"></div> 
<div class="shadow"></div> 
</div> 

有了这个做,你可以很容易地放置在要他们.left.right<div>元素,然后迫使.shadowdiv到顶部出现

考虑下面的CSS(我也归你的CSS一些,以减少重复):

.out, .shadow { 
    height: 600px; width: 600px; 
} 
.out { 
    background-color: AliceBlue; 
    position: relative; 
} 
.shadow { 
    background: transparent; 
    -webkit-box-shadow: inset 0px 0px 5px 5px ; 
    box-shadow: inset 0px 0px 5px 5px; 
    position: absolute; top: 0; left: 0; 
} 
.left, .right { 
    height: 100px; width: 100px; 
    bottom: 0; 
    position: absolute; 
} 
.left { 
    background-color: green; 
    left: 0; 
} 
.right { 
    background-color: red; 
    right: 0; 
} 

因为.shadowdiv出现最后,你不需要任何特殊的z-order为了得到它出现在顶部。

Here is a working cssdesk来证明它在行动中。

编辑:

正如在评论中提到 - 原来问题实际上询问只有两个盒子中的一个出现box-shadow下。如果你想他们中的一个出现以上它,只需使其显示.shadow<div>移动这个盒子的HTML标签,就像这样:

<div class="out"> 
<div class="left"></div> 
<div class="shadow"></div> 
<div class="right"></div> 
</div> 

这将导致.right盒(红色的)出现以上的影子,而不是下面 - 不需要任何z-index肮脏。

我已经更新了cssdesk示例来代替显示此版本。

+1

宾果,这就是我想要的。是的,我忘了关闭div,感谢您的注意。敏锐的目光,先生!一切都很好,我现在对事物有了更好的理解! – 2013-04-24 18:24:35

+0

很高兴提供帮助。 :) – 2013-04-24 18:26:52

+0

实际上这不是我想要的,但它会工作。我只想要在阴影下放一个盒子,但是在我的问题中确实如此。我想我现在可以将它索引起来... – 2013-04-24 18:30:03

0
.left, .right { 
    z-index: -1; 
} 

不过,您必须将背景色除去.out。无法在其他人的盒子阴影和背景之间放置元素。

+0

不知怎的在同一个div内使用多个背景? – 2013-04-24 17:53:39

+0

您会遇到与具有z-index的内容进行交互的问题:-1。这有效地将它放在身体下方/后面。 – AndrewHipp 2013-04-24 18:01:01

+0

z-index:-1如果user2118228将z-index添加到父元素,则不是很好的解决方案,如果他必须添加z-index。 – 2013-04-24 18:01:46

0

另一种替代方法是创建另一个元素的高度和宽度的容器,并将其放置在绝对的左上角。

你可以看到一个example here

position:absolute; 
top:0; 
left:0; 
width:100%; 
height:100%; 

你会遇到与不能够点击定位元素下方的任何内容与箱阴影的问题。解决这个问题的方法是在用户悬停时隐藏它。

0

HTML

<div class="wrapper"> 
    <div class="out"></div> 
    <div class="left"></div> 
    <div class="right"></div> 
</div> 

CSS

.wrapper { 
    position: relative; 
    width:600px; 
    height:600px 
} 
.out { 
    width:600px; 
    height:600px; 
    background-color:aliceblue; 
    position:relative; 
    -webkit-box-shadow: inset 0px 0px 5px 5px ; 
    box-shadow: inset 0px 0px 5px 5px; 
    z-index: 2; 
} 
.left { 
    width:100px; 
    height:100px; 
    background-color:green;left:0; bottom:0; 
    position:absolute; 
    z-index: 1; 
} 
.right { 
     width:100px; 
     height:100px; 
     background-color:red;right:0; bottom:0; 
     position:absolute; 
     z-index:4; 
} 

DEMO

http://jsfiddle.net/sqJyw/4/ 

说明

我加上包裹你内容的div,操纵你的samll div的z-index来显示或隐藏它们。

+0

不错的解决方案,尽管你的CSS有点重复,它改变了父母/孩子的关系,这有点挫败了显示盒子阴影“over the divs contained”的目的, – 2013-04-24 18:09:07

+0

这个绿盒子(左)没有显示up ...我使用的是Firefox – 2013-04-24 18:16:42