《CSS揭秘》笔记(十), 梯形效果

15 篇文章 0 订阅

《CSS揭秘》笔记(十)

梯形效果

3D旋转模拟

并没有一组2D变形属性能生成一个梯形,但是我们可以利用透视关系在css中用3D旋转来模拟出这个效果:

.box1{
  width: 100px;
  height: 50px;
  margin: 20px;
  background-color: #58a;
  transform: perspective(.5em) rotateX(5deg);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wb4v0kXV-1589989910848)(3图形/img/51.png)]

但是如图所示,它依然有瑕疵,容器中的文字也跟着变形了。然而,与2D图形不同的是,它的内部的变形效果是不可逆转的,不能使用逆向变形的来抵消外部变形。

因此我们可以用伪元素的方案把变形效果作用在伪元素上。

.box2{
  position: relative;
  display: inline-block;
  padding: .5em 1em .35em;
  color: white;
}
.box2::before{
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: -1;
  background-color: #58a;
  transform: perspective(.5em) rotateX(5deg);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fk1O62u5-1589989910852)(3图形/img/52.png)]

然而这个方案依然存在着问题,我们还未设置transform-origin,因此应用的变形效果会让这个元素以它自身的中心线为轴进行空间上的旋转,它的尺寸会比较难以掌握。

为了让它的尺寸更好掌握,可以为它指定transform-origin: bottom;,当它在3D空间中旋转时,可以把它的底边固定住,致使它只会有高度上发生变化。在垂直方向的缩放程度(也就是scaleY()变形属性到达130%时,可以弥补变形时高度上的缩水。

.box3{
  position: relative;
  display: inline-block;
  padding: .5em 1em .35em;
  color: white;
  }
.box3::before{
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: -1;
  background-color: #58a;
  transform-origin: bottom;
  transform: perspective(.5em) rotateX(5deg) scaleY(1.3) perspective(.5em);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uoV2Y9R5-1589989910854)(3图形/img/53.png)]

我们把transform-origin修改成bottom leftbottom right,就可以立即得到左侧倾斜或右侧倾斜的梯形。

然而需要注意的是以上的效果中的斜边角度依赖于元素的宽度,对于内容长度不等却想要得到斜度一致的梯形就不合适了。

本篇文章是《CSS揭秘》一书的笔记,如果侵犯到了原著作者的权益,请联系我删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值