关闭

使用svg描边来实现移动端1px

时间: 2020-10-29阅读: 93标签: svg

今天介绍一个通过svg来实现移动端1px效果的小技巧


svg的描边方式

通常我们在使用一些设计软件时,描边会有三种选择,分别是内描边居中描边外描边,比如 photoshop

那么,svg 中的描边是哪种方式呢?

答案是居中描边,并且无法更改,如下

<svg height="100px" viewBox="0 0 100 100">
    <rect x='10' y='10' width='40' height='40' fill='none' stroke-width='10' stroke='red' />
</svg>

可以看到,rect 的描边是居中的,两边各是 5


0.5px的实现

根据上面的结论,如果 stroke-width 为 1 时,那么就很轻松的被分成了两边各 0.5,然后把外侧的部分截断就可以了

这里直接设置 rect 的宽高都为 100%,并且 svg 默认是超出隐藏的 (overflow:hidden),如下

<svg height="100px" viewBox="0 0 100 100">
    <rect width='100%' height='100%' fill='none' stroke-width='1' stroke='red' />
</svg>

这里对比一下1px的效果

<div style="box-sizing: border-box; width:100px;height:100px;border:1px solid red;"></div>

可以用手机访问或者扫描以下网址体验https://codepen.io/xboxyan/


svg作为背景使用

以上是直接使用 svg 标签,实际项目当然不能这样使用了,不过可以将svg 作为背景图片来使用,例如

div {
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' fill='none' stroke-width='1' stroke='red' /></svg>");
}

很简单,在 svg 前面添加一段 data:image/svg+xml, 表示这是一张 svg格式的图片,和 base64 的写法比较类似,后面 svg 的属性xmlns='http://www.w3.org/2000/svg'表示命名空间,暂时还不能去除,记住这层规律就可以了

当然在IE下,svg可能还需要转义才能正常显示,这里可以参考张鑫旭老师的这篇文章

下面来看几个案例


1. 1px分割线

这个在移动端特别常见,这里可以这样来实现,直接使用 line 画一条底部的线

p {
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><line x1='0' y1='100%' x2='100%' y2='100%' stroke='red' /></svg>");
}


2. 1px边框

和分割线类似,只是用rect来画一个自适应的矩形,这里宽高均为 100%

div {
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' fill='none' stroke='red' /></svg>");
}


3. 1px带圆角的边框

常规方式实现带圆角的边框就无能为力了,svg 可以很轻松的实现,借助rx 属性,还有元素自身的border-radius就可以了

div {
  border-radius:5px;
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' rx='5' fill='none' stroke='red' /></svg>");
}


总结

以上就是几个svg实现边框的小技巧了,这里是用background-image模拟的,比使用伪元素要方便的多,同时也不占据空间,算是相对完美的解决方案了~


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/9823

关闭

如何使用SVG及其动画技术为你的 Web 前端开发带来一些新鲜的体验

设备间不同的屏幕尺寸、分辨率和比例使得产品难以提供一致的体验,对于那些对产品有着像素级完美追求的人这种体验差异尤其显著! SVG(可缩放的矢量图形)完美地解决了上文中提到的部分问题。

通过css改变svg img的颜色

一般的解决办法有:1.字体图标改变css的color属性;2.js在hover事件中切换图片;3.老一点的方案是hover切换背景?但是为了更小的开销,一般css为更好的解决方案

关于Data URLs svg图片显示出错和浏览器URL hash #

在使用生成的svg图作为<img>标签是src值时,发现有部分浏览器显示异常,所以这里记录下,在<img src=\\\"Data URLs\\\">中,Data URLs格式与显示情况如下:

使用vue组件加载SVG图片步骤

使用vue加载SVG图片,有两种方法,一种是雪花loader,一种是vue-svg-loader(官网推荐)。在自己的项目中,本次使用vue-svg-loader加载svg图片,并且对图片进行属性修改。操作步骤:

svg高级应用及动画

canvas 和 webGL 这两项图形技术结合 css3 可以说能完成绝大部分的动画和需求。但 canvas 和 webGL 毕竟是偏向底层的绘制引擎,某些场景使用起来还是过于繁琐的,不分场合一律使用锤子解决的行为不值得提倡

svg生成环形进度条

之前在项目中遇到一个环形进度条的需求,要求能实时更新进度,脑海中瞬间便蹦出css,svg,canvas3中方案,对于3种方案个人更偏向于svg,用法简单,代码量也很少,同时也便于实时控制。具体效果如下图:

如何在vue项目中优雅地使用SVG

安装svg-sprite-loader。通过vue-cli脚手架创建的项目默认情况下会使用 url-loader 对svg进行处理,在static下新建svg文件夹,用来放置当做icon使用的svg,使用include,include和img做区分。然后修改webpack.base.conf.js配置,这样svg-sprite-loader只会处理我们指定的static/svg下的文件

巧妙运用clip-path,实现CSS形状变换

CSS3的clip-path,这个clip-path看起来有点眼熟,因为它原本就存在于SVG里头,利用掩码(剪裁)的方法,连接坐标绘制掩码区域,就可以做出许多不同的形状,让底色或底图显现,随着浏览器对于CSS3的支持度大幅提升

一步步教你用 CSS 为 SVG 添加过滤器

SVG就存在了,但仍有一些有趣的方法去用它。在本教程中,重点将放在 SVG 的过滤器上 —— 但不只是将它们应用于 SVG 图像,我将向你展示如何将它们应用于任何常规页面的内容上。实际上我们是通过告诉 CSS 过滤器所拥有的 ID,然后再把过滤器应用于 SVG 的方式来实现。

使用HTML5 SVG 标签

SVG 表示可伸缩矢量图形,这是一门用于描述 2D 图形的语言,图形应用使用 XML 编写,然后 XML 由 SVG 阅读器程序呈现。支持三种类型的图形对象:矢量图形形状(例如,由直线和曲线组成的路径),图像和文本

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!