美文网首页前端学习程序员前端开发那些事
微网站—使用flexible.js实现移动端设备适配

微网站—使用flexible.js实现移动端设备适配

作者: webCoder | 来源:发表于2016-01-14 15:44 被阅读26860次

移动端web开发越来越火,同时移动端适配也是一个很让人头疼的事情,你不能让一个同样大小的元素在不同的设备上都显示一样大小。(iphone6和iphone4下大小肯定是应该不一样的,否则用户体验很差)

下面我将以750px的设计稿为例,分析如何制作一个适配多终端的页面。

首先来看最终的效果图:

  • iphone6下
pic1.png
  • iphone4下
pic2.png
你看不同设备上看起来都是和谐的,不同设备,元素的大小都不同。

你所希望的是不是这样的结果呢?这种效果是如何实现的呢?

别急,下面慢慢讲。
  1. 首先,我们得了解以下几个概念:
  • css像素
  • 物理像素
  • devicePixelRatio
  • layout viewport
  • visual viewport
  • ideal viewport

虽然上面列举了很多,但是不要被吓着,其实都很简单的,网上也有非常多的介绍,只要大致了解就可以了。

2.了解我们使用的库flexible.js

  • 手机淘宝从2014年中开始,全面推行flexible设计。什么叫flexible呢?其实flexible就是responsive的低端形态和基础。
  • 手机淘宝用JS来动态写meta标签,手机淘宝的flexible方案是综合运用rem和px两种单位+js设置scale和html字体。
    我们可以在GitHub上找到这个项目,可以通过网上查阅资料了解更多。

3.了解一个sublime text插件,加快我们的开发速度
这个不是必须,也可以自己手动计算。大家可以在我之前写的一篇文章中,了解该插件如何安装使用,真的非常非常非常简单,重要的话说三遍~

4.下面就真正开始主题啦

  • 我所做页面的设计稿是750px的,有图有真相。
pic3.png

你看我没有欺骗你吧~

  • 以顶部为例,介绍如何制作,首先还是看设计稿
pic4.png

通过ps获得顶部的高度,在750设计稿上96px,所以我们要用96/(750/10),得到对应的rem值。

.msg-header{
    position: relative;
    padding: 0 0.4rem;
    height: 1.28rem; //96/(750/10)
    line-height: 1.28rem;
    font-size: 0.48rem;
    text-align: center;
    border: 0.026667rem solid #eaeaea;
}

这样就实现了最终想要的结果,是不是很简单。
5.最后来看一看我们写的html,css,以及最终生成的html

  • html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="flexible.js"></script>
    <link rel="stylesheet" href="index.css">
</head>
<body>
    <section class="container">
        <div class="msg-header clearfix">
            <a href="javascript:void(0);" class="baseIcon iconBack fl"></a>
            <span class="c-333">消息</span>
            <a href="javascript:void(0);" class="fr clear">清空全部</a>
        </div>
    </section>

    <section class="container msg-content">
        <div class="each-msg">
            <div class="media-left">
                <span class="baseIcon iconMsg"></span>
            </div>
            <div class="media-right msg-right">
                <h3 class="clearfix title">平台公告 <span class="fr date">2015-10-11</span></h3>
                <p class="desc">2015冬款上新2015冬款上新2015冬款上新</p>
            </div>
        </div>
        <div class="each-msg">
            <div class="media-left">
                <span class="baseIcon iconMsg"></span>
            </div>
            <div class="media-right msg-right">
                <h3 class="clearfix title">平台公告 <span class="fr date">2015-10-11</span></h3>
                <p class="desc">2015冬款上新2015冬款上新2015冬款上新</p>
            </div>
        </div>
    </section>
</body>
</html>
  • css
此处省略初始化的样式
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}
.clearfix{*+height:1%;}
.fl{
  float: left;
}
.fr{
  float: right;
}
.baseIcon{
  display: inline-block;
  background: url(bgIcon.png);
  background-size:6.666667rem 6.666667rem;
}
.msg-header{
  position: relative;
  padding: 0 0.4rem;
  height: 1.28rem;
  line-height: 1.28rem;
  font-size: 0.48rem;
  text-align: center;
  border: 0.026667rem solid #eaeaea;
}
.iconBack{
  position: absolute;
  top: 0.373333rem;
  left:0.373333rem;
  width: 0.346667rem;
  height: 0.533333rem;
  background-position: -1.493333rem -1.066667rem;
}
.msg-header .clear{
  position: absolute;
  right: 0.266667rem;
  font-size: 0.4rem;
  color: #666;
  text-decoration: none;
}
.media-left,
.media-right{
  display: table-cell;
  vertical-align: top;
}
.media-right{
  width: 100%;
  border-bottom: 1px solid #eee;
}
.iconMsg{
  width: 1.253333rem;
  height: 1.253333rem;
  background-position: -2.293333rem 0;
}
.media-left{
  padding: 0.266667rem;
}
.msg-right{
  padding: 0.266667rem;
}
.msg-right .title{
  font-size: 0.426667rem;
  color: #333;
}
.msg-right .date{
  font-size: 0.293333rem;
  color: #999;
  font-weight: normal;
}
.msg-right .desc{
  margin-top: 0.133333rem;
  font-size: 0.346667rem;
  color: #888;
}
  • 页面生成的html,注意flexible帮我们的页面添加了几处修改
pic5.png

好的,微网站—使用flexible.js实现移动端设备适配就介绍到这里,大家可以尝试一下,用过方知其好处。

相关文章

  • 微网站—使用flexible.js实现移动端设备适配

    移动端web开发越来越火,同时移动端适配也是一个很让人头疼的事情,你不能让一个同样大小的元素在不同的设备上都显示一...

  • 我的收藏

    结合flexible.js的rem布局方案 如何在Vue项目中使用vw实现移动端适配 React Native 项...

  • 2018-07-02待学习文章

    1.RN移动端适配:移动端适配方案 flexible.js - 云库网 2.React16新特性:reveal.j...

  • 一篇搞定移动端适配

    一篇搞定移动端适配 flexible.js 布局详解 Rem自适应js之精简版flexible.js

  • 使用Flexible & swiper进行移动Web开发

    移动端适配方案 引入flexible.js 在*.html的 标签中引入 flexible.js会做以下几件事: ...

  • 手淘flexible.js精简版

    flexible.js是手机淘宝适配移动端设备的插件,目前还不知道里面的lib有什么作用,另外,里面有些代码好像也...

  • React 配置 rem (移动端适配)

    移动端适配方案介绍 在移动端中,为了设配不同的设备,通常使用rem来做适配。 rem是通过根元素进行适配的,网页中...

  • 移动端如何适配?

    1、使用Flexible实现手淘H5页面的终端适配2、再聊移动端页面的适配3、如何在Vue项目中使用vw实现移动端...

  • 设备指标

    设备指标网站https://material.io/devices/ (一定要看)移动端高清、多屏适配方案http...

  • vue一套代码适应移动端,pc端

    一、 使用场景:有适配pc端改为适配pc端和移动端,使用2套css代码实现App.vue 注意:为2套css分别指...

网友评论

  • 7fb781cfe798:this article is very plain,I can understand it.
  • 陈小窝:如果是640的设计稿怎么算,还有那个字体的设置,如果是px的,那个dpr我不知道怎么设置
  • 496bd0b4896e:seo优化不允许字体rem
    webCoder:@沐玥水 seo爬虫是在服务器端解析dom,不解析css文件 为什么css会影响seo
  • 西巴撸:着急 希望作者看到能及时回复下 万分感谢您了! 我们公司给的设计稿是1280的 我如何换算单位 比如高度是96 我用96(1280/10) 得到一个rem值么
    西巴撸:@webCoder 那我现在应该怎么办 我们经理他们之前做的都是 把根目录设置成屏幕的宽度/640 然后计算元素的时候用的是元素的像素除以2然后再除以10 得到rem值 我按他的那种做法 布局完一测试 全乱套了
    webCoder: @西巴撸 转成rem基本都是12px显示了 设计稿不对
    webCoder: @西巴撸 1280这个设计稿是pc的
  • 76e5605fa77f:用了这个是不是就不用手动去写meta viewport标签了,大神
  • 863ad40cf376:flexible.js这个是自己检测机型,然后自己适配?data-drp是怎么设置的
  • 荏苒_eca2:必须要在头部引用吗
  • fd2fe0705ff6:谢谢,网上写了很多,但是都没讲明白具体的使用,或者压根没讲,谢谢,我特意注册了一个账号感谢。:stuck_out_tongue:
    webCoder: @eric7893835 也谢谢你
  • f996f0295bb5:既然用rem来替换px这个单位了,那需要flexible.js这个有啥用,这个我很好奇??
    webCoder:@真_8837 根字体大小不同手机不一样
  • 7b2c11d5631c:嗯嗯😊
  • 阳光之城alt:我用了怎么感觉 好像不一样 比如设计图750 图片720 左右各15px 这样写了之后 发现手机端可以支持显示 ipad上显示的宽度 就不对了 还只有750的宽度 不是满屏的 (2)还有就是我发现他好像对安卓手机支持的不是很好啊 写好了之后安卓机和苹果显示的有一点不一样
  • c358ae5aefc8:你好,我刚学做H5页面,对于border线1px ,我依据你的算法,安卓手机上显示不出来。请问是哪里有什么问题?具体算法是怎样?
    webCoder:@冰雪zhq琥珀 这时候sass就起作用了 重复代码 mixin
    c358ae5aefc8:@webCoder 只有一条线还可以考虑这样用,如果那个层都有边框这样弄就很麻烦的。你说的这个是唯一的方法吗?
    webCoder: @冰雪zhq琥珀 border0.5不用border,用伪元素定高1px,然后scale0.5
  • 16f10d6e5e11:请问 为什么要750/10呢? 10是什么意思?
    荏苒_eca2:必须要在头部引用吗
    f30f6a39206b:@Mr丶ing 栅格化 分成10个格。
  • 630cadd805ab:超赞,写的很好 :clap:
  • e3f43e419756:css用的less生成的,基础值是@75rem,然后font-zise:36/75rem。就是0.48rem。为什么谷歌浏览器调试的时候我把屏幕尺寸宽度调成750px,dpr设置成1,font-size:显示是42px呢。如果是设置padding 3/75rem 对应就是padding:3px
  • 79e93b441b3f:淘宝的字体单位都是px,是如何做到适配的呢,是类似于这种吗? [data-dpr='1'] div{font-size:14px;} [data-dpr='2'] div{font-size:28px;} [data-dpr='3'] div{font-size:42px;} 。 如果是这样会不会太麻烦? 作者的字体单位rem 计算方法是750设计稿的字体大小除以75吗?
    3ad5b82d49a6:这个框架 只适配了IOS 机型的字体,安卓的没有适配,要自己去解决。
    webCoder:@栗子313 嗯 我那里面没有写那么复杂 就用的rem
  • 70b3d1abb364:96是从哪来的?
  • 5aca3bf7cb22:border和font-size用rem真的好吗?
    webCoder:@在路上前行torres 字体用data-dpr来控制
  • 1f1495c6ae14: height: 1.28rem; //96/(750/10)
    font-size: 0.48rem;那字体如何计算呢???
    cench:@webCoder font-size * dpr
    1f1495c6ae14:@webCoder 怎么计算呢,举个例好吗
    webCoder:@josonli 通过 data-dpr 设置
  • 好好得吃一朵西蓝花:你也是南京林业大学的?
    webCoder:@好好得吃一朵西蓝花 嗯 11级
  • cce58c06d130:很多安卓的浏览器页面都被放大了,找不到解决方法,求楼主解答
    cce58c06d130:@倩依不二 找到问题了,加了<meta content="maximum-dpr=2" name="flexible" />,把页面强制设置为data-dpr="2"了。 :sweat:
  • 周萌萌:用flexible.js 适配移动端设备时,发现主流的Android 机器的dpr都等于1
    周萌萌:iphone4到iPhone6的dpr都是2iPhone6plus是3,可是目前的主流安装机的dpr都是1.这不科学啊,难道安卓目前还没有视网膜屏幕嘛
    webCoder:@webCoder 说的更直白些就是一个点内有多少个像素,1个点里像素越多越清晰
    webCoder:@周萌萌 dpr是设备像素比,iphone的更高一些
  • 碧霄问鼎: :blush:
    webCoder:@碧霄问鼎 🌛
  • d918e5e69a00:流弊,
    webCoder:@MacDean 电一第一
  • 周萌萌:分析的很到位,看来 你是从事前端开发工作的。
    jarvan4dev:@webCoder 加着加着就出事了,小心被你妹子知道
    周萌萌:可以加一下你qq吗,向你学习交流,我也是从事前段开发的。
    webCoder:@周萌萌 嗯 是的~
  • jarvan4dev:写的很好
    40829e4ae807:...deng与没说。。
    webCoder:@Eason4dev 谢谢鼓励~
  • 我在睡觉:有个疑问,这种等比例缩放页面元素的设计好吗?
    webCoder:@我在睡觉被占用 您描述的再详细些,没理解

本文标题:微网站—使用flexible.js实现移动端设备适配

本文链接:https://www.haomeiwen.com/subject/ckfhkttx.html