热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

html文件怎么生产vm页面,认识视口单位vm、vh在网页中的排版应用

在之前的两篇关于构建模块化的文章中,谈到了rem&em和响应式排版,而在文章的评论中,对基于视口单位的网页排版抱有很大的想象空间。由于视口

在之前的两篇关于构建模块化的文章中,谈到了 rem & em 和 响应式排版,而在文章的评论中,对基于视口单位的网页排版抱有很大的想象空间。

由于视口单位涉及到计算,有一段时间我是抵制在工作使用视口单位。但就在上周,我克服了心中的抵制情绪,开始去了解视口单位在网页排版中的使用。在深入介绍视口单位以及其在网页排版中的工作原理时,先了解下有哪些常见的视口单位。

视口单位是什么?

在 CSS 规范中,有4种类型的可用视口单位:

vw --- 1vw 等于视口宽度的 1%

vh --- 1vh 等于视口高度的 1%

vmin --- vw 和 vh 中的较小值

vmax --- vw 和 vh 中的较大值

视口,即浏览器屏幕大小,1vw 等于浏览器宽度的 1%,100vw 即整个浏览器的宽度。

687474703a2f2f7a656c6c776b2e636f6d2f696d616765732f323031362f76696577706f72742d62617365642d7479706f6772617068792f76696577706f72742d756e6974732e706e67

视口的单位大小会根据视口大小的改变自动计算,视口大小的改变常发生于页面加载、页面缩放或者屏幕方向的改变(横纵切换)。正因为如此,创建一个大小总为视口四分之一大小的容器是非常容易滴:

.component {

width: 50vw;

height: 50vh;

background: rgba(255, 0, 0, 0.25)

}

687474703a2f2f7a656c6c776b2e636f6d2f696d616765732f323031362f76696577706f72742d62617365642d7479706f6772617068792f717561727465722d76696577706f72742d636f6d706f6e656e742e676966

将视口单位用于网页排版

将视口单位用于网页排版的唯一理由就是视口的单位大小会根据客户端浏览器的视口大小自动计算。也就是说,我们不必明确地通过媒体查询来声明字体大小。举个demo来简要说明一下。

代码如下,将断点设置为 800px,字体大小从 16px 变为 20px:

// 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; }

687474703a2f2f7a656c6c776b2e636f6d2f696d616765732f323031362f76696577706f72742d62617365642d7479706f6772617068792f666f6e742d73697a652d696e2d76772e676966

是不是很棒?一段简短的代码就实现了适配。但也有明显的缺点,就是视口的单位大小是根据设备屏幕的视口大小计算的,对于小屏幕设备(如宽度 320px 的手机),字体太小,难以阅读;对于大屏幕设备(如宽度 1440px 的笔记本),字体会变的非常大,同样也会难以阅读。

所以,现在面临的一个有意思的挑战是---怎么解决不同设备的视口宽度对视口单位计算的影响?一种简单地方式是设置 font-size 的最小值,然后通过 calc() 属性来动态计算小屏幕设备上的字体大小值:

html { font-size: calc(18px + 0.25vw) }

calc() 的这种计算方式(px+vw)。解决方式也很简单,结合使用百分比和vw 用于 calc 计算能获得更好地浏览器支持:

html { font-size: calc(112.5% + 0.5vw) }

687474703a2f2f7a656c6c776b2e636f6d2f696d616765732f323031362f76696577706f72742d62617365642d7479706f6772617068792f666f6e742d73697a652d76772d74616d65642e676966

下一个需要克服的挑战就是用视口单位来设置排版元素(h1-h6)的字体大小。

用视口单位设置其它排版元素的字体大小

首先,我创建一个

元素,将其字体大小设置为body 的两倍:

html { font-size: calc(112.5% + 0.25vw) }

h1 { font-size: calc((112.5% + 0.25vw) * 2); }

687474703a2f2f7a656c6c776b2e636f6d2f696d616765732f323031362f76696577706f72742d62617365642d7479706f6772617068792f76696577706f72742d73697a65642d6865616465722e706e67

我试图将 html 元素的字体大小乘以2,但并不可行,对于

,字体大小是基于百分比计算的。在字体大小继承了 的大小之后,又重新计算了 的字体大小。

现在假设视口宽度是 800px,默认的 font-size 是 16px:

对于 html 元素,112.5% 意味着 font-size 是 18px(112.5/100 * 16px)

0.25vw == 2px(800px * 0.25/100)

所以,html 的 font-size 的最终值是 20px(18px + 2px)

按照同样的方法来计算 h1 元素的 font-size,但需要特别注意的是此时百分比(112.5%)的相对计算量值:

对于 h1 元素,112.5% 意味着 font-size 是 22.5px(112.5/100 * 20px)

0.25vw == 2px(800px * 0.25/100)

所以,h1 的 font-size 的最终值是 49px((22.5px + 2px) * 2)

这与最初想把 h1 元素的 font-size 设置成 Body 的两倍大小的想法相违背。但我们知道了造成差异的原因是由于 h1 继承了 html 的 font-size,有两种方式来解决这个问题。

第一种方式就简单滴将 112.5% 改为 100%:

h1 { font-size: calc((100% + 0.25vw) * 2) }

第二种方式是确保 font-size 不被跨元素继承:

h1 { font-size: calc((100% + 0.25vw) * 2) }

p { font-size: calc((100% + 0.25vw)) }

这两种方式看起来有点 hack,看起来不爽,于是又继续尝试其它方法。最终,最干净的方式是使用 Rem & Em:

html { font-size: calc(112.5% + 0.25vw) }

h1 { font-size: 2em; }

687474703a2f2f7a656c6c776b2e636f6d2f696d616765732f323031362f76696577706f72742d62617365642d7479706f6772617068792f636f72726563746c792d73697a65642d6865616465722e706e67

既然讲到了字体大小的计算,那接下来的问题是:"视口单位的垂直和标准化计算是怎么样的?"

视口单位的垂直和标准化计算

这个相对比较容易回答。不知是否注意到,视口单位常仅被用于 html 元素?其它元素仍用 rem 和 em 作为计算的单位。

这就意味着,你仍然能使用 rem 和 em 用于视口单位的垂直和标准化计算,这和我之前在 Everything I Know about Responsive Typography 一文中讨论的一样。

结束这篇文章之前,最后一个需要谈到的问题是:要怎么样去计算 vw 的值,才能在视口宽度是 800px 时,排版的字体大小为 20px?很多人问到了这个问题,因而,将这个问题简化成一个词就是---精确。换句话说,如何才能字体大小更加精确?

精确

结果是,Mike 已经替我解决了这个问题,我只需要再简单解释下计算方式。

假设你要处理下面两种情况:

视口宽度是 600px 时,font-size 是 18px

视口宽度是 1000px 时,font-size 是 20px

首先,我们必须将较小的 font-size 值转为百分比。

第一部计算是:calc(18/16 * 100%) (或者 calc(112.5%))。

接下来,计算出 vw 值。**这部分的计算略繁琐:

计算 font-size 的最大差值 v1(22-18=4)

用 v1 除以视口宽度的最大差值 v2(1000-600)

将上述结果再乘以 100vw - smaller-viewport-width(100vw - 600)

最终,结果如下:

html {

font-size: calc(112.5% + 4 / 400 * (100vw - 600px) )

}

开始接触可能会比较复杂,但是熟悉之后,你可以把它简化成 Sass 混入(simple sass mixin)。

原文参照

Viewport Unit Based Typography

rem和em的使用

原文:基于视口单位的网页排版



推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
author-avatar
丫头2502892725
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有