• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 带你了解HTML5 SVG,看看怎么绘制自适应的菱形

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

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了HTML5 SVG,绘制自适应菱形等相关知识,希望对您有所帮助

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


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


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

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

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

一、SVG 从何而来

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


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


然后就得到了这样一段 SVG

<svg width="167" height="90" viewBox="0 0 167 90" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2.10786 45L83.5 1.13597L164.892 45L83.5 88.864L2.10786 45Z" fill="#FFECC7" fill-opacity="0.6" stroke="#FFB200" stroke-width="2"/></svg>

在浏览器中效果如下


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

二、SVG 的缩放特性

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


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


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

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

<svg preserveAspectRatio="none">...</svg>

效果如下


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


三、SVG 的描边缩放

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

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

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

<svg preserveAspectRatio="none">    <path vector-effect="non-scaling-stroke">...</path></svg>

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

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

<svg width="100%" height="100%" preserveAspectRatio="none" viewBox="0 0 167 90" fill="none" xmlns="http://www.w3.org/2000/svg">  <path vector-effect="non-scaling-stroke" d="M2.10786 45L83.5 1.13597L164.892 45L83.5 88.864L2.10786 45Z" fill="#FFECC7" fill-opacity="0.6" stroke="#FFB200" stroke-width="2"/></svg>

四、SVG 内联 base64

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


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

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

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

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


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


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

完整代码可以访问 SVG diamond  (https://codepen.io/xboxyan/pen/abVRwmz)

五、总结一下

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

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

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

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

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

SVG 一直在图形绘制上更具优势,特别是这类几何图形,缩放、自适应更加灵活,如果 CSS 实现有困难,不妨考虑一下 SVG。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2022-04-29带你开发一个虎年春节头像生成小程序
  • 2022-04-29ThinkPHP如何使用migrate实现数据库迁移
  • 2022-04-29Javascript怎样验证手机号码
  • 2022-04-29jQuery怎么删除元素但保留子元素
  • 2022-04-29帝国cms二次开发搜索页支持php和动态标签代码
  • 2022-04-29Dedecms织梦调用当前顶级栏目名称、ID、url实现方法
  • 2022-04-29js实现wordpress文章复制自动加版权信息
  • 2022-04-29PHP怎么实现加好友功能
  • 2022-04-29PHP+ImageMagick将PDF转成图片(步骤详解)
  • 2022-04-29登录网站没有显示laravel欢迎页面是什么情况?

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 一起分析uni-app怎么实现上传图片
    • 电商网站站内结构SEO优化技巧
    • 详解Composer+Git怎么创建 “服务类库”
    • Photoshop制作水彩喷溅效果的艺术字
    • 网站推广最全的解释
    • Photoshop创建有光泽的塑料3D文字教程
    • Discuz后台计划任务不运行解决方法
    • HTML5中video标签如何使用
    • vue.js如何实现列表滚动循环
    • MySQL的where查询的重新认识

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有