具有特定停止的CSS3水平淡入阴影?

时间:2014-03-03 23:05:02

标签: html css css3

所以,我正在尝试使用纯CSS来制作一个覆盖标签的轻微阴影。我希望它在20%和80%的两端淡出。我已经尝试了一段时间来实现这一点,但发现自己对目前的结果并不满意。

这是我想要的图像:

Shadow Tab

HTML:

<button type="button" class="btn">
    <span>Button Text</span>
    <span class="buttonshadow"></span>
</button>

CSS:

.btn {
    -webkit-border-radius: 0px;
    -webkit-border-bottom-right-radius: 5px;
    -webkit-border-bottom-left-radius: 5px;
    -moz-border-radius: 0px;
    -moz-border-radius-bottomright: 5px;
    -moz-border-radius-bottomleft: 5px;
    border-radius: 0px;
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    font-size: 24px;
    padding: 6px 16px 7px;
    line-height: 1;
    position: relative;
    color: #ffffff;
    background-color: #5CBCEC;
    border-color: #5CBCEC;
    display: inline-block;
    margin-bottom: 0;
    background-image: none;
    border: 1px solid transparent;
    white-space: nowrap;
    overflow: visible;
}
.buttonshadow {
    width: 120%;
    height: 100%;
    position: absolute;
    top: 0;
    left: -10%;
}
.buttonshadow:before {
    content: "";
    position: absolute;
    z-index: 1;
    top: -1px;
    left: 0;
    width: 100%;
    height: 5px;
    background: -webkit-radial-gradient(50% -3%, ellipse cover, rgba(00, 00, 00, 0.2), rgba(97, 97, 97, 0.0) 40%);
    background: radial-gradient(ellipse at 50% 0%, rgba(0, 0, 0, 0.4), rgba(97, 97, 97, 0) 70%);
}

到目前为止,这是我当前的小提琴:JSFiddle

显然这看起来不一样。非常感谢任何帮助!!!

3 个答案:

答案 0 :(得分:3)

如果我正确理解了问题,你需要边缘按钮外的渐变。

问题在于.buttonshadow.buttonshadow:before

我把它改成了

.buttonshadow {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: -25px;
}
.buttonshadow:before {
    content: "";
    position: absolute;
    z-index: 1;
    top: -1px;
    left: 0;
    width: 130%;
    height: 5px;
    background: -webkit-radial-gradient(50% -3%, ellipse cover, rgba(00, 00, 00, 0.2), rgba(97, 97, 97, 0.0) 40%);
    background: radial-gradient(ellipse at 50% 0%, rgba(55, 55, 55, 1), rgba(97, 97, 97, 0) 80%);
}

检查小提琴

http://jsfiddle.net/rLsbC/1/

然后你可以随意使用渐变来获得更多你想要的东西。 希望这有帮助!

注意:如果您想更改渐变的宽度,请更改.buttonshadow:before中的宽度和.buttonshadow中的左侧属性

答案 1 :(得分:2)

这是一个可能适合您的解决方案。

<强> Demo Fiddle

为了在末端获得褪色,我不得不将径向渐变压缩一点,然后将其定位为正确。我将它添加到.btn类而不是单独的元素。

CSS:

.btn:after {
    content: '';
    display: block;
    position: absolute;
    width: 120%;
    height: 5px;
    top: -2px;
    left: -10%;
    background: -webkit-radial-gradient(center, ellipse cover, rgba(0,0,0,0.45) 0%,rgba(0,0,0,0) 85%); 
}

答案 2 :(得分:1)

  

[我,之前通过评论] 我尝试在按钮的整个宽度上使用跨度的线性渐变,然后通过两侧的椭圆渐变添加褪色阴影在跨度上使用:before / :after元素...

好的,我现在就试着去了 - http://jsfiddle.net/rLsbC/3/

很抱歉,这只是Firefox现在,因为我没有打扰其他浏览器的供应商前缀 - 但添加这些应该不是什么大问题。 (对于那些实际上支持径向渐变的人来说。)

我用span元素替换了线性渐变

中的阴影
background: linear-gradient(to bottom, rgba(0, 0, 0, 0.4) 0%,
  rgba(97, 97, 97, 0) 100%);

然后添加定位:before / :after,其中椭圆形径向渐变位于右上角。这些生成元素的左上角,如此

background: -moz-radial-gradient(top right, ellipse cover, rgba(0, 0, 0, 0.4),
  rgba(97, 97, 97, 0) 50%);

必须使span元素本身高一点才能获得线性渐变,椭圆形元素粘在它的两侧以匹配。

如果你把它作为基础并使用渐变的特定值(以及生成元素的宽度/位置),你应该能够非常接近你想要的。