移动端用rem实现 和 用jq实现的两种方法

随着现在移动端越来越方便,项目中移动端的web页面也越来越多。除了用Bootstrap这种自适应的前端开发工具包,经常用到的就是rem布局和jq实现两种方法。rem结合了css3的media媒体查询,同时我必须要说的是felx布局,用起来真的觉得很方便。方便,方便,方便,重要的事情说三遍。

1、先来讲rem布局,rem是指相对于根元素的字体大小的单位。总结出的媒体查询字体如下。

/* 移动端定义字体的代码 */
body{
    font-family:Helvetica,Microsoft YaHei;"微软雅黑";
    -ms-user-select: none;
    -webkit-user-select: none;
    -webkit-text-size-adjust: none;
    -o-user-select: none;
    }
html { font-size: 50px; }
body { font-size: 24px;}
@media screen and (max-width: 359px) {
    html { font-size: 25px;}
    body { font-size: 12px; }
}
@media screen and (min-width: 360px) {
    html { font-size: 28.13px;}
    body { font-size: 12px; }
}
@media screen and (min-width: 375px) {
    html { font-size: 29.30px;}
    body { font-size: 14px; }
}
@media screen and (min-width: 384px) {
    html { font-size: 30px;}
    body { font-size: 14px; }
}
@media screen and (min-width: 400px) {
    html { font-size: 31.25px;}
    body { font-size: 15px; }
}
@media screen and (min-width: 414px) {
    html { font-size: 32.34px;}
    body { font-size: 16px; }
}
@media screen and (min-width: 424px) {
    html { font-size: 33.13px;}
    body { font-size: 16px; }
}
@media screen and (min-width: 480px) {
    html { font-size: 37.50px;}
    body { font-size: 18px; }
}
@media screen and (min-width: 540px) {
    html { font-size: 42.19px;}
    body { font-size: 20px; }
}
@media screen and (min-width: 640px) {
    html { font-size: 50px;}
    body { font-size: 24px;}
}
  1. 用jq根据视口进行对字体进行计算 从而以计算来的根元素的字体大小用rem转换

var deviceWidth = document.documentElement.clientWidth;
if(deviceWidth > 750) deviceWidth = 750;
document.documentElement.style.fontSize = deviceWidth /7.5 + ‘px’;

3、jq实现。利用meta标签的scale进行缩放。这种方法比较简单,px数值按照设计图上的数值来写。但是,如果碰到插件之类的样式就会很麻烦。

// JavaScript Document
function mobile(){
    var a=$(window).width(),
        b=$(window).height(),
        d=1080,
        c=1920,
        meta=$("#meta");
    if(b*d/a >= c){
        meta.attr("content","width=1080, initial-scale="+a/d+", minimum-scale="+a/d+", maximum-scale="+a/d+", user-scalable=no");
    }else{
        meta.attr("content","height=1920, initial-scale="+b/c+", minimum-scale="+b/c+", maximum-scale="+b/c+", user-scalable=no");
    }

}

window.onload=function(){
    mobile();
}

注意:其中1080和1920的数值分别为设计稿的宽和高。

4、flex布局。对以上两种方法都可以同时结合flex布局来实现。

/* ============================================================
   flex:定义布局为盒模型
   flex-v:盒模型垂直布局
   flex-1:子元素占据剩余的空间
   flex-align-center:子元素垂直居中
   flex-pack-center:子元素水平居中
   flex-pack-justify:子元素两端对齐
   兼容性:ios 4+、android 2.3+、winphone8+
   ============================================================ */
/*使用注意:
flex下的子元素必须为块级元素,非块级元素在android2.3机器下flex失效
flex下的子元素宽度和高度不能超过父元素,否则会导致子元素定位错误,例如水平垂直居中*/
.flex{
    display:-webkit-box;
    display:-webkit-flex;
    display:-ms-flexbox;
    display:flex;
}
.flex-v{
    -webkit-box-orient:vertical;
    -webkit-flex-direction:column;
    -ms-flex-direction:column;
    flex-direction:column;
}
.flex-1{
    -webkit-box-flex:1;
    -webkit-flex:1;
    -ms-flex:1;
    flex:1;
}
.flex-align-center{
    -webkit-box-align:center;
    -webkit-align-items:center;
    -ms-flex-align:center;
    align-items:center;
}
.flex-pack-center{
    -webkit-box-pack:center;
    -webkit-justify-content:center;
    -ms-flex-pack:center;
    justify-content:center;
}
.flex-pack-justify{
    -webkit-box-pack:justify;
    -webkit-justify-content:space-between;
    -ms-flex-pack:justify;
    justify-content:space-between;
}
.flex-1 {
    -webkit-box-flex: 1;
    -webkit-flex: 1;
    -ms-flex: 1;
    flex: 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值