最近UI小姐姐休假了,优惠券缺了我几个切图,不好意思打扰人家,就寻思着,干脆用css直接手写吧。
这里记一下实现思路。
先来看看效果图:
看着还行叭。
主要是这几个地方的样式:
- 左上角书签;
- 优惠券票孔;
- 右上角状态标签。
1. 左上角书签
书签这里又分成两个部分,一部分是整体的半圆角矩形,一部分是左上的那个小折角。
半圆角矩形很好实现:
height: 20px;
border-radius: 0 20px 20px 0;
小折角是利用绝对定位和skew
变换:
display: block;
width: 2px;
height: 5px;
background: #db0113;
transform: skewY(-40deg);
position: absolute;
top: -1px;
left: 0;
z-index: 0;
书签整体也是利用绝对定位,固定在左上角:
position: absolute;
top: 10px;
left: -2px;
width: 100%;
max-width: 120px;
2. 优惠券票孔
优惠券以虚线为分界,分割成上下两部分。票孔也是利用绝对定位,可以固定在上半部分的底部,也可以固定在下半部分的顶部。颜色须与背景色相同。如写在上半部分中:
.dot-left,
.dot-right {
display: block;
width: 12px;
height: 12px;
border-radius: 50%;
background: #f5f5f5;
position: absolute;
z-index: 999;
}
.dot-left {
bottom: -6px;
left: -6px;
}
.dot-right {
bottom: -6px;
right: -6px;
}
3. 右上角状态标签
状态标签的倾斜用的是rotateZ
,需要计算好大致的长宽和偏移:
width: 80px;
height: 20px;
background: #dd0d1f;
position: absolute;
right: -20px;
top: 10px;
transform: rotateZ(45deg);
text-align: center;
color: #fff;
font-size: 12px;
示例代码
Demo是从项目里直接编译出来的,有点乱,仅供参考:
https://jsrun.net/IT9Kp/edit
如果有更好的实现方案,欢迎留言发我~~~
往期文章
当我们谈Currying时,我们在谈些什么
现代包管理工具:pnpm
硬核!手撕源码第一弹: UpdateNotifier
前端转后端是一种怎样的体验
当程序员遇到会写代码的产品经理…
手摸手写个webpack plugin
手摸手写个webpack loader
这锅我背了…
ES2021新特性
用魔法打败魔法:前端代码规范化
手摸手教你搭个脚手架
手摸手教你搭建npm私有库
requestAnimationFrame