惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
WordPress大学
WordPress大学
C
Check Point Blog
GbyAI
GbyAI
U
Unit 42
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog
Vercel News
Vercel News
博客园 - 【当耐特】
美团技术团队
小众软件
小众软件
S
SegmentFault 最新的问题
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Cloudflare Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
借助SVG文字尺寸自动缩放甚至突破Chrome 12px限制 « 张鑫旭-...
张鑫旭,zhangxinxu · 2018-03-24 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=7445
本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意。

一、文本大小自适应效果抢先体验

效果如下GIF截图:

文字大小自适应拉伸效果截图

文字大小尺寸跟着容器的尺寸变化。

您可以狠狠地点击这里:SVG实现文字大小跟随容器自动变化demo

这对于一些需要尺寸自适应的slogon内容就很实用,例如移动端320~414宽度间的自适应。

并且,如果你足够细心,会发现,当缩到足够小的,在Chrome浏览器下,文字的尺寸居然小于12px了!

文字大小小于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

(本篇完)