vh,vw单位你知道多少?

From: https://mp.weixin.qq.com/s/G7ZYCiO__4g2LjRuNl32Ew

响应式布局的单位我们第一时间会想到通过rem单位来实现适配,但是它还需要内嵌一段脚本去动态计算跟元素大小。 
比如:

 

(function (doc, win) {

 let docEl = doc.documentElement

 let resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'

 let recalc = function () {

   var clientWidth = docEl.clientWidth

   if (!clientWidth) return

   docEl.style.fontSize = 14 * (clientWidth / 320) + 'px'

 }

 if (!doc.addEventListener) return

 win.addEventListener(resizeEvt, recalc, false)

 doc.addEventListener('DOMContentLoaded', recalc, false)

})(document, window)

那有没有一个单位不需要JS和CSS耦合在一起的单位?答案是有的,就是vw/vh

 

vw = view width

vh = view height

这两个单位是CSS3引入的,以上称为视口单位允许我们更接近浏览器窗口定义大小。

视口单位(Viewport units)

Q:什么是视口? 
A:Peter-Paul Koch(”PPK大神”)提出视口的解释是:在桌面端,视口指的是在桌面端,指的是浏览器的可视区域;而在移动端,它涉及3个视口:Layout Viewport(布局视口),Visual Viewport(视觉视口),Ideal Viewport(理想视口)。

视口单位中的“视口”,桌面端指的是浏览器的可视区域;移动端指的就是Viewport中的Layout Viewport。

vh/vw与%区别

 

单位解释
vw1vw = 视口宽度的1%
vh1vh = 视口高度的1%
vmin选取vw和vh中最小的那个
vmax选取vw和vh中最大的那个

 

比如:浏览器视口尺寸为370px,那么 1vw = 370px * 1% = 6.5px(浏览器会四舍五入向下取7)

vh/vw与%区别在于,

单位依赖于
%元素的祖先元素
vh/vw视口的尺寸

兼容性问题

在移动端 iOS 8 以上以及 Android 4.4 以上获得支持,并且在微信 x5 内核中也得到完美的全面支持。

运用

仅使用vw作为CSS单位

使用 vw 单位作为唯一应用的一种 CSS 单位的这种做法下

1.根据设计稿的尺寸转换为vw单位(SASS函数编译)

 

//iPhone 6尺寸作为设计稿基准

$vm_base: 375;

@function vm($px) {

   @return ($px / 375) * 100vw;

}

2.无论是文本还是布局高宽、间距等都使用 vw

 

<div class="mod_nav">

 <nav class="mod_nav_list" v-for="n in 5">

   <a href="#" class="mod_nav_list_item">

     <span class="mod_nav_list_item_logo">

       <img src="http://jdc.jd.com/img/80">

     </span>

     <p class="mod_nav_list_item_name">导航入口</p>

   </a>

 </nav>

</div>

.mod_nav {

   background: #fff;

   &_list {

       display: flex;

       padding: vm(15) vm(10) vm(10);

       &_item {

           flex: 1;

           text-align: center;

           font-size: vm(10);

           &_logo {

               display: block;

               margin: 0 auto;

               width: vm(40);

               height: vm(40);

               img {

                   display: block;

                   margin: 0 auto;

                   max-width: 100%;

               }

           }

           &_name {

               margin-top: vm(2);

           }

       }

   }

}

会得到这样的效果:

最优做法——搭配vw和rem

使用vm作为css单位代码量确实减少很多,但是你会发现它是利用视口单位实现,依赖于视口大小而自动缩放,失去了最大最小宽度的限制。

所以,我们需要结合rem单位来实现布局,而rem正好可以动态改变根元素大小,做法是:

  1. 给根元素大小设置vw–动态改变大小。

  2. 限制根元素font-size的最大最小值,配合bosy加上最大最小宽度。

 

// rem 单位换算:定为 75px 只是方便运算,750px-75px、640-64px、1080px-108px,如此类推

$vm_fontsize: 75; // iPhone 6尺寸的根元素大小基准值

@function rem($px) {

    @return ($px / $vm_fontsize ) * 1rem;

}

// 根元素大小使用 vw 单位

$vm_design: 750;

html {

   font-size: ($vm_fontsize / ($vm_design / 2)) * 100vw;

   // 同时,通过Media Queries 限制根元素最大最小值

   @media screen and (max-width: 320px) {

       font-size: 64px;

   }

   @media screen and (min-width: 540px) {

       font-size: 108px;

   }

}

// body 也增加最大最小宽度限制,避免默认100%宽度的 block 元素跟随 body 而过大过小

body {

   max-width: 540px;

   min-width: 320px;

}

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

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

相关文章

Oracle教程之oracle 给用户授权

oracle 给用户授权_oracle 用户授权_oracle用户授权grant(授权)命令下面对创建的用户user01授权&#xff0c;命令如下&#xff1a;grant connect, resource to user01;(2)revoke(撤消)权限已授予的权限可以撤消。例如撤消(1)中的授权&#xff0c;命令如下&#xff1a;revoke co…

为什么说任何基于比较的算法将 5 个元素排序都需要 7 次?

排序算法对结果的唯一要求就是操作数满足全序关系&#xff1a; 如果 a≤b 并且 b≤c 那么 a≤c&#xff08;传递性&#xff09;。 对于 a 或 b&#xff0c;要不 a≤b&#xff0c;要不 b≤a&#xff08;完全性&#xff09;。这个问题可以用信息论来回答。 我从 1 到 5 中挑一个数…

shell中$0,$?,$!等的特殊用法

变量说明:$$Shell本身的PID&#xff08;ProcessID&#xff09;$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码&#xff08;返回值&#xff09;$-使用Set命令设定的Flag一览$*所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n&quo…

iTerm2分屏时,如何使得新窗口的当前路径和前一个窗口一样?

From: https://segmentfault.com/q/1010000005355758 Preferences 里面设置 Working Directory 为 reuse previous sessions directory

全国80几所重点大学ftp资源库(经常逛逛可能有惊喜哦)很难收集的,知道其他的友友可以留言完善...

2019独角兽企业重金招聘Python工程师标准>>> 重庆交通大学外国语学院ftp \\202.202.240.93/ 密码:a 帐号:as 电子科技大学ftp    ftp://xsc. cuit. edu. cn/   大连理工大学    ftp://ftp. dlut. edu. cn   上海交通大学    ftp://mssite. sjtu. …

PHP将字符串首字母大小写转换

From: https://www.cnblogs.com/52php/p/5675284.html 每个单词的首字母转换为大写&#xff1a;ucwords() 1 2 3 4 5 6 7 8 <?php $foo hello world!; $foo ucwords($foo); // Hello World! $bar HELLO WORLD!; $bar ucwords($bar); // HE…

python发送包含html、图片、附件和链接的邮件

从我的126邮箱给我的QQ邮箱发送测试邮件 1.smtplib模块的使用 smtplib库用来发送邮件。需要用到的函数如下&#xff1a; 连接到SMTP服务器&#xff0c;参数为SMTP主机和端口&#xff1a; SMTP.connect([host[,port]]) 登录SMTP服务器&#xff0c;参数为邮箱用户名和密码&#x…

使用composer下载依赖包下载失败的解决方法

From: https://blog.csdn.net/dlnumk/article/details/79200507 下载好的composer默认的下载地址是国外的&#xff0c;在下载的过程中网络不好或者可能被墙&#xff0c;将下载的地址换成国内的地址即可 有两种方式启用本镜像服务&#xff1a; 系统全局配置&#xff1a; 即将…

apiCloud中Frame框的操作,显示与隐藏Frame

Frame是一层一层的概念&#xff0c; 有的位于上层&#xff0c;有的位于下层。 1.加载菜单 2.加载页面层 3.首页拆分出内容层&#xff0c;这个时候内容层位于页面层的上方&#xff0c;当点击其他页面的时候&#xff0c;内容层遮挡住了他们 解决方案一 判断是否是首页&#xff0c…

迅雷Chrome插件引发的Uncaught ReferenceError: xl_chrome_menu is not defined JS报错

前几天发现我也有这问题 具体是点击某个button 会出这错。 倒是没啥影响不过用chrome控制台调试的时候比较烦 baidu了下 都说卸掉迅雷。。但是出于程序员的角度还是想解决掉BUG 我的方法是 找到对应的xl.js文件。、 找不到&#xff1f; 直接到chrome文件夹下搜索下xl.js就好了。…

PHP的PSR推荐规范,PSR-1,PSR-2,PSR-3,PSR-4详解

From: http://www.shuchengxian.com/article/128.html PHP的PSR推荐规范,PSR-1,PSR-2,PSR-3,PSR-4详解 PSR是php standards recommendation(php推荐标准)的简称。PHP-FIG制定了每个推荐的规范用于解决大多数php框架经常会遇到的某个具体问题。php框架无需频繁解决相同的问题&…

原生JavaScript第一篇

js的历史 在上个世纪的1995年&#xff0c;当时的网景公司正凭借其Navigator浏览器成为Web时代开启时最著名的第一代互联网公司。 由于网景公司希望能在静态HTML页面上添加一些动态效果&#xff0c;于是叫Brendan Eich这哥们在两周之内设计出了JavaScript语言。你没看错&#xf…

The Best Way to Unit Test in Android

http://simpleprogrammer.com/2010/07/27/the-best-way-to-unit-test-in-android/ http://simpleprogrammer.com/2010/07/29/the-best-way-to-unit-test-in-android-part-2/大概的思想非常简单&#xff0c;就是将activity做thin&#xff0c;通过提供Presenter与业务逻辑洽接。这…

PSR-2 代码风格规范

From: https://blog.csdn.net/qq_28602957/article/details/52248239 这篇规范是PSR-1&#xff08;基本代码规范&#xff09;的扩展和继承。 本规通过制定一系列规范化PHP代码的规则&#xff0c;以减少在浏览不同作者的代码时&#xff0c;因代码风格的不同而造成不便。 这个…

API的非向后兼容性无论如何通常代表着一种比较差的设计

不管一个类库或者工具方法实现多么的好&#xff0c;如果无法做到向后兼容性&#xff0c;通常会给用户带来很大的升级成本&#xff0c;很多对此的依赖如果希望在后续的升级和维护期间使用该类库的其他新增特性或者好处&#xff0c;将不得不推迟升级亦或是被迫接受改变。 无论这个…

学习《css世界》笔记之使用css实现凹凸效果

显示效果 HTML <span class"ao"></span> <span class"tu"></span>CSS .ao,.tu{display: inline-block;width: 0;font-size: 14px;line-height: 18px;margin: 35px;/* color: #fff; *//* 文字颜色 */}.ao:before,/* :before的主…

第二届河南省大学生程序设计竞赛 Dr.Kong的机器人

Dr.Kong的机器人Dr.Kong设计了一个可以前进或后退机器人&#xff0c;该机器人在每个位置i会得到一个移动步数的指令Ki (i1,2„N),聪明的机器人自己会判断是要前进Ki步还是后退Ki步。例如&#xff1a;给定指令序列(3 3 1 2 5)&#xff0c;表示机器人在第1个位置时&#xff0c;可…

PHP操作Redis常用技巧

From: http://www.php.cn/php-weizijiaocheng-395387.html 这篇文章主要介绍了PHP操作Redis常用技巧,结合实例形式总结分析了php针对redis的连接、认证、string、hash等操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了PHP操作Redis常用技巧。分享给大家供大家参考&am…

IO调度算法

IO调度算法的选择 一) I/O调度程序的总结 1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成. 2) 每个块设备都有它自己的队列. 3) I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作. 4) 内核…

ORA-01555 原因与解决

ORA-01555 原因与解决&#xff1a; 前面提到了ORA-01555错误&#xff0c;那么现在来看一下ORA-01555错误是怎样产生的。由于回滚段是循环使用的&#xff0c;当事务提交以后&#xff0c;该事务占用的回滚段事务会被标记为非活动&#xff0c;回滚段空间可以被覆盖重用。那么一个问…