用纯css做几何图形的技巧(一)[通俗易懂]

用纯css做几何图形的技巧(一)[通俗易懂]其实各种做法都有优缺点:图片:简单,没啥技术含量,但是要另外调用尺寸较大的图片文件,也不方便变换大小和颜色。

欢迎大家来到IT世界,在知识的湖畔探索吧!

css一般用于布局排版,不过在某些场合css也可以方便地生成几何图形,比如下面这样的图形:

用纯css做几何图形的技巧(一)[通俗易懂]

几何图形的生成方案

当我们想要显示上面这些几何图形,怎么做呢?有很多种方案,一般是插入一个图片,或者用js在canvas上画一个,也可以用上次讲的图标字体来做,哪种方案好呢?其实各种做法都有优缺点:

  • 图片:简单,没啥技术含量,但是要另外调用尺寸较大的图片文件,也不方便变换大小和颜色,典型的体力活儿
  • canvas:优点是灵活性大,但手工绘制有点麻烦,跟图文排版混入也有些不方便
  • 图标字体:形状有限,要另配字库文件,单独制作也很麻烦
  • CSS的解决方案:简单,快速高效,灵活,无需配合其他技术,也便于跟图文的混排,但主要靠动脑筋来解决问题,有时候弄复杂了就比较烧脑

几何图形的纯CSS解决方案

所以今天开始,我们就说一些用纯css的解决方案,从核心技术上,大致可分3种:

1、 以边框特性为核心,配合旋转和拼接

2、 以clip-path为核心的剪切手法

3、 以内联SVG为核心的解决方案

以边框特性为核心生成几何图形的原理

今天讲的是第一种方案,其原理非常有意思,我们先做一个三角形了解下:

html代码,1个div块就够了

<div class=”SanJiaoU”></div>

css代码如下:

.SanJiaoU {

border-left: 70px solid transparent;

border-right: 70px solid transparent;

border-bottom: 120px solid #e00;

}

好了,一个漂亮的三角形出现了

用纯css做几何图形的技巧(一)[通俗易懂]

是不是很神奇呢?现在来说一下它的原理,你就恍然大悟了!

用纯css做几何图形的技巧(一)[通俗易懂]

原理很巧妙,仔细看这个手绘图,它利用的是矩形的边框在4个角上天然形成的斜边交界当矩形设置成宽高都是0的时候,主体没了,但还剩下边框的4个角连在一起可见,此时只要把不需要的边框部分设置成透明,剩下的就是我们要的三角了。

在前面的例子里,上下左右4条边框我们只设置了3个,其中上边框无,左右边框宽70颜色为透明,下边框宽120颜色为红色,于是就显示出红色下边框与左右透明边框交界形成的三角了,它的底边宽是70×2=140,高是120。

几何图形应用示例

原理明白了,那么刚才是正三角,倒三角怎么做呢?类推一下,显然应该是由上边框与左右透明边框来形成,也就是把 border-bottom 改成 border-top,其余不变

.SanJiaoD {

border-left: 70px solid transparent;

border-right: 70px solid transparent;

border-top: 120px solid #e00;

}

成功:

用纯css做几何图形的技巧(一)[通俗易懂]

好,现在我们就开始神奇的CSS形状养成之旅吧!

我把形状一个个贴出来,你先动动脑筋看自己能不能琢磨出来,然后参考下我的css代码和提示,这个过程还是蛮有意思的。

用纯css做几何图形的技巧(一)[通俗易懂]

.SanJiaoL {

border-top: 70px solid transparent;

border-bottom: 70px solid transparent;

border-right: 120px solid #e00;

}

向左的三角是以右边框为主体形成的

用纯css做几何图形的技巧(一)[通俗易懂]

.SanJiaoR {

border-top: 70px solid transparent;

border-bottom: 70px solid transparent;

border-left: 120px solid #e00;

}

向右的三角是以左边框为主体形成的

嗯,看着没难度,现在变一下,直角三角形怎么弄?其实更简单,直角只需2个边框就可以构成,看看这两个图形:

用纯css做几何图形的技巧(一)[通俗易懂]

.SanJiaoZUL {

border-left: 120px solid transparent;

border-bottom: 120px solid #e00;

}

.SanJiaoZUR {

border-right: 120px solid transparent;

border-bottom: 120px solid #e00;

}

倒过来呢?

用纯css做几何图形的技巧(一)[通俗易懂]

.SanJiaoZDL {

border-left: 120px solid transparent;

border-top: 120px solid #e00;

}

.SanJiaoZDR {

border-right: 120px solid transparent;

border-top: 120px solid #e00;

}

稍微变通一下,试试立体的,这个是指南针形状:

用纯css做几何图形的技巧(一)[通俗易懂]

/*上面2个尖*/

.SanJiaoU2 {

border-left: 20px solid transparent;

border-bottom: 90px solid #d00;

position: relative;

}

.SanJiaoU2::after {

content: “”;

border-right: 20px solid transparent;

border-bottom: 90px solid #a00;

position: absolute;

}

/*下面2个尖*/

.SanJiaoD2 {

border-left: 20px solid transparent;

border-top: 90px solid #d00;

position: relative;

}

.SanJiaoD2::after {

content: “”;

border-right: 20px solid transparent;

border-top: 90px solid #a00;

position: absolute;top:-90px;

}

原理很简单,2个直角三角形左右拼接,颜色不同,然后上下再拼接。

注意啊,这里用了after这个伪类,目的就是拼接下一个形状。由于有拼接,所以就需要通过

position和left,top这几个属性来控制2个元素的位置,详细看代码,在后面的示范中,我们会大量用到这个技巧。

用纯css做几何图形的技巧(一)[通俗易懂]

.JianTou1 {

width: 80px; height: 80px;

transform: rotate(-45deg);

box-shadow: 25px 25px 0px 0 red;

}

这是一个箭头,我们先用box-shadow这个属性做一个直角,然后用 transform: rotate 旋转45度,得到这个箭头。这个技巧后面也会大量使用,请留意!

用纯css做几何图形的技巧(一)[通俗易懂]

.JianTou2 {

width: 80px; height: 80px;

transform: rotate(-45deg);

box-shadow: 25px 25px 0px 0 red;

position: relative;

}

.JianTou2::after{

content: “”;

width: 80px; height: 80px;

box-shadow: 25px 25px 0px 0 red;

position: absolute;left:40px;top:40px;

}

会做一个箭头,当然就会做2个箭头,用after拼接一下就行了

用纯css做几何图形的技巧(一)[通俗易懂]

.JianTou3 {

width: 160px; height: 80px;

background:

linear-gradient(-135deg, transparent 27px, #e00 0) top right,

linear-gradient( -45deg, transparent 27px, #e00 0) bottom right;

background-size: 100% 50%;

background-repeat: no-repeat;

border-radius:10px;

color:#fff;font-size: 32px;line-height: 80px;padding-left: 30px;

}

导航箭头,这个代码是用 linear-gradient 在矩形的右侧上下各切了一个角做成的。

用纯css做几何图形的技巧(一)[通俗易懂]

.TiXing{

width: 90; height: 0;

border-left: 60px solid transparent;

border-right: 60px solid transparent;

border-bottom: 60px solid #e00;

}

梯形跟三角形的区别,仅仅是width非0而!

用纯css做几何图形的技巧(一)[通俗易懂]

.PingXing{

width: 160px; height: 60px; margin-left: 30px;

transform: skew(-45deg);

background:#e00;

}

平行四边形,是用 transform: skew 把正常的矩形推歪一个角度即可,简单吧!

好,前面还都是比较简单的形状,现在来点复杂的

用纯css做几何图形的技巧(一)[通俗易懂]

.LiuJiao{

border-left: 70px solid transparent;

border-right: 70px solid transparent;

border-top: 115px solid #e00;

position: relative;

}

.LiuJiao::after{

content: “”;

border-left: 70px solid transparent;

border-right: 70px solid transparent;

border-bottom: 115px solid #e00;

position: absolute;left:-70px;top: -155px;

}

六角形,是2个三角形,一上一下,一正一反,通过after拼接

用纯css做几何图形的技巧(一)[通俗易懂]

.WuBian{

border-left: 73px solid transparent;

border-right:73px solid transparent;

border-bottom: 53px solid #e00;

position: relative;

}

.WuBian::after{

content:””; width: 90; height: 0;

border-left: 28px solid transparent;

border-right:28px solid transparent;

border-top: 86px solid #e00;

position: absolute;top:53px;left:-73px;

}

五边形,是三角形加梯形

用纯css做几何图形的技巧(一)[通俗易懂]

.BaBian{

width: 140px; height: 60px;

background-color: #e00;

position: relative;

}

.BaBian::before,.BaBian::after{

content:””; width: 60; height: 0;

border-left: 40px solid transparent;

border-right:40px solid transparent;

position: absolute;

}

.BaBian::before{ top: 60px;border-top: 40px solid #e00; }

.BaBian::after { top:-40px;border-bottom: 40px solid #e00; }

八边形,我是用矩形加一前一后两个梯形,用的是before和after来拼接前后梯形。

用纯css做几何图形的技巧(一)[通俗易懂]

.Xin{

width: 80px;height: 80px;

background-color: #e00;

transform: rotate(-45deg);

position: relative;left:30px;

}

.Xin::before,.Xin::after{

content: “”;width: 80px;height: 80px;

border-radius:80px;

background-color: #e00;

position: absolute;

}

.Xin::before{ left: 0px;top:-40px;}

.Xin::after { left:40px;top: 0px;}

心形,是以一个方块为核心(转45度),用before和after外加2个圆组成的,有意思吧?

用纯css做几何图形的技巧(一)[通俗易懂]

.PingXingXie{

width: 160px; height: 60px;

transform: rotate(-45deg) skew(-45deg);

background:#e00;

}

斜的平行四边形,显然是rotate和 skew 两个变形处理合起来造成的。

用纯css做几何图形的技巧(一)[通俗易懂]

.ShuiDi{

width: 60px; height: 60px;

border: 20px solid #e00;

border-radius: 50px 0 50px 50px;

transform: rotate(-45deg);

}

空心的水滴,看着很复杂,其实很简单,正方形的4个角,把其中3个设置成圆角,然后整体旋转45度让尖朝上就可以了,核心就是一句 border-radius: 50px 0 50px 50px; 好奇妙啊!

用纯css做几何图形的技巧(一)[通俗易懂]

.ShuiDi1{

border: 50px solid #e00;

border-radius: 50px 0 50px 50px;

transform: rotate(-45deg);

}

实心的水滴,跟前面的手法略有不同,我是把正方形的边长弄成0,然后直接用边框形成的!

用纯css做几何图形的技巧(一)[通俗易懂]

.ShuiDi2{

width: 60px; height: 60px;

border: 20px solid #e00;

border-radius: 50px 0 50px 50px;

transform: rotate(45deg);

}

.ShuiDi2::after{

width: 60px; height: 60px;

content: “”;

border: 20px solid #e00;

border-radius: 50px 0 50px 50px;

transform: rotate(-180deg);

position: absolute; top: -100px;left: 60px;

}

这是水滴的另一个变通使用,2个水滴拼接而成

用纯css做几何图形的技巧(一)[通俗易懂]

.LingXing{

width: 100px; height: 100px;

background-color: #e00;

transform: rotate(45deg);

}

菱形,就是正方形旋转一下

用纯css做几何图形的技巧(一)[通俗易懂]

.ZuanShi{

border-left: 70px solid transparent;

border-right: 70px solid transparent;

border-bottom: 40px solid #e00;

position: relative;

}

.ZuanShi::after{

content: “”;

border-left: 70px solid transparent;

border-right: 70px solid transparent;

border-top: 80px solid #e00;

position: absolute; left:-70px;top: 40px;

}

钻石,是2个三角拼接,代码有点粗暴,可能有更好的做法

用纯css做几何图形的技巧(一)[通俗易懂]

.ZuanShi1{

width:70px;

border-left: 25px solid transparent;

border-right: 25px solid transparent;

border-bottom: 40px solid #e00;

position: relative;

}

.ZuanShi1::after{

content: “”;

border-left: 60px solid transparent;

border-right: 60px solid transparent;

border-top: 80px solid #e00;

position: absolute; left:-25px;top: 40px;

}

平头的钻石,是梯形和三角拼接

用纯css做几何图形的技巧(一)[通俗易懂]

.JianTou{

width:10px;

border-left: 5px solid transparent;

border-right: 5px solid transparent;

border-bottom: 100px solid #e00;

position: relative;left:50px;

}

.JianTou::after{

content: “”;

border-left: 30px solid transparent;

border-right: 30px solid transparent;

border-top: 20px solid #e00;

position: absolute; left:-25px;top: 100px;

}

箭头,仍然是梯形和三角的拼接,异曲同工!

用纯css做几何图形的技巧(一)[通俗易懂]

.Zui{

border: 50px solid red;

border-radius: 50px;

position: relative;

transform: rotate(-45deg);

}

.zui::after{

content: “”;

width:50px;height: 50px;

background-color: #fff;

position: absolute;

}

大嘴,圆形拼接正方形(旋转)

用纯css做几何图形的技巧(一)[通俗易懂]

.DunPai{

width: 120px; height: 160px;

background-color: red;

border-radius: 80% 80% 80% 80% / 20% 20% 80% 80%;

}

盾牌,通过调整border-radius圆角的弧度而形成

用纯css做几何图形的技巧(一)[通俗易懂]

.MsgBox{

width: 250px;min-height:40px;

border-radius: 15px;

background-color: #e00;

position: relative;left:20px;

padding:20px;color:#fff;font-size:24px;

}

.MsgBox::after{

content: “”;

width: 20px;height: 20px;

background-color: #e00;

position: absolute; top:30px;left:-10px;

transform: rotate(-45deg);

}

聊天的气泡,圆角矩形与正方形(旋转45度)拼接

用纯css做几何图形的技巧(一)[通俗易懂]

.Hua12{

width: 100px;height:100px;

background-color: #e00;

position: relative;left: 30px;

}

.Hua12::before,.Hua12::after{

content: “”;

width: 100px;height: 100px;

background-color: #e00;

position: absolute;left:0;top:0;

}

.Hua12::before{transform: rotate(30deg);}

.Hua12::after {transform: rotate(60deg);}

大红花!是3个正方形旋转角度后拼接而成

用纯css做几何图形的技巧(一)[通俗易懂]

.TaiJi{

width: 160px;height: 80px;

border-radius:50%;

border: #e00 solid;

border-width: 1px 1px 80px 1px;

position: relative;left: 30px;

}

.TaiJi::before,.TaiJi::after{

content: “”;

width:20px;height: 20px;

border-radius:50%;

position: absolute;top:40px;

}

.TaiJi::before{

border:30px solid #e00;

background-color: #fff;

left:0px;

}

.TaiJi::after{

border:30px solid #fff;

background-color: #e00;

left:80px;

}

太极图,这个我可是思考了半天才想出来的,他其实是3个圆圈组成,最技巧的地方在于如何只用一个圆形做出一半阴一半阳的效果来,先卖个关子,其实代码里已经体现出来了,哈哈!

用纯css做几何图形的技巧(一)[通俗易懂]

.SouSuo{

width: 80px;height: 80px;

border: 15px solid #e00;

border-radius:50%;

position: relative;

}

.SouSuo::after{

content: “”;

width: 50px;height: 15px;

background-color: #e00;

transform: rotate(45deg);

position: absolute;top:80px;left:60px;

}

搜索符号,一个圆圈加一个矩形(旋转45度)做手柄

用纯css做几何图形的技巧(一)[通俗易懂]

.YueYa {

width: 80px; height: 80px;

border-radius: 50%;

box-shadow: 25px 25px 0px 0 red;

}

月牙,一个圆圈,外面加一个阴影,自然就形成了月牙状!

用纯css做几何图形的技巧(一)[通俗易懂]

.ShanXing{

border-left: 80px solid transparent;

border-right: 80px solid transparent;

border-top: 100px solid red;

border-radius: 50%;

}

扇形,其实是一个边框构成的倒三角,用border-radius弄出来圆弧后,就成了扇形

用纯css做几何图形的技巧(一)[通俗易懂]

.ShiZi{

width: 80px; height: 80px;

box-shadow: 25px 25px 0px 0 red;

position: relative;

}

.ShiZi::after{

content: “”;

width: 80px; height: 80px;

box-shadow: -25px -25px 0 0 red;

position: absolute;left:105px;top:105px;

}

红十字,先用box-shadow弄出L形,再用两个L形状旋转拼接而成

用纯css做几何图形的技巧(一)[通俗易懂]

.Suo{

width:160px;height: 100px;

background-color: #e00;

border-radius: 20px;

position: relative;

}

.Suo::before{

content: “”;

width:60px;height: 60px;

border:20px solid #e00;

border-radius: 100px 100px 0 0;

position: absolute;left:30px;top:-80px;

}

.Suo::after{

content: “”;

width: 0px;height: 30px;

border:10px solid #fff;

border-radius: 20px;

position: absolute;left:70px;top:30px;

}

锁,是3个矩形组合而成,1个矩形做锁身,一个大圆角矩形做锁环,一个小圆角矩形做钥匙孔

用纯css做几何图形的技巧(一)[通俗易懂]

.KuoHao{

width: 10px;height: 100px;

border: 10px solid #e00;border-right: 0;

border-radius: 20px 0 0 20px;

position: relative;left:50px;

}

.KuoHao::after{

content: “”;

width: 20px; height: 20px;

transform: rotate(45deg);

box-shadow: -10px 10px 0px 0 #e00;

background-color: #fff;

position: absolute;left:-5px;top:40px;

}

大括号,是半拉圆角矩形(细长),叠加一个L形尖角构成。

用纯css做几何图形的技巧(一)[通俗易懂]

好了,以边框特性为核心生成几何图形的示例就到这里,主要还是以示范原理为主。实际使用中可以有更多、更巧妙的创意、更优化的代码。

关于css生成几何图形,还有以clip-path为核心的剪切手法,以及以内联SVG为核心的解决方案,我们后续另文再详细讲解,内容相信会更加精彩!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/17876.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信