【问题标题】:CSS Box Shadow - Top and Bottom Only [duplicate]CSS框阴影-仅顶部和底部[重复]
【发布时间】:2011-10-04 00:33:40
【问题描述】:

我找不到任何如何做到这一点的示例,但我如何才能只在元素的顶部和底部添加一个盒子阴影?

【问题讨论】:

  • 重复许多其他关于仅在框的特定侧面具有框阴影的问题(请参阅相关列 ->)
  • This Fiddle 可能对某些人有用。
  • 带有多个阴影:stackoverflow.com/a/20596554/1491212 您可能希望将其调整为顶部/底部,但您会明白要点
  • @BoltClock 但我想要外部的盒子阴影,而不是嵌入

标签: css


【解决方案1】:

正如 Kristian 所指出的,对 z 值的良好控制通常会解决您的问题。

如果这不起作用,您可以查看CSS Box Shadow Bottom Only,了解如何使用溢出隐藏来隐藏多余的阴影。

我还记得 box-shadow 属性可以接受以逗号分隔的阴影列表,如下所示:

box-shadow: 0px 10px 5px #888, 0px -10px 5px #888;

这将使您能够控制每个方向的阴影“数量”。

查看http://www.css3.info/preview/box-shadow/ 了解有关 box-shadow 的更多信息。

希望这就是你要找的东西!

【讨论】:

  • 如果有人正在研究如何从单个方向设置 INSET box-shadow,这里是您可以使用的 CSS 模板。仅限顶部inset 0px 8px 6px -6px #888 |仅限权利inset -8px 0px 6px -6px #888 |仅限底部inset 0px -8px 6px -6px #888 |只剩inset 8px 0px 6px -6px #888
【解决方案2】:

经过一些实验,我发现该行中的第四个值控制了传播(至少在 FF 10 中)。我反对垂直偏移并给它们一个负价差。

这是工作笔:http://codepen.io/gillytech/pen/dlbsx

<html>
<head>
<style type="text/css">

#test {
    width: 500px;
    border: 1px  #CCC solid;
    height: 200px;

    box-shadow: 
        inset 0px 11px 8px -10px #CCC,
        inset 0px -11px 8px -10px #CCC; 
}
</style>
</head>
<body>
    <div id="test"></div>
</body>
</html>

这非常适合我!

【讨论】:

  • 这只会产生两个插入框阴影。我错过了什么吗?
  • 这是一个无黑客且干净的解决方案。应标记为正确的恕我直言。 (尽管当前选择的答案提到了这一点)。
  • @yogee 我喜欢您将两个具有负点差和仔细调整位置的阴影称为“无黑客解决方案”:-)
  • @Antoine - ...因为它是。那是规范特别允许的规范和值……他只是将参数调整为所需的效果。这到底是什么“黑客”?
  • 这正是我为 模拟盒子阴影所需的缺失组件(它必须被模拟,因为阴影只显示在 上;使用此处的技术来形成中间的 ,然后在第一个和最后一个使用变体,效果很好)。
【解决方案3】:

所以这是我在这里的第一个答案,因为我需要类似的东西,所以我对 2 个内阴影使用伪元素和一个额外的 DIV 用于上外阴影。不知道这是否是最好的解决方案,但也许它会对某人有所帮助。

HTML

<div class="shadow-block">
    <div class="shadow"></div>
    <div class="overlay">
        <div class="overlay-inner">
            content here
        </div>
    </div>
</div>

CSS

.overlay {
    background: #f7f7f4;
    height: 185px;
    overflow: hidden;
    position: relative;
    width: 100%; 
}

.overlay:before {
    border-radius: 50% 50% 50% 50%;
    box-shadow: 0 0 50px 2px rgba(1, 1, 1, 0.6);
    content: " ";
    display: block;
    margin: 0 auto;
    width: 80%;
}

.overlay:after {
    border-radius: 50% 50% 50% 50%;
    box-shadow: 0 0 70px 5px rgba(1, 1, 1, 0.5);
    content: "-";
    display: block;
    margin: 0 auto;
    position: absolute;
    bottom: -65px;
    left: -50%;
    right: -50%;
    width: 80%;
}

.shadow {
    position: relative;
    width:100%;
    height:8px;
    margin: 0 0 -22px 0;
    -webkit-box-shadow: 0px 0px 50px 3px rgba(1, 1, 1, 0.6);
    box-shadow: 0px 0px 50px 3px rgba(1, 1, 1, 0.6);
    border-radius: 50%;
}

【讨论】:

    【解决方案4】:

    我玩过它,我想我有一个解决方案。下面的例子展示了如何设置 Box-Shadow 以便它只在元素的插入顶部和底部显示阴影。

    图例:insetOption leftPosition topPosition blurStrength spreadStrength color

    说明
    完成此操作的关键是将模糊值设置为 0 当从主要定位值中减去时(例如,使用上面的示例,模糊值应为 -9 及以上,因此为我们提供了模糊值介于 -5 和 -9 之间的最佳值)。

    解决方案

    .styleName {   
    /* for IE 8 and lower */
    background-color:#888; filter: progid:DXImageTransform.Microsoft.dropShadow(color=#FFFFCC, offX=0, offY=0, positive=true);  
    
    /* for IE 9 */ 
    box-shadow: inset 0px 2px -2px 2px rgba(255,255,204,0.7), inset 0px -2px -2px 2px rgba(255,255,204,0.7); 
    
    /* for webkit browsers */ 
    -webkit-box-shadow: inset 0px 2px -2px 2px rgba(255,255,204,0.7), inset 0px -2px -2px 2px rgba(255,255,204,0.7); 
    
    /* for firefox 3.6+ */
    -moz-box-shadow: inset 0px 2px -2px 2px rgba(255,255,204,0.7), inset 0px -2px -2px 2px rgba(255,255,204,0.7);   
    }
    

    【讨论】:

    • Firefox 33.1.1 声明这些是标签上不正确的属性值。无论我使用 box-shadow 还是 -moz-box-shadow,我都无法模拟您解决方案的基本租户,即使用负模糊值。
    【解决方案5】:

    本质上,阴影是在实际盒子后面偏移的盒子形状。为了隐藏部分阴影,您需要创建额外的 div 并将它们的 z-index 设置在阴影框上方,以使阴影不可见。

    如果您想对阴影进行非常具体的控制,请将它们构建为图像并创建具有适量填充和边距的容器 div。然后使用 png 修复以确保阴影在所有浏览器中都正确呈现

    【讨论】:

    • 在盒子后面使用无缝背景时这可能吗?如果我添加另一个框并给它一个背景颜色,它看起来不正确,因为图案背景不会出现。
    • 据我所知,这行不通。
    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    相关资源
    最近更新 更多