如何用纯 CSS 实现优惠券效果

本文通过分析优惠券的视觉元素,详细介绍了如何使用CSS实现优惠券的主要框架,包括挖空效果、投影和父容器的运用。通过巧妙地利用伪元素和display属性,成功创建了接近最终效果的优惠券样式。
部署运行你感兴趣的模型镜像

背景

本文来自CODE.FUN  ,讲述如何用纯 CSS 实现优惠券效果的实践案例,分享给大家。

优惠券视觉效果

上面是优惠券的视觉效果,本文分享如何使用纯 CSS 实现它的主要框架,希望对大家有帮助。

0. 分析

首先,我们来分析一下这个优惠券的实现方案。

左边是摘要,右边是详情,这个部分用 display:flex 很容易就能搞定。中间的虚线,使用任意一个容器边框 + 少许 padding 即可实现。其它部分,也就是些字体行高,都不是很复杂。难点在于投影,尤其是左右两个挖空的半圆。

1. 尝试实现挖空效果

  1. 首先,我们给整个优惠券矩形加上投影

  2. 然后,我们给两边加上两个包含内投影的圆形

  3. 这个时候,两边的内投影原型会多出来一块,我们需要把它们盖住。但是,不能让矩形 overflow:hidden,因为投影也会变,如下图。

中间效果

.coupon {
  width: 15rem;
  height: 6rem;
  background: white;
  box-shadow: 1px 1px 6px rgba(0,0,0,.15);
  position: relative;
  overflow: hidden;
  
  &::before,
  &::after {
    background-color: white; 
    border-radius: 1rem;
    box-shadow: inset 1px 1px 6px rgba(0, 0, 0, 0.15);
    content: '';
    width: 2rem;
    height: 2rem;
    position: absolute;
    top: 2rem;
    z-index: 1;
  }  

  &::before {
    left: -1rem;
  }
  &::after {
    right: -1rem;
  }
}

2. 增加父容器

我的第一反应是增加父容器,让父容器 overflow:hidden 来隐藏多出来的部分。但是不行,会影响投影。

但是转念一想,我们可以不让父容器限制显示内容,而是在父容器内部增加一些元素,遮蔽多出来的内容。比如用两个纯色圆形,把竖着的阴影遮起来。

于是我把上面的样式更名为 .coupon-inner,然后增加一个父容器。父容器的 ::before ::after 伪元素都搞成略小一圈的纯色圆形,把竖着的投影挡住,最终效果如下图。

接近最终效果

3. 总结

到这里,效果就基本让人满意了。最终完成的代码如下:

.coupon {
  width: 15rem;
  height: 6rem;
  position: relative;
  
  &::before,
  &::after {
    content: '';
    position: absolute;
    top: calc(2rem + 2px);
    width: calc(2rem - 4px);
    height: calc(2rem - 4px);
    background-color: white;
    z-index: 2;
  }  

  &::before {
    left: -1rem;
    border-radius: 0 calc(1rem - 2px) calc(1rem - 2px) 0;
  }

  &::after {
    right: -1rem;
    border-radius: calc(1rem - 2px) 0 0 calc(1rem - 2px);
  }
}

.coupon-inner {
  width: 100%;
  height: 100%;
  background: white;
  box-shadow: 1px 1px 6px rgba(0,0,0,.15);
  position: relative;
  overflow: hidden;
  
  &::before,
  &::after {
    background-color: white; 
    border-radius: 1rem;
    box-shadow: inset 1px 1px 6px rgba(0, 0, 0, 0.15);
    content: '';
    width: 2rem;
    height: 2rem;
    position: absolute;
    top: 2rem;
    z-index: 1;
  }

  &::before {
    left: -1rem;
  }

  &::after {
    right: -1rem
  }
}

你也可以在 codepen 里做进一步的调整:

前往 CodePen

使用纯 CSS 的好处,在于体积小、加载快,调整起来非常灵活。我们建议前端开发者,能用 CSS 最好都用 CSS。

有任何问题和建议,欢迎评论、讨论。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值