当前位置: 首页 > news >正文

vw+rem自适应布局

开发过程中,我们希望能够直接按照设计图来开发,不管设计图是两倍还是三倍图,能够直接写设计图尺寸而不需要换算,同时有高质的设计图还原度,想想都比较爽。
这里介绍一种使用vw和rem来布局的方案。
该方案思路主要是,设置视口宽度为设备宽度,使用vw来动态设置根元素的font-szie,同时使用sass的css function来实现设计尺寸转rem的功能,从而实现一套不需要js计算而自动设置根元素font-szie的rem布局

vw

vw表示当前视口宽度的百分之一
rem布局过程中依赖于根元素的font-size属性,而如果设置一个固定的font-size,再使用rem来布局,会导致小屏手机视觉上觉得网页被放大,而大屏手机上则显得网页布局稀疏。
所以咱们需要根据收据的屏幕大小等比的设置font-size,从而实现大小屏手机视觉一致的效果。实现这个功能可以使用js在页面载入时,读取屏幕宽度,再根据设计图标准宽度做一些转换。
而使用vw天然就是一个根据屏幕宽度来做计算的长度单位,完美实现以上js计算功能。同时在移动端,vw的兼容性还不错,完全可以直接使用

计算方法

// 设计图标准根元素字体 / 设计图标准宽度 * 100
const vw = 16 / 750 * 100

例如,设计图以6s为标准,2倍尺寸,宽度750px,而你设置根元素字体大小为16px,那么计算出的vw就是2.13333vw,直接在css中设置

html {
    font-size: 2.13333vw;
}

这个时候,我们在标准宽度下根元素实际字体大小是16px,如果到5s手机上面,则根元素实际字体大小为13.653px。根元素的字体大小变了,页面中使用rem来设置的边距、长度、字体大小都会发现改变,页面看起来像是缩小了一点点,但是所有的布局跟6s都是一样的。

自动转换rem

设计图的设计尺寸一般都是2倍或者3倍,如果此时咱们自己转换成一倍的再去根据根元素计算rem那也太累了。
比如2倍设计图上面的56px,那么咱们需要:56 / 2 / 16,心态崩溃~~~
算是不可能自己算的,找插件呗,这个轮子早就被造好了,postcss-pxtorem就是专门来干这个事情的,配置好设计尺寸,设计倍数,然后css里面直接写56px,插件会自己给你计算成 (56 / 2 / 16)px,是不是很棒。
加载配置一个插件也挺麻烦的,如果你刚好在sass之类的css预处理器,完全可以使用sass function来自动计算。

$rootSize: 16px!default;
$designWidth: 750px!default;
$designRatio: 2!default;@function rem($px) {@return $px / $rootSize / $designRatio * 1rem;
}
@function rootVw() {@return $rootSize / $designWidth * $designRatio * 100vmin;
}

这样就一次性计算好了根元素font-size,也可以使用rem()来自动计算rem了

html{font-size: rootVw();
}
body{padding: rem(15px);
}

http://www.lryc.cn/news/190417.html

相关文章:

  • 【MySql】mysql之MHA高可用配置及故障切换
  • 如何在 Spring Boot 中进行数据备份
  • 为Yolov7环境安装Cuba匹配的Pytorch
  • SpringBoot基于jackson对象映射器扩展mvc框架的消息转换器
  • 计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度(matlab代码)
  • 【低代码表单设计器】:创造高效率的流程化办公!
  • 26、类型别名
  • nslookup命令查询指定域名或ingress地址对应的IP地址。举个例子
  • 如何设计一个网络爬虫?
  • 风储联合系统的仿真模型研究
  • JS VUE 用 canvas 给图片加水印
  • 主动配电网故障恢复的重构与孤岛划分matlab程序
  • 2023C语言暑假作业day6
  • java try 自动关闭流
  • WebDAV之π-Disk派盘 + 元思笔记
  • electron自定义标题栏,并监听双击以及右键改变窗口大小。
  • Beam Focusing for Near-Field Multi-User MIMO Communications阅读笔记
  • Unity基础课程之物理引擎6-关于物理材质的使用和理解
  • 用c语言写一个剪刀石头布小游戏
  • 【MySQL入门到精通-黑马程序员】MySQL基础篇-DCL
  • SpringBoot配置文件加载顺序
  • github小记(一):清除github在add或者commit之后缓存区
  • 【Debian系统】:安装debian系统之后,很多命令找不到,需要添加sudo之后才能使用,以下解决方法
  • 深入了解归并排序:原理、性能分析与 Java 实现
  • docker stop了一个docker exec容器,要怎么再启动呢
  • 【总结】kubernates 插件工具总结
  • RK3588平台产测之ArmSoM-W3 DDR带宽监控
  • 基于SpringBoot的作业管理系统设计与实现
  • TailwindCss Functions Directives
  • MDK自动生成带校验带SVN版本号的升级文件