首页 > 其他分享 >纯 CSS 绘图

纯 CSS 绘图

时间:2023-01-31 15:45:21浏览次数:64  
标签:clip 100% 50% width 绘图 path 20px CSS

纯 CSS 绘图

当我们需要三角形、圆形、半圆等简单图形时,用 css 直接绘制会比加载图片更好,通常可以使用 border 属性方法来绘制,目前主流的浏览器还可以使用 clip-path 属性来绘制图形。

如果不需要过多考虑浏览器兼容问题的话,使用 clip-path 更好。

查看DEMO 纯css绘制图形

border 方法

border 方法主要使用 border + transform 两个方法结合完成绘图。

绘制三角形

原理:

当 width、height 等于 0 时,border 四边会被挤压成四个三角形。因此当设置其中三个边的 border-color 的颜色为透明时,剩下一个边的颜色设置为我们需要的值,即可显示出一个三角形,且三角形指向为这个边的反向。


/* bottom 颜色不为透明时,bottom 的反向为 top,即这个三角形指向 top */

/* border-width = 10 表示 绘制出的这个三角形为 等边三角形,边长为20,高为10 */

/* 通过控制不同边的 border-width, 我们可以绘制出任意角度的三角形 */

.arrow-up {

  width: 0;

  height: 0;

  border: 10px solid transparent;

  border-bottom-color: tomato;

}

绘制常见图形

绘制矩形


.rectangle {

  width: 0;

  height: 0;

  border: 10px solid tomato;

}

绘制圆形


.circle {

  width: 20px;

  height: 20px;

  background: tomato;

  border-radius: 50%;

}

绘制扇形


.sector {

  width: 20px;

  height: 20px;

  background: tomato;

  border-radius: 100% 0 0 0;

}

绘制椭圆


.ellipse {

  width: 40px;

  height: 20px;

  background: tomato;

  border-radius: 20px / 10px;

}

lip-path 方法

clip-path 可以创建一个只有元素的部分区域可以显示的剪切区域。区域内的部分显示,区域外的隐藏。剪切区域是被引用内嵌的 URL 定义的路径或者外部 svg 的路径,或者作为一个形状例如 circle()。

语法


/* Keyword values */

clip-path: none;

  

/* <clip-source> values */

clip-path: url(resources.svg#c1);

  

/* <geometry-box> values */

clip-path: margin-box;

clip-path: border-box;

clip-path: padding-box;

clip-path: content-box;

clip-path: fill-box;

clip-path: stroke-box;

clip-path: view-box;

  

/* <basic-shape> values */

clip-path: inset(100px 50px);

clip-path: circle(50px at 0 100px);

clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);

clip-path: path(

  'M0.5,1 C0.5,1,0,0.7,0,0.3 A0.25,0.25,1,1,1,0.5,0.3 A0.25,0.25,1,1,1,1,0.3 C1,0.7,0.5,1,0.5,1 Z'

);

clip-path: ellipse(30% 20% at 50% 50%);

  

/* Box and shape values combined */

clip-path: padding-box circle(50px at 0 100px);

  

/* Global values */

clip-path: inherit;

clip-path: initial;

clip-path: unset;

绘制三角形

原理:

利用 clip-path 属性的polygon​函数,传入一组点的坐标,每个点用逗号隔开,点用 x y 分别表示 x轴 和 y轴 的位置。把这三个点用传入的顺序连接,连接区域内的图形显示,链接区域外的图形隐藏,即显示出了三角形。


/* width = 20 height = 10 即宽为 20 高为 10 的矩形 */

/* polygon 里传入了三个点的坐标分别是矩形的 左下点(0 100%,)、中上点(50% 0)、 右下点(100% 100%)*/

/* 即 (x1 y1, x2 y2, x3 y3) */

.arrow-up {

  width: 20px;

  height: 10px;

  background: tomato;

  clip-path: polygon(0 100%, 50% 0, 100% 100%);

}

绘制常见图形

绘制矩形


.rectangle {

  width: 20px;

  height: 20px;

  background: tomato;

  clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);

}

绘制圆形


.circle {

  width: 20px;

  height: 20px;

  background: tomato;

  clip-path: circle(10px);

}

绘制扇形


/* 方法一 */

.sector {

  width: 20px;

  height: 20px;

  background: tomato;

  clip-path: inset(0 0 0 0 round 100% 0 0 0);

}

/* 方法二 */

.sector2 {

  width: 20px;

  height: 20px;

  background: tomato;

  /* at 后面可以指定圆心的xy坐标, 可忽略,默认为 50% 50% */

  clip-path: circle(20px at 100% 100%);

}

绘制椭圆


.ellipse {

  width: 40px;

  height: 20px;

  background: tomato;

  clip-path: ellipse(20px 10px);

}

clip-path 应用

除了绘制简单图形,还可以使用clip-path制作变形动画,得到更自然的过渡效果。

查看DEMO clip-path 动画

变形动画

使用 polygon 制作变形动画需要注意,变形开始和结束的点,数量需要一致,点之间的坐标是可以重复的。

例:


@keyframes animation3 {

  0% {

    clip-path: polygon(0 0%, 50% 0, 100% 0, 100% 50%, 100% 80%, 100% 100%, 50% 100%, 0 100%, 0 50%, 0 38%);

  }

  100% {

    clip-path: polygon(50% 0%, 63% 38%, 100% 38%, 69% 59%, 82% 100%, 50% 75%, 18% 100%, 31% 59%, 0 38%, 37% 38%);

  }

}

标签:clip,100%,50%,width,绘图,path,20px,CSS
From: https://www.cnblogs.com/functionfun/p/pure-css-drawing-1gh6m3.html

相关文章

  • nginx 子路径 网站图片或js/css 路径缺失 替换
     nginx子路径网站图片或js/css路径缺失替换location/test{rewrite^/test/(.*)$/$1break;proxy_passhttp://localhost:8080;sub_......
  • vite打包js,css分开
    打开vite.config.jsbuild:{chunkSizeWarningLimit:1000,rollupOptions:{output:{//最小化拆分包......
  • CSS & JS Effect – Section Design Waves
    介绍SectionWaves长这样   左边是没有waves,右边是加了waves.它的作用就是点缀.让画面有一点"Design"的感觉. 参考YouTube– CSSWavyBackground......
  • CSS 设置背景图片
    一、基本设置使用CSS可以通过以下属性设置背景图片:background-image:设置背景图片的URL。background-size:设置背景图片的大小。可以设置为绝对像素值,也可以设置......
  • 纯css3D按钮多种悬停特效
    效果如下代码演示地址CSS代码如下 body{background:#e0e5ec;}h1{position:relative;text-align:center;color:#353535;font-size:50px;font-family:......
  • css各属性的百分比值
    width、padding、margin:正常文档流和设置浮动时,相对父元素的contentbox的宽度;绝对定位时,相对于包含块的paddingbox的宽度;height:正常文档流时,如果父元素的height属......
  • 零基础学前端之CSS轮廓
    在表单的学习中,细心的同学发现了,当前密码框控件获得焦点时,浏览器默认会给它一个蓝色的轮廓,提高用户输入信息的体验。这个轮廓线是通过给input元素添加border边框实现的......
  • postcss-px-to-viewport适配屏幕大小
    1、postcss-px-to-viewport适配的介绍postcss-px-to-viewport是一个插件,用起来非常方便,安装一下插件,搞个配置文件就可以直接用了。2、postcss-px-to-viewport适配的......
  • 视频直播源码,CSS 修改滚动条样式、信封边框样式
    视频直播源码,CSS修改滚动条样式、信封边框样式CSS全局修改滚动条样式  ::-webkit-scrollbar{ /*滚动条整体样式*/ width:4px; /*高宽分别对应横竖滚动条的......
  • css总结
    目录CSS简介一.网页样式1.1引入方法1.1.1内联样式1.1.2内部样式表1.1.3链接外部样式1.1.4导入外部样式1.2基础语法1.3选择器的分类1.3.1标记选择器1.3.2通用选择器对所......