CSS3 - 新单位vw、vh、vmin、vmax使用详解(附样例)

关于height:100%和height:100vh的区别

pxem 这样的长度单位大家肯定都很熟悉,前者为绝对单位,后者为相对单位。CSS3 又引入了新单位:vwvhvminvmax。下面对它们做个详细介绍。

一、基本说明

1,vw、vh、vmin、vmax 的含义

     (1)vw、vh、vmin、vmax 是一种视窗单位,也是相对单位。它相对的不是父节点或者页面的根节点。而是由视窗(Viewport)大小来决定的,单位 1,代表类似于 1%
视窗(Viewport)是你的浏览器实际显示内容的区域—,换句话说是你的不包括工具栏和按钮的网页浏览器。

     (2)具体描述如下:

  • vw:视窗宽度的百分比(1vw 代表视窗的宽度为 1%
  • vh:视窗高度的百分比
  • vmin:当前 vwvh 中较小的一个值
  • vmax:当前 vwvh 中较大的一个值

2,vw、vh 与 % 百分比的区别
(1)% 是相对于父元素的大小设定的比率,vw、vh 是视窗大小决定的。
(2)vw、vh 优势在于能够直接获取高度,而用 % 在没有设置 body 高度的情况下,是无法正确获得可视区域的高度的,所以这是挺不错的优势。

3,vmin、vmax 用处
做移动页面开发时,如果使用 vw、wh 设置字体大小(比如 5vw),在竖屏和横屏状态下显示的字体大小是不一样的。
由于 vminvmax 是当前较小的 vwvh 和当前较大的 vwvh。这里就可以用到 vminvmax。使得文字大小在横竖屏下保持一致。

4,浏览器兼容性
     (1)桌面 PC

  • Chrome:自 26 版起就完美支持(2013年2月)
  • Firefox:自 19 版起就完美支持(2013年1月)
  • Safari:自 6.1 版起就完美支持(2013年10月)
  • Opera:自 15 版起就完美支持(2013年7月)
  • IE:自 IE10 起(包括 Edge)到现在还只是部分支持(不支持 vmax,同时 vm 代替 vmin

     (2)移动设备

  • Android:自 4.4 版起就完美支持(2013年12月)
  • iOS:自 iOS8 版起就完美支持(2014年9月)

二、一个简单的样例

1,页面代码
视窗(Viewport)单位除了可以用来设置元素的宽高尺寸,也可以在文本中使用。下面使用 vw 设置字体大小来实现响应式文字。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>hangge.com</title><style>html, body, div, span, h1, h2, h3 {margin: 0;padding: 0;border: 0;}.demo {width: 100vw;font-size: 5vw;margin: 0 auto;background-color: #50688B;color: #FFF;}.demo2 {width: 80vw;font-size: 5vw;margin: 0 auto;background-color: #ff6a00;}.demo3 {width: 50vw;height: 50vh;font-size: 1vw;margin: 0 auto;background-color: #ff006e;color: #FFF;}</style></head><body><div class="demo"><h1>宽度100%, 字体5%</h1></div><div class="demo2"><h2>宽度80%, 字体5%</h2></div><div class="demo3"><h3>宽度50%, 高度50%, 字体1%</h3></div></body>
</html>

2,效果图
在这里插入图片描述

三、实现完整覆盖的遮罩层

有时为了突出弹出框,或者避免页面元素被点击。我们需要一个覆盖整个可视区域的半透明遮罩,这个使用 vw、vh 就可以很轻易地实现。

1,样例代码

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>hangge.com</title><style>html, body, div, span, button {margin: 0;padding: 0;border: 0;}button {width: 120px;height: 30px;color: #FFFFFF;font-family: "微软雅黑";font-size: 14px;background: #28B995;}#mask {width: 100vw;height: 100vh;position: fixed;top: 0;left: 0;background: #000000;opacity: 0.5;display: none;}</style></head><body><button onclick="document.getElementById('mask').style.display='inline'">点击显示遮罩</button><div id="mask" onclick="document.getElementById('mask').style.display='none'"/></div></body>
</html>

2,效果图

在这里插入图片描述
在这里插入图片描述

四、实现居中显示的弹出框

1,弹出框大小随内容自适应

     (1)样例效果图

  • 点击弹出按钮后,会显示一个在整个屏幕上居中显示的弹出框。
  • 弹出框的大小根据内容的大小自适应(logo 图片),同时弹出框后面还有个覆盖整个屏幕的半透明遮罩层。
  • 点击关闭按钮后,则隐藏弹出框。

在这里插入图片描述
     (2)样例代码
遮罩层使用 vw、vh 实现全屏覆盖。弹出框添加到遮罩层中并居中。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>hangge.com</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script><style>html, body, div, span, button {margin: 0;padding: 0;border: 0;}button {width: 120px;height: 30px;color: #FFFFFF;font-family: "微软雅黑";font-size: 14px;background: #28B995;}.dialog-container {display: none;width: 100vw;height: 100vh;background-color: rgba(0,0,0,.35);text-align: center;position: fixed;top: 0;left: 0;z-index: 10;}.dialog-container:after {display: inline-block;content: '';width: 0;height: 100%;vertical-align: middle;}.dialog-box {display: inline-block;border: 1px solid #ccc;text-align: left;vertical-align: middle;position: relative;}.dialog-title {line-height: 28px;padding-left: 5px;padding-right: 5px;border-bottom: 1px solid #ccc;background-color: #eee;font-size: 12px;text-align: left;}.dialog-close {position: absolute;top: 5px;right: 5px;font-size: 12px;}.dialog-body {background-color: #fff;}</style></head><body><button onclick="$('#dialogContainer').show();">点击显示弹出框</button><div id="dialogContainer" class="dialog-container"><div class="dialog-box"><div class="dialog-title">居中弹出框</div><a onclick="$('#dialogContainer').hide();" class="dialog-close">关闭</a><div class="dialog-body"><img src="logo.png" class="demo-image" /></div></div></div></body>
</html>

2,弹出框大小随视窗大小改变
     (1)样例效果图

  • 点击弹出按钮后,会显示一个在整个屏幕上居中显示的弹出框。
  • 弹出框的大小不再由内容的大小决定,而是随视窗大小改变(宽高均为屏幕可视区域的 80%)。
  • 点击关闭按钮后,则隐藏弹出框。

在这里插入图片描述
在这里插入图片描述
     (2)样例代码
遮罩层使用 vw、vh 实现全屏覆盖。而弹出框的尺寸位置同样使用 vw、vh 设置。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>hangge.com</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script><style>html, body, div, span, button {margin: 0;padding: 0;border: 0;}button {width: 120px;height: 30px;color: #FFFFFF;font-family: "微软雅黑";font-size: 14px;background: #28B995;}.dialog-container {display: none;width: 100vw;height: 100vh;background-color: rgba(0,0,0,.35);text-align: center;position: fixed;top: 0;left: 0;z-index: 10;}.dialog-box {top:10vh;left:10vw;width: 80vw;height: 80vh;text-align: left;position: absolute;border: 1px solid #ccc;display: flex;flex-direction: column;}.dialog-title {line-height: 28px;padding-left: 5px;padding-right: 5px;border-bottom: 1px solid #ccc;background-color: #eee;font-size: 12px;text-align: left;}.dialog-close {position: absolute;top: 5px;right: 5px;font-size: 12px;}.dialog-body {background-color: #fff;flex:1;overflow: auto;}</style></head><body><button onclick="$('#dialogContainer').show();">点击显示弹出框</button><div id="dialogContainer" class="dialog-container"><div class="dialog-box"><div class="dialog-title">居中弹出框</div><a onclick="$('#dialogContainer').hide();" class="dialog-close">关闭</a><div class="dialog-body"><img src="logo.png" class="demo-image" /></div></div></div></body>
</html>

五、显示大图时限制其最大尺寸

我们还可以通过视图单位来限制一些元素的最大宽度或高度,避尺寸过大而超出屏幕。

1,效果图
(1)点击按钮,在屏幕中央显示原始图片的大图。
(2)如果图片原始宽高均不超过屏幕宽高的 90%,则显示图片的默认大小。
(3)如果图片原始宽高均超过屏幕宽高的 90%,则限制为屏幕的 90%,使其能够完全显示。

在这里插入图片描述
在这里插入图片描述
2,样例代码

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>hangge.com</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script><style>html, body, div, span, button {margin: 0;padding: 0;border: 0;}button {width: 120px;height: 30px;color: #FFFFFF;font-family: "微软雅黑";font-size: 14px;background: #28B995;}.dialog-container {display: none;width: 100vw;height: 100vh;background-color: rgba(0,0,0,.35);text-align: center;position: fixed;top: 0;left: 0;z-index: 10;}.dialog-container:after {display: inline-block;content: '';width: 0;height: 100%;vertical-align: middle;}.dialog-box {display: inline-block;text-align: left;vertical-align: middle;position: relative;}.demo-image {max-width: 90vw;max-height: 90vh;}</style></head><body><button onclick="$('#dialogContainer').show();">点击显示大图</button><div id="dialogContainer" class="dialog-container" onclick="$('#dialogContainer').hide();"><div class="dialog-box"><img src="image.jpg" class="demo-image" /></div></div></body>
</html>

六、实现 Word 文档页面效果

1,效果图
     (1)使用 vh 单位,我们可把 web 页面做得像 Office 文档那样,一屏正好一页。改变浏览器窗口尺寸,每页的大小也会随之变化。
     (2)拖动滚动条,我们可以一直往下看到最后一页。

在这里插入图片描述
在这里插入图片描述
2,样例代码

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>hangge.com</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script><style>html, body, div, span, button {margin: 0;padding: 0;border: 0;}body {background-color: #789BC9;}page {display: block;height: 98vh;width: 69.3vh;margin: 1vh auto;padding: 12vh;border: 1px solid #646464;box-shadow: 0 0 15px rgba(0,0,0,.75);box-sizing: border-box;background-color: white;position: relative;}page:after {content: attr(data-page);color: graytext;font-size: 12px;text-align: center;bottom: 4vh;position: absolute;left: 10vh;right: 10vh;}a {color: #34538b;font-size: 14px;}</style><script type="text/javascript">$(document).ready(function(){var lenPage = $("page").length;//自动添加每页底部的页码$("page").each(function(i){$(this).attr("data-page", "第 "+ (i+1) +" 页,共 "+ lenPage +" 页");});});</script></head><body><page><a href="http://hangge.com">欢迎访问 hangge.com</a></page><page></page><page></page></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

删除两个双向链表中值相同的结点--无空白头结点

有两个双向链表&#xff0c;头指针为&#xff1a;pListA和pListB&#xff0c;要求删除这两个链表中值相同的结点, C语言实现&#xff0c;结点结构如下&#xff1a; struct node // 双向链表结点 {int key;struct node *front, *next; };完整源代码如下&#xff1a; /*功…

Enze Second day

哈喽&#xff0c;很高兴在云和学院又学了一天的新知识&#xff0c;现在&#xff0c;我来继续总结一下今天所学的以及对昨天的一些补充。 变量 • 声明变量的语法格式:–数据类型 变量名;•赋值: 变量名值;变量的命名 •命名规则&#xff1a;–1 必须以“字母”_或符号开头…

财务管理(Finance Management)

财务管理是指企业为实现良好的经济效益&#xff0c;在组织企业的财务活动、处理财务关系过程中所进行的科学预测、决策、计划、控制、协调、核算、分析和考核等一系列企业经济活动过程中管理工作的全称&#xff0c;其主要特点是对企业生产和再生产过程中的价值运动进行的管理&a…

微信小程序组件知识点GET

1. 可滚动视图区域组件scroll-view 在滚动 scroll-view 时会阻止页面回弹&#xff0c;所以在 scroll-view 中滚动&#xff0c;是无法触发下拉刷新事件 onPullDownRefresh&#xff0c;所以如果一定要使用下拉刷新&#xff0c;请使用页面的滚动&#xff0c;而不是 scroll-view &…

搭建一台本地json服务器

1、全局安装json-server(此时不管在哪个目录下面都可以) 2、cd至当前的项目文件夹所在的位置&#xff0c;新建一个文件夹jsonserver 3、在当前目录下运行npm init 4、再次安装运行 npm install json-server --save 5、此时的目录结构 --jsonserver--node_moduies--package-loc…

删除两个双向链表中值相同的结点--带空白头结点

有两个双向链表&#xff0c;空白头结点为&#xff1a;ListA和ListB&#xff0c;要求删除这两个链表中关键字相同的结点, C语言实现&#xff0c;结点结构如下&#xff1a; view plainstruct node // 双向链表结点 { int key; struct …

寻求空间支持

寻求支持.NET Framework 3.5以及SQL Server的空间&#xff0c;最好有本地磁盘读写权限&#xff08;特定数据目录&#xff09;。

判断浏览器版本语句大全

<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> <!--[if IE]> 所有的IE可识别 <![endif]--> <!--[if IE 5.0]> 只有IE5.0可以识别 <![endif]--> <!--[if IE 5]> 仅IE5.0与IE5.5可以识别 <![endif]--> <!--[…

微信小程序API~GET

框架提供丰富的微信原生API&#xff0c;可以方便的调起微信提供的能力&#xff0c;如获取用户信息&#xff0c;本地存储&#xff0c;支付功能等 1. wx.on 开头的 API 是监听某个事件发生的API接口&#xff0c;接受一个 CALLBACK 函数作为参数。当该事件触发时&#xff0c;会调…

如何用DOS命令批量删除文件?(_desktop.ini 或 thumbs.db)

如何用DOS命令批量删除文件&#xff1f;比如viking蠕虫病毒会在系统里产生大量的“_desktop.ini”文件&#xff0c;虽然杀毒后系统无问题了&#xff0c;但看着总归不爽。我们可使用DOS命令批量删除“_desktop.ini”。 点击“开始”→“运行”&#xff0c;输入&#xff1a;“CMD…

Vue CLI3 开启gzip压缩

gizp压缩是一种http请求优化方式&#xff0c;通过减少文件体积来提高加载速度。html、js、css文件甚至json数据都可以用它压缩&#xff0c;可以减小60%以上的体积。 webpack在打包时可以借助 compression webpack plugin 实现gzip压缩&#xff0c;首先需要安装该插件&#xff…

让Sql Server也能出现如VS一样的智能提示工具--资源更新

一个非常实用的小插件&#xff0c;适合Sql Server2005以上版本&#xff0c;免费、无须注册。下面的图片是效果&#xff1a; http://rzhh.com.cn/down/sqlassc.rar 刚刚资源出错了&#xff0c;现在已经更新了资源&#xff0c;请大家下载。 转载于:https://www.cnblogs.com/zhang…

据库中事务、会话、线程这几个概念是什么关系

1、会话可以创建多个事务比如&#xff1a;使用客端连接数据库&#xff0c;这样你就可以执行很多个事务了2、一个事务只能由一个会话产生在数据库里的事务&#xff0c;如果在执行的SQL都是由会话发起的&#xff0c;哪怕是自动执行的JOB也是由系统会话发起的3、一个事务可能会产生…

什么是虚拟化,虚拟化的现状

什么事虚拟化 虚拟化是一个比较广义的概念&#xff0c;在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行&#xff1b;也可以说是一种解决方案&#xff0c;为了简化管理&#xff0c;最大化利用现有资源。例如&#xff1a;现有有一台服务器&#xff0c;平…

Wireshark数据包分析(一)——使用入门

Wireshark简介&#xff1a; Wireshark是一款最流行和强大的开源数据包抓包与分析工具&#xff0c;没有之一。在SecTools安全社区里颇受欢迎&#xff0c;曾一度超越Metasploit、Nessus、Aircrack-ng等强悍工具。该软件在网络安全与取证分析中起到了很大作用&#xff0c;作为一款…

给控件做数字签名

参考&#xff1a; http://babyt.cnblogs.com/archive/2005/03/14/118302.html http://babyt.cnblogs.com/archive/2005/03/14/118309.html 在控件(.ocx)开发完成后&#xff0c;一般需要将其打成cab包并发布出去&#xff0c;这样当用户的机器上无此控件时&#xff0c;浏览器…