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

前端新人,写博客是为巩固知识,希望大家多多支持,也欢迎大家补充指正交流!
相关推荐
new code Boy14 分钟前
NestJS、Nuxt.js 和 Next.js
前端·后端
进击切图仔30 分钟前
执行 shell 脚本 5 种方式对比
前端·chrome
局i31 分钟前
React 简单地图组件封装:基于高德地图 API 的实践(附源码)
前端·javascript·react.js
执行部之龙42 分钟前
AI对话平台核心技术解析
前端
yuki_uix1 小时前
防抖(Debounce):从用户体验到手写实现
前端·javascript
HelloReader1 小时前
Flutter 进阶 UI搭建 iOS 风格通讯录应用(十一)
前端
张元清1 小时前
每个 React 开发者都需要的 10 个浏览器 API Hooks
前端·javascript·面试
HelloReader1 小时前
Flutter ListenableBuilder让界面自动响应数据变化(十)
前端
yuki_uix1 小时前
深拷贝:JavaScript 引用类型的完全复制之道
前端·javascript
默默学前端1 小时前
JavaScript 中 call、apply、bind 的区别
开发语言·前端·javascript