CSS三角形和常见图形

三角形

利用border实现三角形是最常见的方法,这里我们设置一个盒子,把宽高设置为零,边框给100px值,并各自给一个颜色以便观察。可以看到由于没有宽高,边框会沿交叉轴两侧铺垫

css 复制代码
        .box {
            width: 0;
            height: 0;         
            border-top: 100px solid #ec9bad;
            border-right: 100px solid #ce5777;
            border-bottom: 100px solid #ed556a;
            border-left: 100px solid #de1c31;
        }

这时我们只需要留下一个边框颜色,其他边框设置成transparent透明属性就可以得到一个三角形

css 复制代码
 .box {
            width: 0;
            height: 0;
            border-top: 50px solid transparent;
            border-right: 50px solid transparent;
            border-bottom: 50px solid transparent;
            border-left: 50px solid #de1c31;
        }

想要设置三角形指向只需要留下对应方向边框颜色,其他边框色设置成透明色即可

如果想设置不同角度的三角形只需要设置各边框值的比例,等边三角形可以设置一边为0,其他三边约等于7:7:12

css 复制代码
     .box {
            width: 0;
            height: 0;
            border-right: 70px solid transparent;
            border-bottom: 120px solid #ed556a;
            border-left: 70px solid transparent;
        }

扇形

扇形的实现思路基本和三角形一致,只需要给盒子添加border-radius:50%,使其变成圆形,然后挖三填一(不是)

css 复制代码
     .box {
            width: 0;
            height: 0;
            border-top: 50px solid transparent;
            border-right: 50px solid transparent;
            border-bottom: 50px solid #ed556a;
            border-left: 50px solid transparent;
            border-radius: 50%;
        }

椭圆

椭圆的实现是基于border-radius属性和长方形盒子实现的,我们平常使用border-radius属性只设置单一值,但其实可以设置水平半径和垂直半径两个值border-radius: 水平半径 / 垂直半径;

css 复制代码
       .box {
            width: 100px;
            height: 50px;
            background-color:#ed556a ;
            border-radius: 50% / 50%;
        }

给任意宽高的长方形盒子设置水平方向50%的圆角和垂直方向50%的圆角就可以得到一个椭圆

梯形

从前面的例子可以看出各边框是沿两条交叉轴所形成的四个区域绘制的,盒子的内容越小,边框的底部也越小,绘制矩形只需要拉大盒子的内容,使边框底部由点形成一条边即可绘制出梯形

css 复制代码
     .box {
            width: 40px;
            height: 40px;
            border-top: 50px solid #ec9bad;
            border-right: 50px solid #ce5777;
            border-bottom: 50px solid #ed556a;
            border-left: 50px solid #de1c31;
        }

盒子宽高越大梯形上边越宽,这时只需要和三角形一样留一藏三就可以得到一个梯形

js 复制代码
     .box {
            width: 40px;
            height: 40px;
            border-top: 50px solid transparent;
            border-right: 50px solid transparent;
            border-bottom: 50px solid #ed556a;
            border-left: 50px solid transparent;
        }

补充:css绘制0.5px直线

0.5px线也是前些年面试的高频考题,实现思路是利用transform的缩放属性

定义一个宽任意高为1px的盒子

css 复制代码
         .box  {
            width: 100px;
            height: 1;
            background-color: black;
        }

再给盒子添加 transform: scaleY(0.5),使盒子沿垂直方向缩放0.5倍

css 复制代码
   .box  {
            width: 100px;
            height: 1px;
            background-color: black;
            transform: scaleY(0.5);
        }

我们可以看到盒子的高变成了0.5px

前端新人,写博客是为巩固知识,希望大家多多支持,也欢迎大家补充指正交流!
相关推荐
PineappleCoder1 天前
性能数据别再瞎轮询了!PerformanceObserver 异步捕获 LCP/CLS,不卡主线程
前端·性能优化
PineappleCoder1 天前
告别字体闪烁 / 首屏卡顿!preload 让关键资源 “高优先级” 提前到
前端·性能优化
m0_471199631 天前
【vue】通俗详解package-lock文件的作用
前端·javascript·vue.js
GIS之路1 天前
GDAL 读取KML数据
前端
今天不要写bug1 天前
vue项目基于vue-cropper实现图片裁剪与图片压缩
前端·javascript·vue.js·typescript
用户47949283569151 天前
记住这张时间线图,你再也不会乱用 useEffect / useLayoutEffect
前端·react.js
咬人喵喵1 天前
14 类圣诞核心 SVG 交互方案拆解(附案例 + 资源)
开发语言·前端·javascript
问君能有几多愁~1 天前
C++ 日志实现
java·前端·c++
咬人喵喵1 天前
CSS 盒子模型:万物皆是盒子
前端·css