当前位置:首页 > 技术分析 > 正文内容

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

ruisui883个月前 (03-16)技术分析41

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

一、基本说明

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

(1)vwvhvminvmax 是一种视窗单位,也是相对单位。它相对的不是父节点或者页面的根节点。而是由视窗(Viewport)大小来决定的,单位 1,代表类似于 1%

视窗(Viewport)是你的浏览器实际显示内容的区域—,换句话说是你的不包括工具栏和按钮的网页浏览器。


(2)具体描述如下:

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


2,vw、vh 与 % 百分比的区别

(1)% 是相对于父元素的大小设定的比率,vwvh 是视窗大小决定的。

(2)vwvh 优势在于能够直接获取高度,而用 % 在没有设置 body 高度的情况下,是无法正确获得可视区域的高度的,所以这是挺不错的优势。


3,vmin、vmax 用处

做移动页面开发时,如果使用 vwwh 设置字体大小(比如 5vw),在竖屏和横屏状态下显示的字体大小是不一样的。

由于 vmin vmax 是当前较小的 vw vh 和当前较大的 vw vh。这里就可以用到 vmin vmax。使得文字大小在横竖屏下保持一致。


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 设置字体大小来实现响应式文字。



  
    
    hangge.com
    
  
  
      

宽度100%, 字体5%

宽度80%, 字体5%

宽度50%, 高度50%, 字体1%


2,效果图

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

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

1,样例代码



  
    
    hangge.com
    
  
  
      
      

2,效果图


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

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

(1)样例效果图

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



(2)样例代码

遮罩层使用 vwvh 实现全屏覆盖。弹出框添加到遮罩层中并居中。



  
    
    hangge.com
    <script type="text/javascript" src="js/jquery.js"></script>
    
  
  
      
      
居中弹出框
关闭

2,弹出框大小随视窗大小改变

(1)样例效果图

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



(2)样例代码

遮罩层使用 vwvh 实现全屏覆盖。而弹出框的尺寸位置同样使用 vwvh 设置。




  
    
    hangge.com
    <script type="text/javascript" src="js/jquery.js"></script>
    
  
  
      
      
居中弹出框
关闭


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

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


1,效果图

(1)点击按钮,在屏幕中央显示原始图片的大图。

(2)如果图片原始宽高均不超过屏幕宽高的 90%,则显示图片的默认大小。

(3)如果图片原始宽高均超过屏幕宽高的 90%,则限制为屏幕的 90%,使其能够完全显示。


2,样例代码




  
    
    hangge.com
    <script type="text/javascript" src="js/jquery.js"></script>
    
  
  
      
      


六、实现 Word 文档页面效果

1,效果图

(1)使用 vh 单位,我们可把 web 页面做得像 Office 文档那样,一屏正好一页。改变浏览器窗口尺寸,每页的大小也会随之变化。

(2)拖动滚动条,我们可以一直往下看到最后一页。


2,样例代码



  
    
    hangge.com
    <script type="text/javascript" src="js/jquery.js"></script>
    
    <script type="text/javascript">
      $(document).ready(function(){
        var lenPage = $("page").length;
        //自动添加每页底部的页码
        $("page").each(function(i){
          $(this).attr("data-page", "第 "+ (i+1) +" 页,共 "+ lenPage +" 页");
        });
      });
    </script>
  
  
    欢迎访问 hangge.com
    
    
  


原文出自:www.hangge.com 转载请保留原文链接:
https://www.hangge.com/blog/cache/detail_1715.html

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2783.html

分享给朋友:

“CSS3 - 新单位vw、vh、vmin、vmax使用详解(附样例)” 的相关文章

医疗养老收费管理系统

医疗养老收费管理系统headerfooter《医疗养老收费管理系统》是最新开发的适用于养老保险收费行业的管理系统。主要功能:1.基本信息:单位设置、缴费基数、缴费比例和队别设置;2.医疗保险管理:医疗保险人员信息、医疗保险收费、医疗保险信息查询、医疗保险收费查询、医疗保险收费情况;3.养老保险信息:...

Vue3,父组件子组件传值,provide(提供)和inject(注入)传值

父组件向子组件传值父子组件传递数据时,通常使用的是props和emit,父向子传递使用props,子向父传递使用emit。子组件接收3种方式// 1、简单接收 props:["title","isShow"], // 2、接收的同时对数据类型进行限制 props:{...

再来一波黑科技工具,低调使用

静读天下静读天下是一个特别优秀的电子书阅读器。它上面有多个在线书库,像古登堡计划,很多种优秀的书杂志,都可以下载来阅读。它还能智能识别章节功能,还支持外置的语音阅读功能。它支持多种文本格式,比如说txt,pdf,epub,mobi等等。为了便于阅读它还有10 种配色方式,还有夜间模式。不过免费版有广...

USB电池充电基础:应急指南

USB为便携设备供电与其串行通信功能一样,已经成为一种标准应用。如今,USB 供电已经扩展到电池充电、交流适配器及其它供电形式的应用。应用的普及带来的一个显著效果是便携设备的充电和供电可以互换插头和适配器。因此,相对于过去每种装置都采用专用适配器的架构相比,目前的解决方案允许采用多种电源进行充电。毋...

vue-router是如何解析query参数呢? #前端

vue-router 中的 query 解析。1. 大家好,我是龙仔。今天来分享 vue-router 是如何解析快乐参数的,因为使用 vue 路由会传 query 参数和快乐参数,所以从 vue 的角度来看如何解析传递的快乐参数。2. 基础知识大家应知道,快乐参数结构如:a、b、c、a、b、c、a...

Vue页面传参详解

一、两种方式方法1:name跳转页面this.$router.push({name:'anotherPage',params:{id:1}})另一页面接收参数方式:this.$route.params.id示例:控制台展示:方法2:path跳转页面this.$router.push(...