头闻号

蔡晓君(个体经营)

沐浴液|洗面奶|面膜|眼霜|化妆品套装|其他彩妆化学品

首页 > 新闻中心 > 科技常识:css3新单位vw、vh的使用教程
科技常识:css3新单位vw、vh的使用教程
发布时间:2024-10-06 22:19:51        浏览次数:5        返回列表

今天小编跟大家讲解下有关css3新单位vw、vh的使用教程 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关css3新单位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

< 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 弹性布局的核心在于动态改变根元素大小 那么我们可以通过:·

给根元素大小设置随着视口变化而变化的 vw 单位 这样就可以实现动态改变其大小。

限制根元素字体大小的最大最小值 配合 body 加上最大宽度和最小宽度

这样我们就能够实现对布局宽度的最大最小限制。因此 根据以上条件 我们可以得出代码实现如下:

// rem 单位换算:定为 75px 只是方便运算 750px-75px、640-64px、1080px-108px 如此类推$vm_fontsize: 75; // iPhone [email protected] 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;}

总结

以上所述是小编给大家介绍的css3新单位vw、vh的使用教程 希望对大家有所帮助 如果大家有任何疑问请给我留言 小编会及时回复大家的。在此也非常感谢大家对爱蒂网站的支持!

来源:爱蒂网