当前位置: 首页 > Web前端 > HTML5

以小见大!不规则形状按钮解决方法

时间:2023-04-05 16:19:56 HTML5

今天有群友在群里问下面的图形是否可以用CSS实现:emmm,中间那个类似三次贝塞尔曲线的形状用CSS不好实现。我的建议是切图,但是群友要求必须用CSS实现。虽然麻烦,但这个图形用CSS勉强可以实现。本文将讨论上述图形的纯CSS实现,并对其进行一些扩展。尝试实现这个图形其实和我们Chrome的Tab按钮很像,像这样:不同的是Chrome的边实际上是垂直竖线,而上面的要求,边是对角线。首先我们先简单了解一下这个ChromeTab的交互应该怎么实现:我们把这个按钮的形状拆解一下,这里其实是3块的叠加:想清楚两边的圆弧三角形怎么实现就可以了。这里我们还是使用了渐变——径向渐变,其实就是这样的,如下图,我们只需要将黑色部分换成透明即可,使用两个伪元素:代码如下:

.outside-circle{位置:相对;背景:#e91e63;边框半径:10px10px00;&::之前{内容:“”;位置:绝对;宽度:20px;高度:20px;左:-20px;底部:0;背景:#000;背景:径向渐变(圆圈在00,透明20px,#e91e6321px);}&::after{内容:“”;位置:绝对;宽度:20px;高度:20px;右:-20px;底部:0;背景:#000;背景:径向渐变(圆形100%0,透明20px,#e91e6321px);}}得到:上面所有图形的完整代码可以在这里看到:CodePenDemo--CSSVariousButtonShapes|斜杠的效果怎么样?有了右边的图形,是不是很容易得出我们的最终效果呢?像这样:那么,如何实现呢?其实做起来也很容易。这里使用CSS3D旋转形成视觉景深效果实现并排垂直到斜边的变换看代码,其实只有两行代码,基于上面的外圆图形:设置合适的透视值,设置合适的旋转中心transform-origin绕X旋转axis代码很简单,我们其实只需要这样:.outside-circle{position:relative;背景:#e91e63;边框半径:10px10px00;变换:透视(40px)旋转X(20deg);变换原点:50%100%;&::before{...}&::after{...}}核心就在于这两句:transform:perspective(40px)rotateX(20deg)transform-origin:50%100%做一个动画,它会好一点明白一点:对,再重复一遍。这里使用CSS3D旋转,形成视觉景深效果,实现侧面从垂直到斜边的变换。使用这种技巧来实现梯形通常,我们可以使用这种技巧来制作梯形,像这样:.trapezoid{position:relative;宽度:160px;padding:60px;}.trapezoid:before{content:"";位置:绝对;顶部:0;右:0;底部:0;左:0;变换:透视(40px)scaleY(1.3)rotateX(5deg);变换原点:底部;了解之后,还原题图效果就很简单了。我们只需要实现一侧的效果,然后将整个图形向左移动,利用父容器的overflow:hidden将左侧部分剪掉,保留右侧。完整代码如下:
.g-container{position:relative;宽度:300px;高度:100px;背景:#2cb2e0;边框:1px实心#277f9e;边界半径:10px;溢出:隐藏;}.g-inner{位置:绝对;宽度:150px;高度:50px;-半径:020px020px;变换:透视(40px)scaleX(1.4)scaleY(1.5)rotateX(20deg)平移(-10px,0);变换原点:50%100%;&::之前{内容:“”;位置:绝对;右:-10px;宽度:10px;高度:10px;背景:继承;}}这样,我们就完美的实现了题目的效果:完整的在线演示,请点击这里:CodePenDemo--UnregularBorder最后,本文的目的更多的是介绍一个可行的小技巧来实现上面的效果实践中的效果可能有更好的方法,比如裁剪图片?如果有更好的解决办法,请指正。好了,本文到此结束,希望本文对你有所帮助:)更多精彩的CSS技术文章汇总在我的Github——iCSS,持续更新中。欢迎点个星订阅收藏。有什么问题或者建议可以多交流。原创文章文笔有限,知识匮乏。如果文章中有任何不准确的地方,请告诉我。