当前位置:   article > 正文

纯CSS的方式实现优惠券的波浪、内凹圆形_css设置边角凹陷

css设置边角凹陷

· CSS3中的径向渐变属性radial-gradient。没错,它一个用来实现渐变的属性,渐变是从一种颜色逐渐过度到另一种颜色,像这样:


首先画一个半径为10px的圆(不是用border-radius哦),效果如下:

1
2
3
4
5
6
7
.wavy-line {
    width: 100%;
    height: 50px;
    background-image: -webkit-radial-gradient(circle, transparent, transparent 10px, #fff 10px, #fff);
    background-image: -moz-radial-gradient(circle, transparent, transparent 10px, #fff 10px, #fff);
    background-image: radial-gradient(circle, transparent, transparent 10px, #fff 10px, #fff);
}

以上transparent是透明色,上面的css代码意思是从0px开始,到10px的位置都是透明色,然后从10px开始,一直到结束都是用白色。用这种一个颜色的开始即另一个颜色的结束的方法,可以巧妙的避过颜色的逐渐过度,画出边线分明的圆形。

现在默认这个圆以外的白色部分是占满整个屏幕的,接着,我们要限定包围圆的区域的大小,此处用background-size,效果如下:


上面代码设置了背景图案的大小是20px*20px,前面设置了半径为10px的圆,这样的背景大小刚好可以包含直径为20px的圆。

接下来要改变高度,使得高度刚好适应半个圆:

.wavy-line {
    width: 100%;
    height: 10px;
    background-image: -webkit-radial-gradient(circle, transparent, transparent 10px, #fff 10px, #fff);
    background-image: -moz-radial-gradient(circle, transparent, transparent 10px, #fff 10px, #fff);
    background-image: radial-gradient(circle, transparent, transparent 10px, #fff 10px, #fff);
    background-size: 20px 20px;
}



可以看到,一条波浪线就出来了,如果还想给波浪线再加上边框,可以继续在radial-gradient中增加一层颜色,像这样:

.wavy-line {
    width: 100%;
    height: 10px;
    background-image: -webkit-radial-gradient(circle, transparent, transparent 9px, orange 9px, orange 10px, transparent 10px, transparent);
    background-image: -moz-radial-gradient(circle, transparent, transparent 9px, orange 9px, orange 10px, transparent 10px, transparent);
    background-image: radial-gradient(circle, transparent, transparent 9px, orange 9px, orange 10px, transparent 10px, transparent);
    background-size: 20px 20px;
}

=====================================================


整理了一下网上看的思路,都是通过radial-gradient画圆形渐变,并且把渐变2头的透明度都设为0,这样容器就出现了一个个的洞,再把不需要看到的洞遮起来


  1. .sawtooth{
  2. /* 画出一个半径为5px的透明的圆,透明圆以外都是#e24141颜色 */
  3. background-image: radial-gradient(transparent 0, transparent 5px, #e24141 5px);
  4. /* 截取上面生成的渐变图的一部分,相当于截取15px的正方形中有一个直径10px的透明圆点 */
  5. background-size: 15px 15px;
  6. /* 根据优惠券div大小进行微调 */
  7. background-position: 8px 3px;
  8. }

原理如下:

  1. .sawtooth{
  2. background-image: radial-gradient(transparent 0, transparent 5px, #e24141 5px);
  3. background-size: 100px 100px;
  4. background-repeat: no-repeat;
  5. }

再用:before元素做背景遮住洞

  1. .sawtooth {
  2. background-image: radial-gradient(transparent 0, transparent 5px, #e24141 5px);
  3. background-size: 15px 15px;
  4. background-position: 8px 3px;
  5. /* 相对定位,让before伪元素方便定位 */
  6. position: relative;
  7. }
  8. .sawtooth:before {
  9. content: ' ';
  10. display: block;
  11. /* 用相同的颜色覆盖 */
  12. background-color: #e24141;
  13. /* 绝对定位,遮住中间所有的洞,只保留边角的锯齿 */
  14. position: absolute;
  15. top: 0;
  16. bottom: 0;
  17. /* 为锯齿保留的距离 */
  18. left: 10px;
  19. right: 10px;
  20. z-index: -1;
  21. }

双层背景实现遮罩

background-clip


将网装背景剪裁区域设置为border-box,纯色背景裁剪区域设置为padding-box用来遮罩。

  1. .sawtooth {
  2. /* 注意:radial-gradient是作为background-image属性设置的,而纯色#e24141是作为background-color属性设置的 */
  3. background: border-box radial-gradient(transparent 0, transparent 5px, #e24141 5px), padding-box #e24141;
  4. background-size: 15px 15px;
  5. background-position: 8px 3px;
  6. border-left: 10px solid transparent;
  7. border-right: 10px solid transparent;
  8. position: relative;
  9. }

压扁的波浪线:

  1. width: 390px;
  2. background: radial-gradient(rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 6px, #50ADD3 4px);
  3. background-size: 12px 10px;
  4. background-position: -6px 43px;
  1. .sawtooth {
  2. background-image: radial-gradient(transparent 0, transparent 4px, #e24141 4px);
  3. background-size: 12px 8px;
  4. background-position: -5px 10px;
  5. position: relative;
  6. }
  7. .sawtooth:before {
  8. content: ' ';
  9. display: block;
  10. background-color: #e24141;
  11. position: absolute;
  12. top: 0;
  13. bottom: 0;
  14. left: 6px;
  15. right: 6px;
  16. z-index: -1;
  17. }

来源:https://blog.csdn.net/Holmofy/article/details/79648343

http://oddjohn.github.io/blog/css3-wavy-line/



还有类似这样写内凹圆角的思路,其实一脉相承,这个博客写的比较浅显,适合理解

https://blog.csdn.net/qq_16415157/article/details/52818993


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/950922
推荐阅读
相关标签
  

闽ICP备14008679号