纯css实现:如何做个完美的平行四边形

您所在的位置:网站首页 怎样画一个平行四边形 纯css实现:如何做个完美的平行四边形

纯css实现:如何做个完美的平行四边形

2023-05-06 17:03| 来源: 网络整理| 查看: 265

这是我参与更文挑战的第20天,活动详情查看: 更文挑战

前言

大家好哇,这个周末过的开心吗?美好的时光总时过的特别快,和朋友小聚,带狗子出去跑半天,周末就这么一眨眼没了。但是想到今天的日更大业还没完成,又充满了熬夜的干劲。

今天我们来用css来做一个平行四边形,这个问题是我之前面试中遇到的,当时只想到用skew()去进行一个扭曲斜向拉伸的效果,考虑的不是很全面,所以今天我们就来重新深入的聊一下制作平行四边形的相关的css知识。

实现过程

既然想到了利用 skew() 去做一个扭曲斜向拉伸的效果,我们就必须对这个属性有着一定的了解:

skew()定义了一个元素在二维平面上的倾斜转换,接收两个参数:

ax,表示用于沿横坐标扭曲元素的角度。

ay,表示用于沿纵坐标扭曲元素的角度。如果未定义,则其默认值为0,导致纯水平倾斜。

另外要特别提示一点:这个元素加给行内元素是不会生效的,同样的行内元素也不会继承这个属性值。

我们可以简单实现看一下:

h1{ margin: 300px auto; width: 200px; height: 100px; background-color: cornflowerblue; color: bisque; transition: all 3s; } h1:hover{ transform: skewX(-45deg); } 南极大冰块 复制代码

运行一下,实现效果如下:

GIF 2021-6-20 22-56-34.gif

变形是没问题了,可是里面的内容也跟着变形是怎么回事啊喂!

既然是把里面的内容也给扭曲了,那我直接把里面的内容再加个 skew() 给它扭回来~ 于是我三下五除二把代码改成了这样:

div{ margin: 300px auto; width: 200px; height: 100px; background-color:cornflowerblue; transition: all 3s; } h1{ color: bisque; transition: all 3s; } div:hover{ transform: skewX(-45deg); } div:hover h1{ transform: skewX(45deg); } 南极大冰块 复制代码

运行一下,实现效果如下:

GIF 2021-6-20 23-05-34.gif

看起来是没什么问题了,但是我们必须要在里面多加一个盒子包裹住所有内容才能解决问题,实在是太麻烦了,并且这个结构看起来也不太友好。如果回头要修改的时候,一眼看不出加了一层盒子包裹住元素到底是要干嘛。

那么,是不是还有更好的方法呢?没错,出场吧!万能的伪元素!!!

我们可以利用给伪元素添加属性 skew() 去做一个扭曲斜向拉伸的效果,这样扭曲的效果只会作用于这个伪元素,我们不必担心盒子内容也会被造成不必要的扭曲。只需要利用 position:absolute 使得伪元素完全继承主元素的宽高即可,如下代码:

h1{ margin: 300px auto; width: 200px; height: 100px; position: relative; color: bisque; } h1::after{ content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color:cornflowerblue; transition: all 3s; } h1:hover::after{ transform: skewX(-45deg); } 南极大冰块 复制代码

运行一下,实现效果如下:

GIF 2021-6-20 23-21-51.gif

哎哎哎~ 伪元素怎么把主元素内容给覆盖掉了?这就不得不提一句注意点了:伪元素生成的内容层级要比当前元素的层级高 ,同时当前元素的所有事件,伪元素也会被继承。在之前的文章《如何控制css鼠标样式以及扩大鼠标点击区域 | 周末学习》中,就是利用了这个属性达到点击扩大鼠标点击区域的效果。

所以我们只要给伪元素添加一个 z-index: -1 即可~

h1{ margin: 300px auto; width: 200px; height: 100px; position: relative; color: bisque; } h1::after{ content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color:cornflowerblue; transition: all 3s; z-index: -1; } h1:hover::after{ transform: skewX(-45deg); } 南极大冰块 复制代码

运行一下,实现效果如下:

GIF 2021-6-20 23-25-03.gif

完美搞定一个平行四边形!!!同样的道理,如果要做圆形菱形什么的肯定也不在话下~

后记

今天是我坚持日更的第二十天,时间过得好快,更文不知不觉已经二十天了,这个周末也结束了~ 每天输出一点点,进步一点点。有志者,事竟成。大家一起加油呀~

如果本文对你有帮助,关注大冰块,点个赞吧~

更文挑战的文章目录如下: 2021.06.01 《多图预警!详细谈谈Flex布局的容器元素和项目元素的属性~》 2021.06.02 《如何把css渐变背景玩出花样来》 2021.06.03 《如何使用SVG制作沿任意路径排布的文字效果》 2021.06.04 《3大类15小类前端代码规范,让团队代码统一规范起来!》 2021.06.05 《团队管理之git提交规范:大家竟然都不会写commit记录?| 周末学习》 2021.06.06 《如何控制css鼠标样式以及扩大鼠标点击区域 | 周末学习》 2021.06.07 《纯css实现:仿掘金账户密码登录时,小熊猫捂眼动作切换的小彩蛋》 2021.06.08 《从11个方面详细谈谈原型和原型链》 2021.06.09 《深入谈谈JavaScript的作用域及作用域链》 2021.06.10 《JavaScript中的闭包究竟是什么》 2021.06.11 《纯css实现:炫酷的视频文本蒙版效果》 2021.06.12 《申请一个免费的毒鸡汤api,并且用原生JS实现竖行文本的打字机效果》 2021.06.13 《纯css实现:多行文本框内的斑马条纹效果》 2021.06.14 《原生JS实现触摸滑动监听事件》 2021.06.15 《原生JS实现鼠标滚轮触发页面横向滚动》 2021.06.16 《原生JS实现跳转或刷新页面时,浏览器提示当前页面未保存》 2021.06.17 《原生JS的三大基础弹框探究》 2021.06.18 《纯css实现:固定在页面底部的按钮》 2021.06.19 《纯css实现:单行文本的打字机动画效果》


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3