您好,欢迎访问一九零五行业门户网

关于css3的单位vw和vh的使用

这篇文章主要介绍了css3新单位vw、vh的使用教程,本文通过实例代码给大家介绍vw、vh、vmin、vmax 的含义及vw、vh与%百分比的区别,感兴趣的朋友一起看看吧
响应式布局的单位我们第一时间会想到通过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 widthvh = view height
这两个单位是css3引入的,以上称为视口单位允许我们更接近浏览器窗口定义大小。
vw、vh、vmin、vmax 的含义
(1)vw、vh、vmin、vmax 是一种视窗单位,也是相对单位。它相对的不是父节点或者页面的根节点。而是由视窗(viewport)大小来决定的,单位 1,代表类似于 1%。
视窗(viewport)是你的浏览器实际显示内容的区域—,换句话说是你的不包括工具栏和按钮的网页浏览器。
(2)具体描述如下:
vw:视窗宽度的百分比(1vw 代表视窗的宽度为 1%)
vh:视窗高度的百分比
vmin:当前 vw 和 vh 中较小的一个值
vmax:当前 vw 和 vh 中较大的一个值
vw、vh 与 % 百分比的区别
(1)% 是相对于父元素的大小设定的比率,vw、vh 是视窗大小决定的。
(2)vw、vh 优势在于能够直接获取高度,而用 % 在没有设置 body 高度的情况下,是无法正确获得可视区域的高度的,所以这是挺不错的优势。
vmin、vmax 用处
做移动页面开发时,如果使用 vw、wh 设置字体大小(比如 5vw),在竖屏和横屏状态下显示的字体大小是不一样的。
由于 vmin 和 vmax 是当前较小的 vw 和 vh 和当前较大的 vw 和 vh。这里就可以用到 vmin 和 vmax。使得文字大小在横竖屏下保持一致。
浏览器兼容性
(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月)
如何利用视口单位适配页面
仅使用vw作为css单位
1.根据设计稿的尺寸转换为vw单位(sass函数编译)
//iphone 6尺寸作为设计稿基准$vm_base: 375;@function vm($px) {    @return ($px / 375) * 100vw;}
2.无论是文本还是布局高宽、间距等都使用 vw
< p 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>< /p>.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 弹性布局的核心在于动态改变根元素大小,那么我们可以通过:·
给根元素大小设置随着视口变化而变化的 vw 单位,这样就可以实现动态改变其大小。
限制根元素字体大小的最大最小值,配合 body 加上最大宽度和最小宽度
这样我们就能够实现对布局宽度的最大最小限制。因此,根据以上条件,我们可以得出代码实现如下:
// 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;}
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注!
相关推荐:
关于css代码如何书写规范
以上就是关于css3的单位vw和vh的使用的详细内容。
其它类似信息

推荐信息