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

这篇文章主要介绍了css3新单位vwvh的使用教程,本文通过实例代码给大家介绍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

.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;}

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于CSS代码如何书写规范

以上就是关于css3的单位vw和vh的使用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1610209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 01:18:41
下一篇 2025年12月24日 01:18:53

相关推荐

  • CSS3的default伪类选择器的解析

    css3 :default 伪类选择器只能作用在表单元素上,表示默认状态的表单元素。接下来通过本文给大家介绍css3 :default伪类选择器使用简介,感兴趣的朋友跟随本站小编一起看看吧 一、CSS3 :default伪类选择器简介 CSS3 :default 伪类选择器只能作用在表单元素上,表示…

    2025年12月24日 好文分享
    000
  • 使用CSS3画基本的图形

    这篇文章主要介绍了CSS3 画基本图形,圆形、椭圆形、三角形等的相关资料,需要的朋友可以参考下  CSS3 圆形 #css3-circle{ width: 150px; height: 150px; border-radius: 50%; background-color: #232323;} CS…

    好文分享 2025年12月24日
    000
  • CSS3中not()选择器实现最后一行li去除某种css样式的代码

    这篇文章主要介绍了关于css3中not()选择器实现最后一行li去除某种css样式的代码,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 在日常开发中经常会遇到在循环中的最后一个li不同于其他的li,要去除某种css样式,本文介绍的是利用CSS3新增的:not()伪类选择符,实现起来非…

    2025年12月24日
    000
  • 使用CSS3点击按钮实现背景渐变动画的效果

    这篇文章给大家介绍的是,利用css3实现当点击按钮的时候,按钮的背景是渐变动画的效果,实现后的效果非常好,开发的时候利用这种效果的按钮会给用户一种非常酷炫的感受,感兴趣的朋友们下面来一起看看吧。 效果图如下: 实例代码如下: css3给按钮添加背景渐变动画button {color:#FFF;fon…

    2025年12月24日
    000
  • CSS3的Flexbox骰子布局的实现及分析

    这篇文章主要介绍了关于css3的flexbox骰子布局的实现及分析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 骰子布局顾名思义,就是好比骰子的一面最多可以放置9个点,而每个面放置的点数正好就是一个布局的模型图,这里我们就带来CSS3的Flexbox骰子布局的实现及问题讲解: 本文…

    好文分享 2025年12月24日
    000
  • CSS3的图层阴影和文字阴影的使用

    这篇文章主要介绍了关于css3的图层阴影和文字阴影的使用,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 box-shadow图层阴影属性和text-shadow文字阴影属性在用法上差不多,都以X轴和Y轴坐标系来控制阴影扩展,这里我们就来详解CSS3的图层阴影和文字阴影效果使用: bo…

    2025年12月24日 好文分享
    000
  • 用CSS3实现图片翻转效果

    这篇文章主要介绍了css3制作翻转效果的方法,css3打造3d翻牌效果,适用于扑克翻牌等游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 CSS3制作的翻牌效果,就是鼠标移到元素上,感觉可以看到元素背后的信息。大家如果制作考验记忆力的连连看、扑克类的游戏神马的,甚至给女朋友写一些话语,放在使用…

    2025年12月24日 好文分享
    000
  • 使用纯CSS3截取字符串

    这次给大家带来使用纯CSS3截取字符串,的注意事项有哪些,下面就是实战案例,一起来看一下。 代码实例如下: CSS #first{ width:120px; height:30px; background-color:#F30; overflow:hidden; text-overflow:clip…

    好文分享 2025年12月24日
    000
  • CSS3 实现侧边栏展开收起动画

    这篇文章主要介绍了如何使用css3 实现侧边栏展开收起动画,并附上了示例代码,非常的详细,推荐给需要的小伙伴。 @keyframes 规则用于创建动画。 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果 @keyframes 中创建动画时,请把它捆绑到某个选…

    好文分享 2025年12月24日
    000
  • 在CSS3中常用的几种颜色渐变模式

    现在html5  css3已经越来越流行,用css3实现p渐变已经不是什么难事了,这篇文章给大家整理了现在常用的三种颜色渐变模式,包括线性渐变、径向渐变和重复的线性渐变,文中通过示例代码介绍的很详细,有需要的朋友们可以参考借鉴,下面来一起看看吧。 一、线性渐变:linear-gradient 语法:…

    2025年12月24日 好文分享
    000
  • 如何通过CSS3进行2D转换

    转换是使元素改变形状、尺寸和位置的一种效果,CSS3包括2D转化和3D转化,在这里我们只接受2D转化! 1、translate()方法      通过 translate() 方法,元素从其当前位置移动,根据给定的位置参数进行转化      代码实现:    实际效果: 2.rotate() 方法 …

    2025年12月24日 好文分享
    000
  • css3的transform中scale缩放的分析

    这篇文章主要介绍了css3的transform中scale缩放的使用方法,需要的朋友可以参考下 下面我们从3个方面开始介绍: 1、scale(x,y) 对元素进行缩放 X表示水平方向缩放的倍数 | Y表示垂直方向的缩放倍数Y是一个可选参数,没有设置的话,则表示X,Y两个方向的缩放倍数是一样的。并以X…

    好文分享 2025年12月24日
    000
  • 利用CSS3编写类似iOS中的复选框及带开关的按钮的代码

    这篇文章主要介绍了使用css3编写类似ios中的复选框及带开关的按钮,需要的朋友可以参考下 checkbox多选 最近写了一个适合移动端的checkbox,如图: ps:中间的勾勾是iconfont,iOS风格的。 具体的HTML: 立即学习“前端免费学习笔记(深入)”; 默认未选中 默认选中 橘黄…

    2025年12月24日
    000
  • 如何用css3绘制一个圆的loading转圈动画

    这篇文章主要介绍了css3如何绘制一个圆圆的loading圈的相关资料,内容挺不错的,现在分享给大家,也给大家做个参考。 如何绘制一个圆圆的loading圈 小程序里需要一个像下面的loading,原生的没有,引入别的组件库又太大,所有决定自己写个。 1.基本原理 动态的实现原理是给8个小圆圈设置透…

    2025年12月24日
    000
  • 关于CSS3中Animation动画属性的用法解析

    这篇文章主要为大家详细介绍了css3中animation动画属性用法,教大家如何使用animation动画,感兴趣的小伙伴们可以参考一下 要使用animation动画,先要熟悉一下keyframes,Keyframes的语法规则:命名是由”@keyframes”开头,后面紧接着是这个“动画的名称”加…

    2025年12月24日
    000
  • CSS3区域模块region的相关代码

    这篇文章主要介绍了css3区域模块region相关编写示例,对页面排版相关部分的工作非常有帮助意义,需要的朋友可以参考下 印刷媒体,例如一本杂志或一份报纸,相比网站最大的优势是完全灵活的安排页面和段落布局。例如,印刷媒体已经能够优雅地在多个列中填充内容,甚至复杂到如下面屏幕截图所示。 然而,由于We…

    2025年12月24日 好文分享
    000
  • 如何利用CSS3的线性渐变linear-gradient制作边框

    这篇文章主要介绍了关于如何利用css3的线性渐变linear-gradient制作边框,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 linear-gradient线条用来制作边框还是比较给力的,尤其是利用其描边可以制作一些复制的边框效果,这里我们就来看一下利用CSS3的线性渐变li…

    好文分享 2025年12月24日
    000
  • 用CSS3制作照片墙的特效

    这篇文章主要为大家详细介绍了css3制作漂亮的照片墙的具体步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享利用CSS3动画制作照片墙的详细步骤,供大家参考,具体内容如下 第一种实现效果: Html代码如下: 照片墙制作@@##@@@@##@@@@##@@@@##@@@@##…

    2025年12月24日
    000
  • 如何使用源生css3实现圆环加载进度条

    这次给大家带来如何使用源生css3实现圆环加载进度条,使用源生css3实现圆环加载进度条的注意事项有哪些,下面就是实战案例,一起来看一下。 效果图: 当时的要求是让进度条以扇形渐变的效果加载。我想了半天,好像只有用border-img来做渐变图了,还有一个超笨的方法就是写50个长方形分布在进度条上。…

    2025年12月24日
    000
  • CSS3制作圆角图片和椭圆形图片

    这篇文章主要教大家css3制作圆角图片和椭圆形图片的具体实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了CSS3制作圆角和椭圆形图片的方法,供大家参考,具体内容如下 1、圆角图片 XML/HTML Code复制内容到剪贴板 img { border-radius: 8…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信