如何在元素的一侧添加框阴影?

til*_*lda 425 css shadow css3 box-shadow

我需要在某个block元素上创建一个box-shadow ,但仅在(例如)右侧.我做的方式是包装内部元件box-shadow到外层一个padding-rightoverflow:hidden;这样的阴影其他三面是不可见的.

有没有更好的方法来实现这一目标?喜欢box-shadow-right

编辑:我的意图是创建阴影的垂直部分.repeat-y与规则的作用完全相同background:url(shadow.png) 100% 0% repeat-y.

Kyl*_*yle 549

是的,您可以使用box-shadow规则的shadow spread属性:

.myDiv
{
  border: 1px solid #333;
  width: 100px;
  height: 100px;
  box-shadow: 10px 0 5px -2px #888;
}
Run Code Online (Sandbox Code Playgroud)
<div class="myDiv"></div>
Run Code Online (Sandbox Code Playgroud)

第四个属性-2px是阴影扩散,你可以用它来改变阴影的扩散,使阴影看起来只在一侧.

这也使用阴影定位规则10px将其发送到右侧(水平偏移)并将其0px保持在元素下(垂直偏移).

5px 是模糊半径:)

你在这里的例子.

  • 感谢您指出我不知道的事情,但我的意图是创建*仅*阴影的垂直部分.完全相同的背景:url(shadow.png)100%0%repeat-y会做什么. (11认同)
  • 如果你不打算让阴影在角落处衰减,这个效果很好.我也提出了这个解决方案,但在大多数情况下(对于一侧的阴影),阴影小于元素是错误的,从而打破了错觉(如果它是如此预期的),所述元素是"提出"或"3D". (6认同)
  • 但是这个阴影没有模糊,包括模糊使它从其他部分出来.如果你通过减少差价来解释这个问题,它会在你真正想要它的那一边过早地结束.UGHHHHH (5认同)
  • @Tillda你应该将此标记为答案,以便其他人在搜索解决方案时显示在顶部.我几乎驳回了这种阅读评论和接受答案的造型方法. (4认同)

Luk*_*uke 42

clip-path现在(2020 年)是在元素的特定侧面实现框阴影的最简单方法之一,尤其是当所需的效果是特定边缘处的“干净切割”阴影时(我相信这是 OP 最初寻找的),例如这个:

.shadow-element {
    border: 1px solid #333;
    width: 100px;
    height: 100px;
    box-shadow: 0 0 15px rgba(0,0,0,0.75);
    clip-path: inset(0px -15px 0px 0px);
}
Run Code Online (Sandbox Code Playgroud)
<div class="shadow-element"></div>
Run Code Online (Sandbox Code Playgroud)

...与这样的衰减/减少/变薄的阴影相反:

.shadow-element {
    border: 1px solid #333;
    width: 100px;
    height: 100px;
    box-shadow: 15px 0px 15px -10px rgba(0,0,0,0.75);
}
Run Code Online (Sandbox Code Playgroud)
<div class="shadow-element"></div>
Run Code Online (Sandbox Code Playgroud)

只需将以下 CSS 应用于相关元素:

box-shadow: 0 0 Xpx [hex/rgba]; /* note 0 offset values */
clip-path: inset(Apx Bpx Cpx Dpx);
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • Apx 设置顶部边缘的阴影可见性
  • Bpx
  • Cpx 底部
  • Dpx 剩下

为应隐藏阴影的任何边缘输入值 0,为应显示阴影的任何边缘输入负值(与 box-shadow 模糊半径 - 相同Xpx)。

  • 非常感谢!太棒了! (4认同)
  • 完美的。这么多未知的 CSS 东西。当你第一次看到它们时,听起来几乎是化妆的。 (4认同)
  • 惊人的!! (3认同)
  • 我认为对于那些不需要支持 IE11 的人来说,这是现在最好的答案。谢谢! (2认同)

Puy*_*yol 32

我自制的解决方案易于编辑:

HTML:

<div id="anti-shadow-div">
    <div id="shadow-div"></div>
</div>?
Run Code Online (Sandbox Code Playgroud)

CSS:

#shadow-div{
    margin-right:20px; /* Set to 0 if you don't want shadow at the right side */
    margin-left:0px; /* Set to 20px if you want shadow at the left side */
    margin-top:0px; /* Set to 20px if you want shadow at the top side */
    margin-bottom:0px; /* Set to 20px if you want shadow at the bottom side */
    box-shadow: 0px 0px 20px black; 
    height:100px;
    width:100px;
    background: red;
}

#anti-shadow-div{
    margin:20px;
    display:table;
    overflow:hidden;
}?
Run Code Online (Sandbox Code Playgroud)

演示:http:
//jsfiddle.net/jDyQt/103


Jac*_*zak 22

要在最多两侧获得剪切效果,可以使用具有背景渐变的伪元素.

header::before, main::before, footer::before, header::after, main::after, footer::after {
    display:    block;
    content:    '';
    position:   absolute;
    width:      8px;
    height:     100%;
    top:        0px;
}

header::before, main::before, footer::before {
    left:       -8px;
    background: linear-gradient(to left, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}

header::after, main::after, footer::after {
    right:      -8px;
    background: linear-gradient(to right, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}
Run Code Online (Sandbox Code Playgroud)

将在通常组成文档的元素的左侧和右侧添加一个漂亮的阴影效果.

  • @BananaAcid我为任何需要它的人创建了一个演示:http://jsfiddle.net/jDyQt/1198/ (2认同)

rie*_*rsn 11

只需使用:: after或:: before之前的元素来添加阴影.将其设为1px并将其放置在您想要的任何一侧.以下是top的示例.

footer {
   margin-top: 50px;
   color: #fff;
   background-color: #009eff;
   text-align: center;
   line-height: 90px;
   position: relative;
}

footer::after {
    content: '';
    position: absolute;
    width: 100%;
    height: 1px;
    top: 0;
    left: 0;
    z-index: -1;
    box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.75);
}
Run Code Online (Sandbox Code Playgroud)
<footer>top only box shadow</footer>
Run Code Online (Sandbox Code Playgroud)


小智 5

这是我的例子:

.box{
        
        width: 400px; 
        height: 80px; 
        background-color: #C9C; 
        text-align: center; 
        font: 20px normal Arial, Helvetica, sans-serif; 
        color: #fff; 
        padding: 100px 0 0 0;
        -webkit-box-shadow: 0 8px 6px -6px black;
           -moz-box-shadow: 0 8px 6px -6px black;
                box-shadow: 0 8px 6px -6px black;
    }
Run Code Online (Sandbox Code Playgroud)
<div class="box">
</div>
Run Code Online (Sandbox Code Playgroud)