CSS画直角梯形

目标

想做这样一个pk进度条的效果
效果图

思路

我们最终的实现目标是一个带圆角的直角梯形,无法直接画出,但我们可以画出一个矩形后面拼接一个平行四边形。平行四边形可以利用CSS transform属性的skewX函数画出,如下图。
元素组成
最后利用transform属性的translateX函数将平行四边形移到合适位置就可以实现我们的需求。

代码实现

<div class="box">
	<div class="left-box">赞成</div>
	<div class="right-box">反对</div>
</div>
.box {
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
}

.left-box,.right-box {
  display: flex;
  justify-content: center;
  align-items: center;
  color: rgba(255, 255, 255, 1);
  font-weight: 600;
  font-size: 32px;
  position: relative;
  top: 0;
  left: 0;
  width: 400px;
  height: 200px;
}
.left-box {
  border-radius: 100px 0 0 100px;
  background-color: rgb(41, 223, 56);
  margin-right: 120px;
}
.right-box {
  border-radius: 0 100px 100px 0;
  background-color: rgb(219, 52, 52);
  margin-left: 120px;
}
.left-box::after, .right-box::before {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  z-index: -1;
}
.left-box::after {
  right: -120px;
  left: 100%;
  background: rgb(41, 223, 56);
  transform: translateX(-50px) skewX(-15deg);
  border-radius: 0 30px 30px 0;
}
.right-box::before {
  right: 100%;
  left: -120px;
  background: rgb(219, 52, 52);
  transform: translateX(50px) skewX(-15deg);
  border-radius: 30px 0 0 30px;
}

感觉矩形圆角也单独用伪元素实现更好一点

.box {
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
  padding: 0 5vh;
}

.left-box,.right-box {
  display: flex;
  justify-content: center;
  align-items: center;
  color: rgba(255, 255, 255, 1);
  font-weight: 600;
  font-size: 16px;
  position: relative;
  top: 0;
  left: 0;
  width: 30vw;
  height: 5vh;
  z-index: 2;
}
.left-box {
  background-color: rgb(41, 223, 56);
  margin-right: 8vw;
}
.right-box {
  background-color: rgb(219, 52, 52);
  margin-left: 8vw;
}
.left-box::before, .right-box::after {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  z-index: -1;
}
.left-box::before{
  left: -5vh;
  right: 100%;
  border-radius: 50%;
  transform: translateX(50%);
  background-color: rgb(41, 223, 56);
}
.right-box::after {
  left: 100%;
  right: -5vh;
  border-radius: 50%;
  transform: translateX(-50%);
  background-color: rgb(219, 52, 52);
}
.left-box::after, .right-box::before {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  z-index: -1;
}
.left-box::after {
  right: -10vw;
  left: 100%;
  background: rgb(41, 223, 56);
  transform: translateX(-5vw) skewX(-15deg);
  border-radius: 0 1vh 1vh 0;
}
.right-box::before {
  right: 100%;
  left: -10vw;
  background: rgb(219, 52, 52);
  transform: translateX(5vw) skewX(-15deg);
  border-radius: 1vh 0 0 1vh;
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值