移动Web开发基础-利用VW单位适配布局
来源:互联网 发布:js显示当前时间年月日 编辑:程序博客网 时间:2024/06/02 07:28
前言
前面我们分享 移动Web开发基础-rem布局 的时候提到了两个方案。方案的最终目的都是为了形成一个“流单位”。
方案一是通过媒体查询给html
设置font-size
,密集的断点设置形成“流单位”。
方案二是通过JS脚本根据设备显示屏大小动态计算出根元素字体大小,这个计算结果几乎是连续的“流单位”。
两个方案的对比,我们常用的当然也是建议的方案是第二个。
目前来看,方案二存在一个问题是JS和HTML没有得到解耦,这里有一个视口单位VW天生就是“流单位”。
如果对视口相关知识点不熟悉的话可以阅读 移动Web开发基础-Viewport。
认识视口单位
根据CSS3规范,视口单位主要包括以下4个:
vw : 1vw 等于视口宽度的1%
vh : 1vh 等于视口高度的1%
vmin : 选取 vw 和 vh 中最小的那个
vmax : 选取 vw 和 vh 中最大的那个
视口单位区别于%单位,视口单位是依赖于视口的尺寸,根据视口尺寸的百分比来定义的;而%单位则是依赖于元素的祖先元素。
兼容性
目前常用的浏览器版本都是兼容该单位的,正说明我们可以开始使用视口单位来实现适配布局了。
使用VW布局页面
(以下都以iPhone 6的尺寸为例)
方案一:
最简单的方案就是所有的布局元素及属性都用VW来做单位,对应关系是:
设计稿 750px——>100vw
那我们书写时计算:(x/750)*100vw
sass:
$vw_base: 750; @function vw($px) { @return ($px / 750) * 100vw;}
方案二:
沿用rem布局方案,所有的布局元素及属性都用rem做单位,用vw单位给html
设置font-size
形成“流单位”,这样就不再需要JS来动态计算根元素字体大小。
如果以前你习惯了约定750px设计稿的根元素字体大小为100px的话,你可以直接设置:
html{ font-size: 13.3333vw;}
如果用过flexible适配方案的话,可能会更接受通过sass来计算,而且可以通过计算给body设置最大宽度和最小宽度,带来更好的体验。
// rem 单位换算:定为 75px 只是方便运算,750px-75px、640-64px、1080px-1080px,如此类推$vw_fontsize: 75; // iPhone 6尺寸的根元素大小基准值@function rem($px) { @return ($px / $vw_fontsize ) * 1rem;}// 根元素大小使用 vw 单位$vw_design: 750;html { font-size: ($vw_fontsize / ($vw_design / 2)) * 100vw; //就是相当于20vw // 同时,通过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;}
总结
根据以上分析,我们推荐方案二,这样也就不存在rem布局的相关问题了。用sass方便快捷的开始vw适配布局吧。
参考来源:
1.利用视口单位实现适配布局
2.再聊移动端页面的适配
- 移动Web开发基础-利用VW单位适配布局
- 移动Web开发基础-rem布局
- 移动Web开发基础-flexible布局方案
- 移动Web开发基础-百分比+flex布局方案
- 移动Web开发基础-flex弹性布局(兼容写法)
- 移动端布局单位
- 移动Web开发基础-Viewport
- 移动web开发响应式布局总结
- 移动web开发布局方式以及常见问题
- 移动web开发一之流式布局
- rem和em和px vh vw和% 移动端长度单位
- 记响应式布局vh/vw单位在安卓端微信浏览器以及UC浏览器的坑
- CSS3新vw, vh单位
- 手机移动web页面的排版与布局一点经验(尺寸单位兼容行。)
- 移动端布局单位选择之rem
- 移动Web应用程序开发 HTML5基础
- 移动Web开发基础-meta锦集
- 移动Web开发基础-reset样式
- Druid连接池与DbUtils整合工具类
- string.IsNullOrEmpty和string.IsNullOrWhiteSpace方法的区别
- Tensorflow实现Softmax Regression识别手写数字
- (4)qt5制作简易计算器详细步骤(ui界面)
- Igor and his way to work-Codeforce 793B BFS
- 移动Web开发基础-利用VW单位适配布局
- mysql 添加字段、删除字段、调整字段顺序
- Java web从入门到放弃(3)
- 编译进阶(二)精彩的C4
- 第14周—Java集合框架(第2题)
- Python学习日记 第六天
- 软键盘的显示和隐藏的正确姿势
- BZOJ5105: [CodePlus2017]晨跑
- 经典算法之二路归并排序