一、定义字体类型 font-family:Arial,Helvetica,serif,sans-serif,monospace; ps.字体与字体之间用逗号隔开,句尾用分号 例如: <html> <h
顺晟科技
2021-06-21 11:16:09
308
在之前的两篇关于构建模块化的文章中,谈到了 rem & em 和 响应式排版,而在文章的评论中,对基于视口单位的网页排版抱有很大的想象空间。 由于视口单位涉及到计算,有一段时间我是抵制在工作使用视口单位。但就在上周,我克服了心中的抵制情绪,开始去了解视口单位在网页排版中的使用。在深入介绍视口单位以及其在网页排版中的工作原理时,先了解下有哪些常见的视口单位。
vw
--- 1vw 等于视口宽度的 1%vh
--- 1vh 等于视口高度的 1%vmin
--- vw 和 vh 中的较小值vmax
--- vw 和 vh 中的较大值.component {
width: 50vw;
height: 50vh;
background: rgba(255, 0, 0, 0.25)
}
// Note: CSS are all written in SCSS
html {
font-size: 16px;
@media (min-width: 800px) {
font-size: 20px;
}
}
对于上述代码,当视口大小是 800px 时,字体会从 16px "突变" 到 20px。在响应式排版中,这是经常采用的方式。有时,你会碰到在两个断点之间添加额外的媒体查询来确保页面排版适应所有设备:
html {
font-size: 16px;
@media (min-width: 600px) {
font-size: 18px;
}
@media (min-width: 800px) {
font-size: 20px;
}
}
尽管这样做能达到效果,但需要更多特定的媒体查询规则和字体大小。通常,会选择 3~4 中字体大小。
但是,如何不同媒体查询或字体大小的设置来达到同样的效果呢?
当然是有滴,这就是视口单位的用处了。你可以用视口单位来表示字体大小:
html { font-size: 3vw; }
是不是很棒?一段简短的代码就实现了适配。但也有明显的缺点,就是视口的单位大小是根据设备屏幕的视口大小计算的,对于小屏幕设备(如宽度 320px 的手机),字体太小,难以阅读;对于大屏幕设备(如宽度 1440px 的笔记本),字体会变的非常大,同样也会难以阅读。
所以,现在面临的一个有意思的挑战是---怎么解决不同设备的视口宽度对视口单位计算的影响?一种简单地方式是设置 font-size
的最小值,然后通过 calc()
属性来动态计算小屏幕设备上的字体大小值:
html { font-size: calc(18px + 0.25vw) }
参考 Mike Riethmuller 的 Precise control over responsive typography但是,不是所有的浏览器都支持
calc()
的这种计算方式(px+vw)。解决方式也很简单,结合使用百分比和vw
用于 calc
计算能获得更好地浏览器支持:
html { font-size: calc(112.5% + 0.5vw) }
下一个需要克服的挑战就是用视口单位来设置排版元素(h1-h6)的字体大小。
<h1>
元素,将其字体大小设置为body 的两倍:
html { font-size: calc(112.5% + 0.25vw) }
h1 { font-size: calc((112.5% + 0.25vw) * 2); }
我试图将 html
元素的字体大小乘以2,但并不可行,对于 <h1>
,字体大小是基于百分比计算的。在字体大小继承了 <html>
的大小之后,又重新计算了 <h1>
的字体大小。
现在假设视口宽度是 800px,默认的 font-size
是 16px:
html
元素,112.5% 意味着 font-size
是 18px(112.5/100 * 16px)html
的 font-size
的最终值是 20px(18px + 2px)h1
元素的 font-size
,但需要特别注意的是此时百分比(112.5%)的相对计算量值:
h1
元素,112.5% 意味着 font-size
是 22.5px(112.5/100 * 20px)h1
的 font-size
的最终值是 49px((22.5px + 2px) * 2)h1
元素的 font-size
设置成 Body 的两倍大小的想法相违背。但我们知道了造成差异的原因是由于 h1 继承了 html 的 font-size,有两种方式来解决这个问题。
种方式就简单滴将 112.5% 改为 :
h1 { font-size: calc(( + 0.25vw) * 2) }
第二种方式是确保 font-size 不被跨元素继承:
h1 { font-size: calc(( + 0.25vw) * 2) }
p { font-size: calc(( + 0.25vw)) }
这两种方式看起来有点 hack,看起来不爽,于是又继续尝试其它方法。最终,最干净的方式是使用 Rem & Em:
html { font-size: calc(112.5% + 0.25vw) }
h1 { font-size: 2em; }
既然讲到了字体大小的计算,那接下来的问题是:"视口单位的垂直和标准化计算是怎么样的?"
html {
font-size: calc(112.5% + 4 / 400 * (100vw - 600px) )
}
开始接触可能会比较复杂,但是熟悉之后,你可以把它简化成 Sass 混入(simple sass mixin)。
13
2022-09
13
2022-09
13
2022-09
13
2022-09
13
2022-09
13
2022-09