这篇文章发布于 2018年03月24日,星期六,23:39,归类于 SVG相关。 阅读 37020 次, 今日 4 次 10 条评论
by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=7445
本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意。
一、文本大小自适应效果抢先体验
效果如下GIF截图:
文字大小尺寸跟着容器的尺寸变化。
您可以狠狠地点击这里:SVG实现文字大小跟随容器自动变化demo
这对于一些需要尺寸自适应的slogon内容就很实用,例如移动端320~414宽度间的自适应。
并且,如果你足够细心,会发现,当缩到足够小的,在Chrome浏览器下,文字的尺寸居然小于12px了!
二、文本大小自适应效果纯CSS实现方法
纯CSS方法也是可以实现文字尺寸跟随变化效果的,主要是借助CSS3中的vw
单位,将CSS的font-size
大小和网页视区宽度vw
相关联。可参见之前文章:“基于vw等视区单位配合rem响应式排版和布局”。
例如:
.slogon { font-size: 10vw; }
但通常实际开发的时候,要比上面的CSS复杂,通常需要借助calc()
计算。如果文本是局部容器自适应,那就更麻烦,实现起来还是有些啰嗦的,也没有更容易理解更好实现的方法呢?
有,借助SVG,兼容性和vw
一致。
三、文本font-size大小自适应SVG实现方法
SVG本质上你可以看成是一张图片,图片设置width:100%
自动就跟随容器尺寸拉伸,SVG也是如此,并且SVG由于是矢量的,因此,再怎么拉伸我们的文字效果都是清晰细腻的。
SVG中<text>
,<tspan>
元素可以用来呈现文本,嵌套关系为<text>
-> <tspan>
,个人觉得和HTML中的<p>
-> <span>
关系类似。
textLength
属性可以控制文本占据的宽度大小,缺省则自然排列,如果数值比较小,则文字会挤成一团,类似这样:
如果数值较大,就会拉得很开:
lengthAdjust
等属性可以对文本拉伸或收缩的方式进行设置,默认情况都是字符之间空隙拉伸(lengthAdjust="spacing"
),类似CSS中的letter-spacing
属性。我们还可以有其他设置,此时SVG就出现了比CSS文本更加丰富的呈现。
例如,设置lengthAdjust="spacingAndGlyphs"
则就连同字符图形本身一起拉伸:
还有x
, y
设置坐标位置,dx
, dy
属性设置相对坐标偏移等等。相关属性还比较多,就不一一展开了。
回到本例,本例子一开始的GIF效果实现相对简单,SVG代码如下:
<svg width="600" height="80" viewBox="0 0 600 80"> <text font-family="'PingFang SC','Microsoft Yahei'" font-size="60" x="0" y="1em">CSS世界这本书不错!</text> </svg>
然后加一行:
svg { width: 100%; }
就实现了。
一句话概括就是:老老实实大尺寸实现个SVG文本效果,然后当做图片来缩放处理即可。
四、如果是要canvas来实现呢?
canavs本质上也是图片,但是,canvas绘制的文本效果并不是矢量的,拉伸和缩放可能并不会很清晰。因此,并不是推荐的技术选型。
好,就说这些吧。
感谢阅读!
本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。
本文地址:https://www.zhangxinxu.com/wordpress/?p=7445
(本篇完)
- 理解CSS3 transform中的Matrix(矩阵) (0.508)
- JS之我用单img元素实现了图像resize拉伸效果 (0.508)
- 致设计师:图标图形制作-路径为王 (0.304)
- 照片位图转SVG矢量图片JS工具primitive.js等简介 (0.304)
- SVG-Morpheus实现SVG图标图形间的补形动画 (0.282)
- 了不起的IE7浏览器-CSS新特性-实现与思维变革 (0.282)
- IE矩阵滤镜Matrix旋转与缩放及结合transform的拓展 (0.226)
- 小tip: IE下zoom或Matrix矩阵滤镜中心点变换实现 (0.226)
- SVG图标颜色文字般继承与填充 (0.135)
- css行高line-height的一些深入理解及应用 (0.113)
- CSS vertical-align的深入理解(二)之text-top篇 (RANDOM - 0.113)
文字换行怎么办?高度自适应怎么办?
同问···
文字换行怎么办···
需要主动换行,SVG不支持自动换行。
你这研究前端都已经要极致了吧
我现在有个问题 我的文字是可以编辑的,所以当字体小于12号时,我需要怎么办。张锅有思路赐教吗
给字体加上scale,缩小字体,看上去就小于12px了
话说调用GOOGLE字体是不是会影响网站打开速度?是不是要下载字体放回本地?
是的
发现这个方法还可以突破网页字体最小10px的限制,感谢张鑫旭老师提供的灵感
确定是10,不是12?