热门标签 | 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字。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
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社区 版权所有