如何仅在元素的一侧创建阴影?

新手上路,请多包涵

有没有办法只在底部放置阴影?我有一个菜单,其中有 2 张图像并排放置。我不想要正确的阴影,因为它与正确的图像重叠。我不喜欢为此使用图像,所以有没有办法将其仅放在底部,例如:

box-shadow-bottom: 10px #FFF; 或类似的?

 -moz-box-shadow: 0px 3px 3px #000;
-webkit-box-shadow: 0px 3px 3px #000;
box-shadow-bottom: 5px #000;
/* For IE 8 */
-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=180, Color='#000000')";
/* For IE 5.5 - 7 */
filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=180, Color='#000000');

原文由 damage000 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 630
2 个回答

更新 4

与更新 3 相同,但具有现代 css(=更少规则),因此不需要对伪元素进行特殊定位。

 #box {
    background-color: #3D6AA2;
    width: 160px;
    height: 90px;
    position: absolute;
    top: calc(10% - 10px);
    left: calc(50% - 80px);
}

.box-shadow:after {
    content:"";
    position:absolute;
    width:100%;
    bottom:1px;
    z-index:-1;
    transform:scale(.9);
    box-shadow: 0px 0px 8px 2px #000000;
}
 <div id="box" class="box-shadow"></div>

更新 3

我之前的所有答案都是使用额外的标记来创建这种效果,这不是必需的。我认为这是一个 清洁的解决方案……唯一的技巧是使用这些值来获得正确的阴影定位以及阴影的正确强度/不透明度。这是一个新的小提琴,使用 伪元素

http://jsfiddle.net/UnsungHero97/ARRRZ/2/

HTML

 <div id="box" class="box-shadow"></div>

CSS

 #box {
    background-color: #3D6AA2;
    width: 160px;
    height: 90px;
    margin-top: -45px;
    margin-left: -80px;
    position: absolute;
    top: 50%;
    left: 50%;
}

.box-shadow:after {
    content: "";
    width: 150px;
    height: 1px;
    margin-top: 88px;
    margin-left: -75px;
    display: block;
    position: absolute;
    left: 50%;
    z-index: -1;
    -webkit-box-shadow: 0px 0px 8px 2px #000000;
       -moz-box-shadow: 0px 0px 8px 2px #000000;
            box-shadow: 0px 0px 8px 2px #000000;
}

更新 2

显然,正如其他人刚刚指出的那样,您只需在 box-shadow CSS 中添加一个额外的参数即可做到这一点。这是演示:

http://jsfiddle.net/K88H9/821/

CSS

 -webkit-box-shadow: 0 4px 4px -2px #000000;
   -moz-box-shadow: 0 4px 4px -2px #000000;
        box-shadow: 0 4px 4px -2px #000000;

这将是一个更好的解决方案。添加的额外参数描述为:

第四个长度是传播距离。正值会使阴影形状在所有方向上扩展指定的半径。负值会导致阴影形状收缩。

更新

查看 jsFiddle 的演示:http: //jsfiddle.net/K88H9/4/

我所做的是创建一个“阴影元素”,它将隐藏在您想要拥有阴影的实际元素后面。我使“阴影元素”的宽度比实际元素的宽度精确地小了您指定的阴影的 2 倍;然后我正确对齐它。

HTML

 <div id="wrapper">
    <div id="element"></div>
    <div id="shadow"></div>
</div>

CSS

 #wrapper {
    width: 84px;
    position: relative;
}
#element {
    background-color: #3D668F;
    height: 54px;
    width: 100%;
    position: relative;
    z-index: 10;
}
#shadow {
    background-color: #3D668F;
    height: 8px;
    width: 80px;
    margin-left: -40px;
    position: absolute;
    bottom: 0px;
    left: 50%;
    z-index: 5;
    -webkit-box-shadow: 0px 2px 4px #000000;
       -moz-box-shadow: 0px 2px 4px #000000;
            box-shadow: 0px 2px 4px #000000;
}

原始答案

是的,您可以使用您提供的相同语法来执行此操作。第一个值控制水平定位,第二个值控制垂直定位。因此,只需将第一个值设置为 0px 并将第二个值设置为您想要的任何偏移量,如下所示:

 -webkit-box-shadow: 0px 5px #000000;
   -moz-box-shadow: 0px 5px #000000;
        box-shadow: 0px 5px #000000;

有关框阴影的更多信息,请查看以下内容:

我希望这有帮助。

原文由 Hristo 发布,翻译遵循 CC BY-SA 4.0 许可协议

只需使用 spread 参数使阴影变小:

 .shadow {
  -webkit-box-shadow: 0 6px 4px -4px black;
  -moz-box-shadow: 0 6px 4px -4px black;
  box-shadow: 0 6px 4px -4px black;
}
 <div class="shadow">Some content</div>

现场演示: http ://dabblet.com/gist/a8f8ba527f5cff607327

为了在两侧看不到任何阴影,传播半径(第四个参数)的(绝对值)需要与模糊半径(第三个参数)相同。

原文由 Lea Verou 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题