svg学习基础篇

243 阅读2分钟

1、svg简介

中文全称是可缩放的矢量图。跟其他图片(.jpg,.png...)相比,主要区别在于它无论放大多少倍都不会失真。用过ps的都知道,一张图片放大后会出现锯齿状的现象,这个就叫做失真。

20181031095410685.png

2、svg基础标签

A、创建一个svg

代码展示:

<!DOCTYPE html>
    <html>
        <head></head>
        <body>
            <svg style="background:white"></svg>
        </body>
</html>

图片展示:

svg默认宽度是300px,高度是150px,无颜色显示。所以我给它加了一个背景色。

image.png

B、svg基础属性认知

  • width->宽度
  • height->高度
  • viewBox->将svg画板的坐标映射的一个相对坐标系中
  • 如果无法理解svg可以看下,下方的参考文章或者视频,会有收获!!!

C、其他基本图像

注意:浏览器左上角为坐标原点,即(0,0),横向是x轴,纵向是y轴

代码展示:

<!DOCTYPE html>
    <html>
        <head></head>
        <body>
            <!--
                viewbox的参数表示
                viewbox = "x轴坐标 y轴坐标 宽 高"
                ***注意:示例中宽高是没有px的,因为是相对坐标系,所以可以理解为100px***
            -->
            <svg style="background:white" width ="500px" height = "500px" viewbox = "0 0 100 100">
                <!--
                    矩形
                        x => x轴坐标
                        y => y轴坐标
                        width => 矩形的宽度
                        height => 矩形的高度
                -->
                <rect x = "10" y="10" width = "20" height="10"/>
                <!--
                    多边形
                        points = "从左往右的第一个坐标x,y 第二个坐标x,y 第三个坐标x,y ..."
                        ***注意:最后的那个坐标可闭合也可以不闭合***
                -->
                <polygon points="0,0 10,0 20,5 5,5 0,0"/>
                <!--
                    圆
                        cx => 圆心坐标(center x)
                        cy => 圆心坐标(center y)
                        r => 半径 (radius)
                -->
                <circle cx ="20" cy="30" r="5"/>
                <!--
                    椭圆形
                        cx => 圆心坐标(center x)
                        cy => 圆心坐标(center y)
                        rx => x轴方向的半径 (radius x)
                        ry => y轴方向的半径 (radius y)
                -->
                <ellipse cx ="40" cy="30" rx="5" ry="10"/>
                <!--
                    直线
                        x1 => 线段的第一个端点的x坐标
                        y1 => 线段的第一个端点的y坐标
                        x2 => 线段的第二个端点的x坐标
                        y2 => 线段的第二个端点的y坐标
                    ***
                    注意:
                        直线默认无填充色,通过stroke进行颜色填充
                        stroke-width可调整线条的宽度,线条宽度默认为1px
                    ***
                -->
                <line x1="50" y1="30" x2="60" y2="10" stroke="red" stroke-width='0.2'/>
                <!--
                    折线
                        points = "从左往右的第一个坐标x,y 第二个坐标x,y 第三个坐标x,y ..."
                    ***
                    注意:
                        直线默认无填充色,通过stroke填充边框的颜色
                        stroke-width可调整线条的宽度,线条宽度默认为1px
                        fill 可以更改填充色,改为透明(transparent)及无色
                    ***
                -->
                <polyline points = "45,0 50,0 50,15 40,15 45,0" fill = "transparent" stroke="red" stroke-width='0.2'/>
                <!--
                    文本
                        x => x轴坐标
                        y => y轴坐标
                        style => 可以设置文字的大小,字体类型,颜色等等
                -->
                <text x="10" y="50" style="font-size:5">你好!大帅哥</text>
                <!--
                    常用的stroke系列属性
                        stroke-opacity => 设置透明度0-1之间
                        stroke-dasharray => 把设置虚线,边框为虚线(每隔多少单位画线)
                        stroke-dashoffset => 属性的偏移量
                -->
            </svg>
        </body>
</html>

效果展示:

image.png

D、stroke属性系列和transform属性系列粗解

代码展示:

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <svg style="background:white"
        width ="500px"
        height = "500px"
        viewbox = "0 0 100 100">
            <!--
                常用的stroke系列属性
                    x => x轴坐标
                    y => y轴坐标
                    width => 矩形的宽度
                    height => 矩形的高度
                    fill => 修改填充色
                    stroke => 设置线条的颜色
                    stroke-opacity => 设置透明度0-1之间
                    stroke-dasharray => 把设置虚线,边框为虚线(每隔多少单位画线)
                    stroke-dashoffset => 属性的偏移量
            -->
            <rect x = "10" y="10" width = "20" height="10"
            fill = "transparent" stroke="black" stroke-opacity='0.5'
            stroke-dasharray='1 2 3 4' stroke-dashoffset='1'/>
            <!--
                变换类型的属性:平移,旋转,缩放变换
                    x => x轴坐标
                    y => y轴坐标
                    width => 矩形的宽度
                    height => 矩形的高度
                    transform => scale(倍数) 放大或者缩小图像
                    rotate(旋转角度)正数为顺时针旋转,负数为逆时针旋转
                    ***以图形为中心放大图像需设置以下两个属性***
                    transform-origin => 指定整个svg/viewbox为中心
                    transform-box => 指定整个图形为中心
            -->
            <rect x = "50" y="10" width = "20" height="10"
            style="transform-box:fill-box;transform-origin:center"
            transform="scale(1.3) rotate(45)"/>
            <!--
            g标签
                用来分组,在这个标签上加上id或者class,用来选中多个图像
            -->
            <g id="group1">
                <polygon points="0,0 10,0 20,5 5,5 0,0"/>
                <circle cx ="20" cy="30" r="5"/>
            </g>
        </svg>
    </body>
</html>

效果展示:

image.png

E、基础动画学习

代码展示:

<!DOCTYPE html>
<html>
    <head></head>
    <style>
        /*
        animation参数介绍
        =>例子:animation: name 1s ease 2s 1 normal
        =>解释: animation: 动画名称 持续时间 动画持续时间的分布(默认是ease函数) 延时多久执行 持续几次动画(默认1次) 对称执行
            ->ease介绍,例如一个从左到右的一个动画,刚开始比较慢,中间比较快,结束时又比较慢
            ->动画播放次数可以时有限次和无限次(infinite)
            ->对称执行默认值为normal,当设置为alternate时,例子中会先放大再缩小
        */
        #r1{
            animation: move 1s ease 1s infinite alternate;
        }
        /* keyframes关键帧 */
        @keyframes move{
            0%{
                transform:scale(0.5)
            }
            100%{
                /* 设置x后会往左移或者右移;设置fill会出现黑色变红色的过程*/
                transform:scale(2);x:30;fill:#c04851;
            }
        }
    </style>
    <body>
        <svg style="background:white"
        width ="500px"
        height = "500px"
        viewbox = "0 0 100 100">
        <!--
            常用的stroke系列属性
                x => x轴坐标
                y => y轴坐标
                width => 矩形的宽度
                height => 矩形的高度
        -->
             <rect id="r1" x = "10" y="10" width = "20" height="10" />
         </svg>
    </body>
</html>

效果展示:

动画.gif

参考文章或视频:

图解SVG的核心概念_SVG, SVG之旅, 会员专栏 教程_W3cplus
【svg】有趣的svg入门篇 | svg的常见标签、属性与动画_哔哩哔哩_bilibili