只投影底部css3

dam*_*000 217 css css3

有没有办法只在底部放下阴影?我有一个菜单,旁边有两张图片.我不想要一个正确的阴影,因为它与正确的图像重叠.我不喜欢使用图像,所以有没有办法将它放在底部,如:

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');
Run Code Online (Sandbox Code Playgroud)

Hri*_*sto 228

更新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;
}
Run Code Online (Sandbox Code Playgroud)
<div id="box" class="box-shadow"></div>
Run Code Online (Sandbox Code Playgroud)

更新3

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

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

HTML

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

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;
}
Run Code Online (Sandbox Code Playgroud)

更新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;
Run Code Online (Sandbox Code Playgroud)

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

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

UPDATE

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

我所做的是创建一个"阴影元素",隐藏在你想要有阴影的实际元素后面.我使"阴影元素"的宽度与实际元素的宽度相差不超过指定阴影的2倍; 然后我正确对齐它.

HTML

<div id="wrapper">
    <div id="element"></div>
    <div id="shadow"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

原始答案

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

-webkit-box-shadow: 0px 5px #000000;
   -moz-box-shadow: 0px 5px #000000;
        box-shadow: 0px 5px #000000;
Run Code Online (Sandbox Code Playgroud)

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

我希望这有帮助.

  • 没有box-shadow-bottom属性,这个效果肯定不需要额外的元素.呸. (9认同)
  • `box-shadow-bottom`虽然有创意,但实际上并不存在. (7认同)
  • 哈哈哈哈哈哈,我们达到了相当的底线! (4认同)
  • 冷静的家伙......这是一个令人讨厌的错字 (3认同)
  • 您不一定需要添加空div来实现模糊阴影.声明中的第三个值:`box-shadow:0 2px 4px#000000`是一个模糊值.见[http://jsfiddle.net/K88H9/7/](http://jsfiddle.net/K88H9/7/).但你会注意到元素左右两侧有一点点模糊,在Hristo的解决方案中没有. (2认同)

Lea*_*rou 65

只需使用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;
}
Run Code Online (Sandbox Code Playgroud)
<div class="shadow">Some content</div>
Run Code Online (Sandbox Code Playgroud)

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

为了看不到侧面的任何阴影,扩散半径(第4个参数)的(绝对值)需要与模糊半径(第3个参数)相同.

  • 再次,**将盒子设为白色**,如 [**this fiddle**](http://jsfiddle.net/MilkyTech/49xpU/1032/) 所示,您仍然会看到阴影一直延伸到侧面,而且现在它还没有完全穿过底部。您愿意在扩展参数上走多远以消除侧面?另外,对于代表数为 151 的人来说,最好不要编辑代表数为 7k 的人的答案。将其留在评论中。 (2认同)

T30*_*T30 24

如果背景上有固定的颜色,则可以使用具有相同背景颜色和blur = 0的两个遮罩阴影隐藏侧阴影效果,例如:

box-shadow: 
    -6px 0 white,         /*Left masking shadow*/
    6px 0 white,          /*Right masking shadow*/
    0 7px 4px -3px black; /*The real (slim) shadow*/
Run Code Online (Sandbox Code Playgroud)

请注意,黑色阴影必须是最后一个,并且具有负展开(-3px),以防止它超出角落.

这里是小提琴(改变遮蔽阴影的颜色,看看它如何工作的).

在此输入图像描述


小智 15

您还可以使用clip-path裁剪(隐藏)所有溢出的边缘,但要显示的边缘:

.shadow {
  box-shadow: 0 4px 4px black;
  clip-path: polygon(0 0, 100% 0, 100% 200%, 0 200%);
}
Run Code Online (Sandbox Code Playgroud)

请参阅剪辑路径 (MDN)。的参数polygon左上点、右上角点、右下点和左下点。通过将底部边缘设置为200%(或任何大于 的数字100%),您可以将溢出限制为仅底部边缘。

例子:

带有右上下和左框阴影的框的示例与剪辑路径隔离

.shadow {
  box-shadow: 0 4px 4px black;
  clip-path: polygon(0 0, 100% 0, 100% 200%, 0 200%);
}
Run Code Online (Sandbox Code Playgroud)
.shadow {
  box-shadow: 0 0 8px 5px rgba(200, 0, 0, 0.5);
}
.shadow-top {
  clip-path: polygon(0% -20%, 100% -20%, 100% 100%, 0% 100%);
}
.shadow-right {
  clip-path: polygon(0% 0%, 120% 0%, 120% 100%, 0% 100%);
}
.shadow-bottom {
  clip-path: polygon(0% 0%, 100% 0%, 100% 120%, 0% 120%);
}
.shadow-left {
  clip-path: polygon(-20% 0%, 100% 0%, 100% 100%, -20% 100%);
}

.shadow-bottom-right {
  clip-path: polygon(0% 0%, 120% 0%, 120% 120%, 0% 120%);
}

/* layout for example */
.box {
  display: inline-block;
  vertical-align: top;
  background: #338484;
  color: #fff;
  width: 4em;
  height: 2em;
  margin: 1em;
  padding: 1em;
}
Run Code Online (Sandbox Code Playgroud)

  • 所以......从根本上来说,clip-path 是溢出:类固醇的隐藏属性。这是干净的。;) (2认同)

Mis*_*lin 5

阅读规格总是更好.没有box-shadow-bottom属性,正如Lea指出的那样,你应该始终将未加前缀的属性放在底部,在前缀之后.

所以这是:

.shadow {
  -webkit-box-shadow: 0px 2px 4px #000000;
  -moz-box-shadow: 0px 2px 4px #000000;
  box-shadow: 0px 2px 4px #000000;
}
Run Code Online (Sandbox Code Playgroud)
<div class="shadow">Some content</div>
Run Code Online (Sandbox Code Playgroud)

  • 侧面有阴影 (3认同)

小智 5

我想这就是你要追求的?

.shadow {
  -webkit-box-shadow: 0 0 0 4px white, 0 6px 4px black;
  -moz-box-shadow: 0 0 0 4px white, 0 6px 4px black;
  box-shadow: 0 0 0 4px white, 0 6px 4px black;
}
Run Code Online (Sandbox Code Playgroud)
<div class="shadow">wefwefwef</div>
Run Code Online (Sandbox Code Playgroud)

  • 当人们根本不理解时,喜欢它.是的,他正在弄乱第一个阴影(白色)的扩散,它将覆盖真实阴影的边缘(黑色).这是获得完美单向阴影的唯一理智方式.当您需要在菜单的两个部分上具有相同的阴影时特别有用. (2认同)

Tem*_*fif 5

另一个想法基于@theengineear 的答案,我将使用inset而不是polygon. 它更容易,因为它的工作方式与边距或填充相同。我还将依靠 CSS 变量来轻松定义所有不同的情况。

.shadow {
  box-shadow: 0 0 8px 5px rgba(200, 0, 0, 0.5);
  clip-path:inset(var(--t,0) var(--r,0) var(--b,0) var(--l,0))
}

.top { --t:-100%; }
.right { --r:-100%;}
.bottom { --b:-100%; }
.left { --l:-100%;}


/* layout for example */

.box {
  display: inline-block;
  vertical-align: top;
  background: #338484;
  color: #fff;
  width: 4em;
  height: 2em;
  margin: 1em;
  padding: 1em;
}
Run Code Online (Sandbox Code Playgroud)
<div class="box">none</div>
<div class="box shadow top right left bottom">all</div>
<div class="box shadow top">top</div>
<div class="box shadow right">right</div>
<div class="box shadow bottom">bottom</div>
<div class="box shadow left">left</div>
<div class="box shadow bottom right">bottom right</div>
<div class="box shadow bottom top">top bottom</div>
<div class="box shadow left top right">top left right</div>
<div class="box shadow left right"> left right</div>
Run Code Online (Sandbox Code Playgroud)