仅限顶部,左侧和右侧的CSS3 Box Shadow

时间:2011-02-05 20:49:49

标签: css3

问候,

我正在尝试将CS​​S3框阴影仅应用于DIV的顶部,右侧和左侧,其半径与以下CSS的结果相匹配(减去底部阴影)

 #div {
    -webkit-box-shadow: 0px 0px 10px #000;
    -moz-box-shadow: 0px 0px 10px #000;
    box-shadow: 0px 0px 10px #000;
}

实现这一目标的最佳方法是什么?

谢谢!

更新 此阴影将应用于页面上的导航栏,该栏位于主容器DIV的顶部。我想要完成的是将主DIV的盒子阴影继续放在位于其上方的导航栏上,但导航栏上没有底部阴影。看一下site itself,看看我在说什么,比在这里添加所有HTML和CSS更容易。

更新2 由于与我合作的DIV是单数,而不是试图在每个导航上留下阴影,我选择将其更改为以下内容:

-webkit-box-shadow: 0px -4px 7px #e6e6e6;
    -moz-box-shadow: 0px -4px 7px #e6e6e6;
    box-shadow: 0px -4px 7px #e6e6e6;

这使阴影的顶部非常明显,但这是我想要完成的 - 如果有人知道如何保持阴影在容器DIV外观相同,请告诉我。谢谢!

10 个答案:

答案 0 :(得分:26)

使用价差......

box-shadow具有以下值

box-shadow: x y blur spread color;

所以你可以使用像..

这样的东西
box-shadow: 0px -10px 10px -10px black;

更新:我正在添加jsfiddle

答案 1 :(得分:18)

如果你只用另一个div覆盖底部部分会更好,你会得到一致的阴影。

#servicesContainer {
  /*your css*/
  position: relative;
}

它已经修复了!像魔术一样!

答案 2 :(得分:14)

您可以为 box-shadow 属性提供多个值
例如

-moz-box-shadow: 0px 10px 12px 0px #000,
                    0px -10px 12px 0px #000;
-webkit-box-shadow: 0px 10px 12px 0px #000,
                    0px -10px 12px 0px #000;
box-shadow: 0px 10px 12px 0px #000,
            0px -10px 12px 0px #000;

只有的投影,您可以根据您的要求进行调整

答案 3 :(得分:7)

我找到了用“:after”覆盖阴影的方法,这是我的代码:

#div:after {
    content:"";
    position:absolute;
    width:5px;
    background:#fff;
    height:38px;
    top:1px;
    right:-5px;
}

答案 4 :(得分:4)

以下代码为我制作了右侧的阴影插图:

-moz-box-shadow: inset -10px 0px 10px -10px #000;
-webkit-box-shadow: inset -10px 0px 10px -10px #000;
box-shadow: inset -10px 0px 10px -10px #000;

希望它会有所帮助!!!!

答案 5 :(得分:1)

添加单独的答案,因为它完全不同。

您可以使用rgba并将Alpha通道设置为低(以获得透明度),以使您的投影不太明显。

尝试这样的事情(使用.5)

-webkit-box-shadow: 0px -4px 7px rbga(230, 230, 230, .5);
-moz-box-shadow: 0px -4px 7px rbga(230, 230, 230, .5);
box-shadow: 0px -4px 7px rbga(230, 230, 230, .5);

希望这有帮助!

答案 6 :(得分:1)

我遇到了同样的问题,正在寻找解决这个问题的可能想法。

我的标签已经有了一些CSS,这对我有用:

(请特别注意padding-bottom: 2px;内的#tabs #selected a {。它会整齐地隐藏底部box-shadow并使用以下CSS为我效果很好。)

#tabs {
    margin-top: 1em;
    margin-left: 0.5em;
}
#tabs li a {
    padding: 1 1em;
    position: relative;
    top: 1px;
    background: #FFFFFF;
}
#tabs #selected {
    /* For the "selected" tab */
    box-shadow: 0 0 3px #666666;
    background: #FFFFFF;
}
#tabs #selected a {
    position: relative;
    top: 1px;
    background: #FFFFFF;
    padding-bottom: 2px;
}
#tabs ul {
    list-style: none;
    padding: 0;
    margin: 0;
}
#tabs li {
    float: left;
    border: 1px solid;
    border-bottom-width: 0;
    margin: 0 0.5em 0 0;
    border-top-left-radius: 3px;
    border-top-right-radius: 3px;
}

我认为我会把它作为另一个可能的解决方案,让任何人都为此深思熟虑。

答案 7 :(得分:1)

我知道这是非常古老的,但这些答案都没有帮助我,所以我正在添加我的答案。这与@ yichengliu的答案一样,使用伪::after元素。

#div {
    position: relative;
}



#div::after {
    content: '';
    position: absolute;
    right: 0;
    width: 1px;
    height: 100%;
    z-index: -1;

    -webkit-box-shadow: 0px 0px 5px 0px rgba(0,0,0,1);
    -moz-box-shadow: 0px 0px 5px 0px rgba(0,0,0,1);
    box-shadow: 0px 0px 5px 0px rgba(0,0,0,1);
}

/*or*/

.filter.right::after {
    content: '';
    position: absolute;
    right: 0;
    top: 0;
    width: 1px;
    height: 100%;
    background: white;
    z-index: -1;

    -webkit-filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 1));
    filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 1));
}

Fiddle

如果您决定更改投影的X(drop-shadowbox-shadow的第一个像素测量值),更改宽度将有所帮助,因此看起来不会有白色间隙div和阴影之间。

如果您决定更改投影的Y(drop-shadowbox-shadow的第二个像素测量值),更改高度将有助于出于与上述相同的原因。

答案 8 :(得分:0)

#div:before {
 content:"";
 position:absolute;
 width:100%;
 background:#fff;
 height:38px;
 top:1px;
 right:-5px;
}

答案 9 :(得分:0)

我通过将div放在导航链接上解决了此类问题

 <div [ngClass]="{'nav-div': tab['active']}"></div>

,然后将此CSS赋予它。

.nav-div {
    width: inherit;
    position: relative;
    height: 8px;
    background: white;
    top: 4px
  }

和导航链接css为

 .nav-link {
    position: relative;
    top: 8px;

    &.active {
      box-shadow: rgba(0, 0, 0, 0.3) 0 1px 4px -1px;
    }
  }

希望这会有所帮助!