【问题标题】:CSS3 box-shadow for overlapping-like divsCSS3 box-shadow 用于类似重叠的 div
【发布时间】:2012-01-09 02:48:42
【问题描述】:

我正在尝试用css3实现这个效果:

HTML 代码很像

...
<header>
    ...
</header>

<div id="wrapper">
    ...
</div>
...

目前,css 类似于

header {
    display: block;
    width: 900px;
    height: 230px;
    margin: 0 auto;
    border: 1px solid #211C18;
    ...
    box-shadow: 2px 4px 20px #005377;
    -moz-box-shadow: 2px 4px 20px #005377;
    -webkit-box-shadow: 2px 4px 20px #005377;
}

#wrapper {
    width: 820px;    
    margin: 0 auto;
    ...
    border-right: 1px solid #211C18;
    border-bottom: 1px solid #211C18;
    border-left: 1px solid #211C18;
    ...
    box-shadow: 2px 4px 20px #005377;
    -moz-box-shadow: 2px 4px 20px #005377;
    -webkit-box-shadow: 2px 4px 20px #005377;
}

为了得到想要的结果,我需要:

  1. 隐藏主div的顶部阴影(没问题)
  2. 将标题的底部阴影放在主 div 的前面,而不是像现在这样放在后面。

我已经阅读了很多关于 box-shadow 的内容,但我还没有找到真正让我满意的解决方案...... 有什么想法吗?

【问题讨论】:

    标签: css


    【解决方案1】:

    这个jsfiddle 做你想做的事。

    它的工作方式是使用主要的#wrap 元素,该元素使内容居中并为绝对定位的#main 元素创建坐标图。它这样做是因为它的位置:相对 CSS 规则。您最终会得到以下标记:

    <div id="wrap">
        <header></header>
        <div id="main"></div>
    </div>
    

    然后将header 放置在此内部并给定位置:relative 和 z-index 以将其设置为堆叠在 #main 容器上方。

    最后#main绝对定位在header之下。 CSS 看起来像这样:

    /* centre content and create coordinate map for absolutely positioned #main */
    #wrap {
        width: 300px;
        margin: 20px auto;
        position: relative;
    }
    
    header, #main {
        background: #fff;
    
        /* rounded corners */
        border: 1px solid #211C18;
        border-radius: 5px;
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;    
    
        /* dropshadows */
        box-shadow: 2px 4px 20px #005377;
        -moz-box-shadow: 2px 4px 20px #005377;
        -webkit-box-shadow: 2px 4px 20px #005377;
    }
    
    header {
        display: block;
        width: 300px;
        height: 50px;
    
        /* stack above the #main container */
        position: relative;
        z-index: 2;
    }
    
    #main {
        width: 200px;
        height: 70px;
    
        /* stack below the header and underlap it...if that's even a word */
        position: absolute;
        z-index: 1;
        top: 40px;
        left: 50px;
    }
    

    【讨论】:

    • 非常感谢,您的回答非常详细和有用......但是......如果我有页脚并且#main 高度不固定怎么办(它可以根据页面的内容)?向布局添加绝对位置会将其向上移动...
    • 如果您的header 是固定高度,那么您只需交换CSS 并使标题位置为绝对位置,并使其与相对位置#main 重叠。
    • 哦...看起来问题在于包装折叠,因此它不会跨越所有包含的 div 高度,就像在这个 jsfiddle jsfiddle.net/pbx4L/1 [非常感谢 Pat for让我知道 jsfiddle] 我曾经在使用浮动时处理崩溃的父母,但在这种情况下,我不知道如何解决问题......
    • 这是一个不使用绝对定位也不使用包装元素的简化版本(您真正需要更改的唯一一件事是给headerz-index 更高的z-index main:@987654323 @
    【解决方案2】:

    我只是碰巧使用了相对定位。

    例如。

    第一个 div 有一个 box-shadow 和一个底部边距。第二个 div 在阴影下向上滑动。

    #firstdiv {width: 960px; box-shadow: 5px 5px 5px #ccc; margin-bottom: 10px;}
    #seconddiv {width: 960px; position: relative; top: -10px;}
    

    这不是最好的解决方案,但它对我有用。

    【讨论】:

      【解决方案3】:

      将位置设置为“相对”已经解决了问题!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        相关资源
        最近更新 更多