webapp,liveapp: 流式布局和rem布局
liveapp场景应用,一般针对的是移动端,近来也是很火,颇有一些感受,拿来分享一下。
页面宽度范围:
一般移动端页面我们的像素范围是320px-640px,最大640px,最小320px,所以设计稿就是按照640px来做
布局方式:
流式布局,百分比布局和rem。
目前我用过的主要是这rem和流式布局
流式布局:
网页的主要架构部分按照百分比布局,宽度百分比,高度定死;
如果是图片宽度设置百分比,高度根据图片的比例自适应,如果是封面图片可以高度定死,用background-size:cover显示部分就行;
一些具体的内容直接用像素定宽高就行了,比如用户头像,一些按钮,一些比较固定的文字。
下面这个页面就是流式布局,分别是640和320情况下的样子,下面的页面不是场景应用,只是举例


流式布局一般偏向于文字展示的页面,对整个页面比例要求不那么高的。
专门说说rem布局:
rem就是偏向于图片较多,不出现滚动条的满屏页面,且高度还原设计图比例的情况,所以下面的例子是基于满屏页面的情况。
关于rem的具体介绍参考 腾讯的rem文章http://isux.tencent.com/web-app-rem.html
因为rem是根据html的字体像素确定它的值,也就是html{font-size:20px}时 1rem==20px。
总之我们可以用js获取到屏幕的宽高后,通过修改html的font-size来控制整个页面的大小,来达到完整并高度还原设计稿。
我们的宽度范围仍然是320-640,我们怎么定义html的字体像素范围呢。
我们需要用字体像素对应320-640,比如font-size为10px的时候对应320px,那么确定10px为最小的基数,那么对应关系就会如下:
| font-size | 1rem | 宽度 | 用rem表示宽度 |
| 10px | 10px | 320px | 32rem |
| 20px | 20px | 640px | 32rem |
但实际上我更喜欢这样:
| font-size | 1rem | 宽度 | 用rem表示宽度 |
| 20px | 20px | 320px | 16rem |
| 40px | 40px | 640px | 16rem |
因为低于12px在某些浏览器里是默认还是为12px,因此当我们给html设置font-size:10px的时候,这时还是12px,就会对布局造成影响。
所以一般我以20px作为基数对应320px。
还有比如iphone4里,在微信下浏览器的高度比较矮,这时我们为适应高度的还会把font-size设置到18px左右,这样才可能显示完整。
好现在,我们设置body的宽度为16rem,根据当前屏幕的宽度修改html的跟字体大小
如果屏幕宽度大于等于640px,我们就设置为40px,小于等于320px就设置为20px。
如果是在320,640之间,就用对应的rem去计算,比如20px为320px基数时候,rem最大的值是16rem,16就作为基数去除屏幕宽度,
比如当前屏幕宽度是400px,那么根字体大小就是 400/16=26px
以下是js resize:
window.onresize = function(){
resize();
}
function resize(){
//html:20px: 16rem 320px
//html:40px: 16rem 640px
var base = 16;//rem
var wid = $(window).width();
var hei = $(window).height();
if(hei < 460){//适应个别高度较矮的设备
$('html').css('font-size', '18px');
return;
}
if(wid < 320){
$('html').css('font-size', '20px');
return;
}
if(wid > 640){
$('html').css('font-size', '40px');
return;
}
$('html').css('font-size', wid/16 + 'px');//在320和640之间,除以16的基数,来算font-size
}
resize();
基于rem,我们几乎都可以用绝对定位,相对于body就行了。
比如我们的设计稿,设计稿是640px的,对应的最大的font-size:40
有一个按钮宽度是200px,高度是100px,相对于图片左边距是40px,相对于图片上边距是80px。
那么我们的css就应该这样写:
.button{
position: absolute;
width: 200/40rem;(5rem) // 200px/40px = 5rem
height: 100/40rem;(2.5rem)
left: 40/40rem;(1rem)
top: 80/40rem;(2rem)
}
如果我们的设计稿是320px,按钮宽高边距和上面一样,那么我们css就应该这样写:
.button{
position: absolute;
width: 200/20rem;(10rem) //200px/20px = 10rem
height: 100/20rem;(5rem)
left: 40/20rem;(2rem)
top: 80/20rem;(4rem)
}
这样布局起来会省很多事情。
百分比布局:
还有一种就是单纯的百分比布局,也是全部用绝对定位,和以上rem不同的就是,用的百分比作为宽高边距的单位,这种方式并不推荐,控制力不强。
以下是一些心得:
1.fastclick最好都要使用
2.基于微信开发的时候,微信缓存非常厉害哟,有一次改了几个小时代码一直不对,最后发现是微信缓存,有时候不得不去系统管理里关闭微信和微信缓存进程。
3.最好还是用构建工具,比如gulp、grunt
4.做一个通用的demo start,供下次使用,包括gulp等构建工具,常用的三方和自定义的less、css loading,js相关文件和三方库
5.写一个图片预加载,未加载完前显示css loading,加载完了再显示页面,
以下是预加载的代码,主要针对一些大图片做加载,因为一般主要的大点的图片加载完,页面都会加载完,这算是一种小技巧吧,实际的精度也不差:
//图片预加载
function preloader(images, cb){
i = 0;
var onComplete = function(e){
i++;
if(i == images.length){
cb && cb();
}
}
for(j in images) {
var img = new Image();
img.onload = img.onerror = onComplete;
img.src = images[j];
}
} var onImgLoaded = function(){
$(".loading").addClass("hide");
/*显示正式页面*/
} //使用
preloader(["/img/guide.png","/img/combine-list-bg.png","/img/frontpage-words.png","/img/frontpage-bg.png"], onImgLoaded);
6.弹框居中的方式,推荐用下面代码:
.tf-center{
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
}
webapp,liveapp: 流式布局和rem布局的更多相关文章
- 你不知道的css各类布局(五)之em布局、rem布局
em布局/rem布局 em和rem的区别 在了解弹性布局前我们需要先知道em和rem rem:font size of the root element,rem是相对于根元素<html>来 ...
- 手机端布局,rem布局动态获取根字体大小
手机端布局,rem布局动态获取根字体大小. 以下代码: //rem布局动态获取根字体大小 function remDynamicLayout(){ var $windowWidth = $(windo ...
- 浅谈静态布局、流式布局,rem布局,弹性布局、响应式布局
静态布局: 特点:没有兼容性问题 PC:居中布局,所有样式使用绝对宽度/高度(px),设计一个Layout,在屏幕宽高有调整时,使用横向和竖向的滚动条来查阅被遮掩部分:移动设备:另外建立移动网站,单独 ...
- 响应式自适应布局代码,rem布局
响应式自适应布局代码 首先是先设置根字体大小,PC端一般是16px为根字体,移动端会有不同的,根据情况来设置 js部分 document.querySelector('html').style.fon ...
- 响应式布局(rem布局),使用JS动态设置fontsize
var cw = document.documentElement.clientWidth; if (cw > 1920) { cw = 1920; } document.getElements ...
- 静态布局、自适应布局、流式布局、响应式布局、弹性布局简析、BFC
静态布局:给页面元素设置固定的宽度和高度,单位用px,当窗口缩小,会出现滚动条,拉动滚动条显示被遮挡内容.针对不同分辨率的手机端,分别写不同的样式文件.例如:浏览器窗口是1000px,那么最小的宽度是 ...
- 在rem布局下使用背景图片以及sprite
现在移动端页面用rem布局已经是一大流派了,成熟的框架如淘宝的flexiable.js,以及我的好友@墨尘写的更轻量级的hotcss.用rem作单位使得元素能够自适应后,还有一块需要关注的,那就是背景 ...
- rem布局下使用背景图片和sprite图
现在移动端页面用rem布局已经是一大流派了,成熟的框架如淘宝的flexiable.js,以及更轻量级的hotcss.用rem作单位使得元素能够自适应后,还有一块需要关注的,那就是背景图片.本文就来聊聊 ...
- 流式布局&固定宽度&响应式&rem
我们现在在切页面布局的使用常用的单位是px,这是一个绝对单位,web app的屏幕适配有很多中做法,例如:流式布局.限死宽度,还有就是通过响应式来做,但是这些方案都不是最佳的解决方法. 1.流式布局: ...
随机推荐
- Ninx虚拟主机的配置
1.配置ip ifconfig eth0 192.168.1.7 netmask 255.255.255.0 ifconfig eth0 192.168.1.17 netmak 255.255.255 ...
- Goodchild教授关于GIS的四大预测的不同看法
Goodchild教授的关于GIS的4个未来发展的预测不断有人在微信朋友圈里转发,虽然现在做的工作GIS只是一个基本的工具之一了,但对这4个预测还是有不少不同看法和一点自己的意见. Goodchild ...
- UIBarButtonItem-添加自定义Left或者Right按钮
为UINavigationController添加UINavigationItem,我们可以这样写: 1.添加返回导航按钮backBarButtonItem 1.用系统自带的返回按钮 UIBa ...
- 多层嵌套对象无法使用gson反序列化的问题The JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@3bf13cde failed to de
http://www.oschina.net/question/1256646_123691 http://bbs.csdn.net/topics/360005140 http://stackover ...
- Entity Framework 5.0基础系列
1.Entity Framework简介 http://www.cnblogs.com/aehyok/p/3315991.html 2.Entity Framework DBFirst尝试http:/ ...
- React中props.children和React.Children的区别
在React中,当涉及组件嵌套,在父组件中使用props.children把所有子组件显示出来.如下: function ParentComponent(props){ return ( <di ...
- Dreamweaver8 查找和替换窗口不见了解决办法
激活窗口,按下Atrl+空格,再按下M,方向键移动窗口,就回来了!
- C#转C++的一点分享
前几天看到这样一篇博客<那些年·我们读过的专业书籍>,里面列了很多大家认为很好的书,加上自己在自学C++的工程中也看了不少书,感觉并不是所有的书都值得花时间去看的,毕竟很多人一年下来也看不 ...
- Vmware9.0打开早期版本报错:this virtual machine’s policies are too old to be run by this version of vmware workstation”
VMWare从6.0升级到9.0,打开以前的虚拟机报错如下: “this virtual machine’s policies are too old to be run by this versio ...
- 个人软件过程5 git命令行方式超简洁教程
虽然许多IDE对git的支持不错,但用命令行方式,有助于对git本身的理解.这里对实际工作中,使用git的流程,以及与其相关的命令 小结一下,基本上,掌握这些命令,就能自如的在工作中使用. 1.git ...