带你了解HTML5 SVG,看看怎么绘制自适应的菱形

本篇文章带大家了解一下svg,了解一下html5 svg元素的特性,介绍一下使用svg绘制自适应菱形的方法,你可能不需要png图片了,希望对大家有所帮助!

带你了解HTML5 SVG,看看怎么绘制自适应的菱形

最近在某思看到这样一个问题:需要绘制一个自适应尺寸的菱形,并且还有边框,一般在流程图中很常见,效果如下

1.png

如果没有边框的话,用 CSS clip-path 也能很方便的裁剪出一个菱形,但是边框不太好处理(通常用嵌套一层的方式或者投影来模拟,但是效果不太好),这里介绍一个 SVG 方式,充分利用缩放特性来实现这样一个效果

立即学习“前端免费学习笔记(深入)”;

一、SVG 从何而来

SVG 通常都不需要手写代码(除少量基本形状以外),一般都可以用设计软件生成(SVG 在设计之初就是给机器看的,非常不利于人工阅读)。比如,我这里是用 Figma 绘制的(一个多边形就搞定),随便什么尺寸都行

2.png

然后就得到了这样一段 SVG


在浏览器中效果如下

3.png

二、SVG 的缩放特性

现在 SVG 有一个默认尺寸,如果手动改变 SVG 的默认尺寸,如下

4.png

是不是有点类似于object-fit:contain的效果?如果想整个铺满,强制拉伸该怎么做呢?这里需要用到 SVG 的缩放属性preserveAspectRatio,表示当 SVG 的实际尺寸和viewBox尺寸不一致时的缩放规则,有点类似于 object-fitobject-position 组合。这里的取值非常多,默认值是xMidYMid,表示强制等比缩放,并且居中对齐。

有兴趣的可以参考这篇文章:理解SVG viewport,viewBox,preserveAspectRatio缩放,案例非常详细https://www.zhangxinxu.com/wordpress/2014/08/svg-viewport-viewbox-preserveaspectratio/

这里我们不需要等比缩放,可以直接设置为none

...

效果如下

5.png

三、SVG 的描边缩放

在设置不等比缩放后,其实描边还有一点小问题,不同尺寸下,描边的粗细不同,如下

6.png

有没有办法让描边不会跟随 SVG 尺寸缩放呢?当然也是有的!SVG 中有一个属性 vector-effect可以控制描边不缩放,永远保持默认设置的尺寸,有兴趣的可以参考这篇文章 CSS vector-effect与SVG stroke描边缩放,这里只需要在 path添加属性vector-effect="non-scaling-stroke"就行了,表示描边不跟随缩放,如下

...

7.png

这样就实现了一个自适应尺寸的菱形了,描边也不会缩放,完整 SVG 代码如下

  

四、SVG 内联 base64

通常情况下,这样一个图形用作背景图更为合适(SVG代码放在页面上不太美观)。让人惊讶的是,将 SVG 转换成 base64 后,以上特性仍然是存在的。这里使用张鑫旭老师的 SVG在线压缩合并工具,如下

8.png

转换后,将这段 base64 直接用作背景就行

div{  background: url('data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiB2aWV3Qm94PSIwIDAgMTY3IDkwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIHZlY3Rvci1lZmZlY3Q9Im5vbi1zY2FsaW5nLXN0cm9rZSIgZD0iTTIuMTA4IDQ1TDgzLjUgMS4xMzYgMTY0Ljg5MiA0NSA4My41IDg4Ljg2NCAyLjEwOCA0NXoiIGZpbGw9IiNGRkVDQzciIGZpbGwtb3BhY2l0eT0iLjYiIHN0cm9rZT0iI0ZGQjIwMCIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9zdmc+')}

这样就得到了一个自适应的菱形背景了

9.gif

当然,转换成 base64 后就不能实时修改颜色了,需要整体替换

完整代码可以访问 SVG diamond

https://codepen.io/xboxyan/pen/abVRwmz

五、总结一下

从这个例子就可以看出 SVG 的天然优势了,特别是描边的缩放特性,如果用 CSS 来绘制估计要遇到不少麻烦。这里总结一下实现要点:

SVG 一般通过设计软件绘制导出就行,不需要手写

SVG 默认是保持原比例缩放的,可以通过 preserveAspectRatio 修改缩放规则

SVG 描边的粗细默认会跟随整体尺寸缩放,可以通过 vector-effect 设置保持原始大小

SVG 在转成 base64 后仍然具备以上特性,更适合用作背景图片

SVG 一直在图形绘制上更具优势,特别是这类几何图形,缩放、自适应更加灵活,如果 CSS 实现有困难,不妨考虑一下 SVG。最后,如果觉得还不错,对你有帮助的话,欢迎点赞、收藏、转发

(学习视频分享:web前端)

以上就是带你了解HTML5 SVG,看看怎么绘制自适应的菱形的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1550947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 21:09:28
下一篇 2025年12月21日 21:09:45

相关推荐

  • web前端笔试题库之HTML篇

    总结了一些web前端面试(笔试)题分享给大家,本篇文章就先给大家分享html部分的笔试题(附答案),大家可以自己做做,看看能答对几个! 相关推荐:《web前端笔试题库之CSS篇》 Q1: 是正确的HTML5标签吗? A:是。  标签规定用于表单的密钥对生成器字段。当提交表单时,私钥存储在本地,公钥发…

    2025年12月21日
    000
  • HTML超文本标记语言–超在那里?(文档分析)

    本篇文章带大家了解一下html(超文本标记语言),介绍一下html的本质,html文档的结构、html文档的基本标签和图像标签、列表、表格标签、媒体元素、表单,希望对大家有所帮助! HTML 到底是什么? HTML 英文全称是 Hyper Text Markup Language,中文译为“超文本标…

    2025年12月21日 好文分享
    000
  • 一文详解HTML注释和颜色(颜色名、十六进制值)

    本篇文章带大家了解一下html注释和颜色,并分享一些常用颜色名、十六进制值,希望对大家有所帮助! 一、HTML注释(附带示例) HTML 注释主要用来对文档中的代码进行解释说明,注释也是代码的一部分,但浏览器会自动忽略注释的内容,所以用户在网页中是看不到注释的。 我们在编写代码时应该善用注释,因为一…

    2025年12月21日 好文分享
    000
  • 深入解析head标签中常用的头部标签

    标签的内容必须与当前文档有关,并且不应该过长,中文页面请尽量控制在 30 个字符(包括空格)以内。 2、 标签 标签用于为页面中所有相对链接指定一个基本链接,当您设置了基本链接后,当前页面中的所有相对链接都会使用这个基本链接作为前缀,如下例所示: 标签演示 视频教程 入门教程 上面的示例中第一个 标…

    2025年12月21日 好文分享
    000
  • html怎么设置按钮文字

    方法:1、设置“”和“”间的内容,语法“按钮文字”;2、设置input元素中value属性的值,语法“”。 本教程操作环境:windows7系统、HTML5版、Dell G3电脑。 html有两种按钮: button按钮 input按钮 立即学习“前端免费学习笔记(深入)”; 两种按钮设置按钮文字的…

    2025年12月21日
    000
  • html怎么让图片上下移动

    html让图片上下移动的方法:1、使用animation属性给图片绑定一个移动动画;2、使用“@keyframes 动画名称 {50%{transform:translateY(移动距离);}}”语句定义动画每一帧的动作,控制图片上下移动。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月21日
    000
  • html5中元素能拉伸宽度吗

    html中元素能拉伸宽度,只需要利用style、transform属性配合scaleX()函数设置元素宽度的拉伸倍数即可,语法为“”。 本教程操作环境:windows10系统、HTML5版、Dell G3电脑。 html5中元素能拉伸宽度吗 在html中,想要拉伸元素的宽度需要利用到style、tr…

    2025年12月21日
    000
  • html5中onclick是什么意思

    html5中onclick的意思是“单击”,onclick属性是鼠标事件的一种,在单击鼠标时触发,用于规定事件触发时执行的脚本,语法为“”。 本教程操作环境:windows10系统、HTML5版、Dell G3电脑。 html5中onclick是什么意思 onclick是HTML标记对象的一个属性。…

    2025年12月21日
    000
  • html怎么放大图片

    方法:1、利用width和height属性放大图片,语法“”;2、用style和transform属性放大图片,语法“”。 本教程操作环境:windows10系统、HTML5版、Dell G3电脑。 html怎么放大图片 在html中想要放大图片有两种方法 一种是重新设置图片元素的高度和宽度,这时候…

    2025年12月21日
    000
  • html不常用的标签有哪些

    html不常用的标签有:pre、figure、figcaption、em、strong、del、ins、sub、sup、ruby、bdo、vedio、audio、track、optgroup、output、progress、meter等等。 本教程操作环境:windows7系统、HTML5版、Del…

    2025年12月21日 好文分享
    000
  • HTML怎么设置td内容居中

    设置方法:1、利用align属性,语法“…”;2、利用style属性添加居中对齐样式,语法“…”。 本教程操作环境:windows7系统、HTML5版、Dell G3电脑。 HTML设置td内容居中 1、利用align属性 align 属性规定单元格中内容的水平对齐方式。当属…

    2025年12月21日
    000
  • html表格怎么设置行高

    html表格设置行高的方法:1、给tr或td元素设置height属性,语法“”;2、利用style属性给tr或td元素添加height样式,语法“”。 本教程操作环境:windows7系统、HTML5版、Dell G3电脑。 我们有下面一个表格: 商品价格T恤¥100牛仔褂¥250牛仔库¥150 怎…

    2025年12月21日 好文分享
    000
  • html怎样设置select默认不选中

    设置方法:1、在select标签内的第一个option标签设置为空;2、给option空标签添加“display:none”样式,即可设置select默认不选中,语法为“”。 本教程操作环境:windows10系统、HTML5版、Dell G3电脑。 html怎样设置select默认不选中 默认情况…

    2025年12月21日
    000
  • 十分钟搞懂form标签中的GET和POST提交方式

    本篇文章给大家带来了form标签中get和post两种提交方式的相关知识以及比较,form表单的作用是收集标签中的内容, … 中间可以由访问者添加类似于文本,选择,或者一些控制模块等等.然后这些内容将会被送到服务端,希望对大家有帮助。 form标签中的GET和POST 在HTML中,fo…

    2025年12月21日 好文分享
    000
  • html div怎么设置宽度

    html div设置宽度的方法:1、给div元素添加“width:宽度值;”样式设置固定宽度;2、给div元素添加“min-width:宽度值;”样式设置最小宽度;3、给div元素添加“max-width:宽度值;”样式设置最大宽度。 本教程操作环境:windows7系统、CSS3&&amp…

    2025年12月21日 好文分享
    000
  • html怎么设置div高度

    html设置div高度的方法:1、给div元素添加“height:高度值;”样式设置固定高度;2、给div元素添加“min-height:高度值;”样式设置最小高度;3、给div元素添加“max-height:高度值;”样式设置最大高度。 本教程操作环境:windows7系统、CSS3&&a…

    2025年12月21日 好文分享
    000
  • html怎么设置div的透明度

    html设置div透明度的方法:1、利用opacity属性,只需要给div元素添加“opacity: 透明度值;”样式即可;2、利用filter属性,只需要给div元素添加“filter:opacity(透明度值);”样式即可。 本教程操作环境:windows7系统、CSS3&&HT…

    2025年12月21日 好文分享
    000
  • html怎么设置a标签位置

    设置方法:1、给a标签的父标签添加“position: relative;”样式,进行相对定位;2、给a标签添加“position: absolute;”样式进行绝对定位;3、用top、bottom、left、right属性控制a标签位置。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月21日
    000
  • html textarea怎么设置大小

    设置方法:1、给textarea设置cols和rows属性,语法“”;2、给extarea添加“width:宽度值;height:高度值;”样式。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 html textarea设置大小 标签定义一个多…

    2025年12月21日 好文分享
    000
  • html怎么设置下划线长度

    html设置下划线长度的方法:1、给元素添加“display: block;”样式将其变成块级元素;2、使用border-bottom属性设置下划线样式;3、利用width属性控制下划线长度,语法“width:长度值;”。 本教程操作环境:windows7系统、CSS3&&HTML5…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信