首页 > 其他分享 >用SVG解决移动端1px的技巧

用SVG解决移动端1px的技巧

时间:2022-11-08 12:40:55浏览次数:84  
标签:xml 技巧 SVG image background 1px 描边 svg

用SVG解决移动端1px的技巧_xml

今天介绍一个通过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模拟的,比使用伪元素要方便的多,同时也不占据空间,算是相对完美的解决方案了~


用SVG解决移动端1px的技巧_移动端_02

用SVG解决移动端1px的技巧_移动端_03

标签:xml,技巧,SVG,image,background,1px,描边,svg
From: https://blog.51cto.com/u_15809510/5832510

相关文章

  • 移动端1px解决方案总汇
    最近在写移动端H5应用,遇到一个值得记录下来的点。现在从它的由来到实现,我们来聊一下移动端1px,说1px不够准确,应该说成1物理像素。 在讲原理之前,先跟大家说一个概念,就......
  • 14个 JavaScript 中鲜为人知的技巧
    英文| http://developer.51cto.com/art/201912/607686.htm人们通常认为JavaScript是一门很容易上手的语言,但是要做到精通却不简单。是的,这是因为JavaScript是一种非......
  • 6个在Vue.js编写更好v-for循环的技巧
    https://learnvue.co/2020/02翻译|杜尼卜在vuejs中,v-for循环是每个项目都会使用的东西,它允许您在模板代码中编写for循环。在最基本的用法中,它们的用法如下。<ul><liv-f......
  • GDB-3——GDB实用调试技巧
     1.将print显示的字符串或字符数组显示完整当我们使用print命令打印一个字符串或者字符数组时,如果该字符串太长,print命令默认显示不全的,我们可以通过在gdb中输......
  • 通过css 改变通过img标签引入的svg颜色
    前言修改svg颜色,一般直接修改文件的svg的fill属性就可以了,可以直接改svg属性,也可以通过css修改,但是前端一般都是通过img标签直接引入的svg图片,这样不管是从后期维护还是代......
  • 差分约束&判负环技巧
    优化差分约束时常常需要判断负/正环,需要对SPFA做一些优化,如下:如果一定有解,使用队列实现SPFA;如果只用判环,不需要求解,使用栈实现;如果可能无解,可以把握一下,如果题目大概......
  • 数学(环形数组) 数组 技巧 字符串
    918.环形子数组的最大和intsum=0,curMax=0,max=nums[0],curMin=0,min=nums[0];for(inti:nums){curMax=Math.max(curMax+i,i);max=Math.max......
  • node.js inspect 浏览器 断点调试技巧与原理
    做前端开发你一定会用到浏览器自带的各种调试工具firebug谷歌的debugtools等,我们太过于熟悉使用这些工具了,以致于在node开发中同样的js文件我们是否也可以用浏览器就行调......
  • Vue3必会技巧-自定义Hooks
    Vue3自定义Hooks定义:个人理解:一些可复用的方法像钩子一样挂着,可以随时被引入和调用以实现高内聚低耦合的目标,应该都能算是hook;为什么Vue3要用自定义Hook?:结论:就是为了......
  • 团队沟通效率低的 5 个原因和高效的团队合作技巧
    团队沟通看似简单,但如果做不好将对团队的效率和产出有巨大的伤害,这篇文章介绍了5个团队无效沟通的原因,包括有个人问题,团队问题,远程沟通问题,文化壁垒,接受反馈问题等等,同时,......