移动端网页大小自适应的实现方法
终于完成了手头的项目,失踪人口又回归啦!在做项目的过程中,遇到很多值得思考的点,速速道来。 第一个遇到的就是网页大小自适应的问题。
目前比较常用的方法有:
• 首先要让页面大小铺满屏幕又不能溢出。只需要在html<head>标签内加入viewport(如下),参数分别表示:页面宽度= 屏幕宽度,最大和最小伸缩比都是1,不允许用户拉缩。
- <meta name="viewport" content="width=device-width,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
• 百分比自适应:把长度单位转换为百分比来表示,这样在不同的宽度下,元素的长宽也会随之变化。
优点:宽度之间无缝衔接, 操作起来也相对比较方便。
缺点:字体大小需要另外一套自适应方法来调整;当屏幕宽度大于700px后,继续按照百分比元素会偏大,这个时候调整起来会比较麻烦。
•rem、em自适应 :用媒体查询的方法,确定在不同屏幕宽度下,改变<html>或<body>的fontsize。再用rem, em替代 px作为单位实现自适应。
优点:可以根据不同屏幕宽度来设置,可以完美解决上面说的屏幕偏大时的比例问题。字体的大小也不存在问题。
缺点:根据宽度区间来设置,无法实现无缝变换。
--------------------------------------------------------------------------------
这些兼容方法各有优缺点,都不算完美,怎样才能把优点结合在一起,同时避免缺点呢?
在参考淘宝网的自适应方法时,偶然发现页面<html>的fontsize会根据屏幕的宽度自动调整,而且屏幕宽度和所设字体大小的商是一定的。
于是猜想它是用JS获取屏幕宽度后,按照固定比例缩小后作为rem的单位长度实现自适应。
这不就是优点全有滴解决方法吗!?请容许我激动一下下(☆_☆)
--------------------------------------------------------------------------------
JS代码写起来非常简单,而且完美解决了用rem来设置无法达到无缝衔接的问题。
但移动端测试后问题就出现了,移动端safari在html加载完毕之前将JS以迅雷不及掩耳盗铃之势执行了,在页面没有按照viewport设置好宽度前,JS就读取了错误的宽度,导致元素变成原来的两倍大0^0, 需要用setTimeout()解决问题。
--------------------------------------------------------------------------------
最终代码
- Zepto(function($){
- var win = window,
- doc = document;
- function setFontSize() {
- var winWidth = $(window).width();
- // 640宽度以上进行限制
- var size = (winWidth / 640) * 100;
- doc.documentElement.style.fontSize = (size < 100 ? size : 100) + 'px' ;
- };
- //防止在html未加载完毕时执行,保证获取正确的页宽
- setTimeout(function(){
- // 初始化
- setFontSize();
- }, 200);
- });
最后补充用rem做自适应过程中发现的一个坑--当html设置较大的fontsize时,块元素内的行内元素margin、padding会出现额外的值,解决办法是把外面包的块元素fontsize设置为0。
以上这篇移动端网页大小自适应的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
原文地址:http://www.cnblogs.com/daisykoo/archive/2016/05/24/5522958.html
上一篇:详解HTML中table表格的frame和rules属性
栏 目:CSS/HTML
下一篇:浅析响应式框架中,table表头自动换行的快速解决方法
本文标题:移动端网页大小自适应的实现方法
本文地址:https://www.xiuzhanwang.com/a1/CSS_HTML/9629.html
您可能感兴趣的文章
- 04-02好看的字体样式css,好看的字体样式图片
- 04-02css样式引入方式有几种,网页引入css样式有几种方式
- 01-10利用iframe在网页中显示天气附效果截图
- 01-10深度剖析HTML的语意和与其相关的前端框架
- 01-10几个老式播放器的嵌入代码
- 01-10HTML基础必看---表单,图片热点,网页划区和拼接详解
- 01-10移动端HTML5实现文件上传
- 01-10dns-prefetch是什么 前端优化:DNS预解析提升页面速度
- 01-10前端开发每天必学之HTML入门介绍
- 01-10浅谈Html网页表格结构化标记的应用
阅读排行
本栏相关
- 04-02表格样式css样式,css样式表单
- 04-02好看的字体样式css,好看的字体样式图
- 04-02分页样式css,分页样式jq
- 04-02分页样式css,分页样式栏里用来定义首
- 04-02css样式的引入,css样式怎么引入
- 04-02css滚动条样式,css滚动条的样式
- 04-02css样式引入方式有几种,网页引入css样
- 04-02html中加入css样式的简单介绍
- 04-02vue中的css样式布局,vue添加css样式
- 04-02内嵌样式css,内嵌样式表,内部样式表
随机阅读
- 01-10C++实现将数组中的值反转
- 08-05dedecms织梦模板全站调用收藏数的方法
- 01-10C++ 类访问控制的条件总结
- 01-11常用的HTML富文本编译器UEditor、CKEdi
- 08-05DEDECMS点击主栏目默认显示第一个子栏
- 08-05dedecms织梦模板编辑文档的同时自动更
- 01-10vue实现分页加载效果
- 01-10C语言打印杨辉三角示例汇总
- 01-10bat批处理彻底隐藏文件的方法(使用
- 08-05织梦dedecms首页调用缩略图为背景