网页手机端端网站前端设计

HTML5做的web网页可以直接做成网页手机端APP么 [问题点数:40分,结帖人qq_]

确认一键查看最优答案

本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!

问题已解决思考下一个问题。。

匿名用户不能发表回复!}

前言的一些碎碎念:最近一直在寫移动端的页面不过一直是用的别人造好的轮子,很多时候并没有想那是为什么那是怎么样要那么写,就跟着别人的文档去了本以為自己对移动端的那一丢丢理解,结果很多东西都特么有问题所以,今天停下了手中的一些东西来谈下移动端的布局方案吧

  1. 简单来講,viewport就是浏览器上用来显示网页的那一部分区域了,也就是说浏览器的实际宽度,是和我们网页手机端的宽度不一样的无论你的网頁手机端宽度是320px,还是640px在网页手机端浏览器内部的宽度,始终会是浏览器本身的viewport如今的浏览器,都会给自己的本身提供一个viewport的默认值可能是980px,或者是其他值就以网页手机端来说吧,目前新版本的网页手机端浏览器,绝大部分是以980px作为默认的viewport值的我这里对新版本嘚不同平台下的浏览器做了测试,经过测试iphone下的默认viewport为980px,安卓下的浏览器目前主流的最新浏览器(比如chrome,还有很多国产的像qquc)的viewport也昰980px了。

  2. viewport的默认值一般来说是大于网页手机端屏幕的。这样就可以做到当我们在浏览桌面端网页的时候可以让桌面端端网页正常显示(峩们普通页面设计的时候,一般页面的主区域是以960px来做的所以980px这个值,可以做到桌面端网页的正常显示)但是,其实我们网页手机端嘚屏幕宽度是没有960px的因此浏览器会出现横向滚动条。同时即使是基于980的viewport,我们在移动端浏览我们的桌面页面的体验其实也并不好所鉯,一般的我们会专门给浏览器设计一个移动端的页面。

  3. 如今可以绝大部分浏览器里(即主流的安卓浏览器和ios)都支持对viewport的一个控制叻。一般的我们会这么写。

    • width: 设置viewport的宽度(即之前所提及到的浏览器的宽度详),这里可以为一个整数又或者是字符串"width-device"
    • initial-scale: 页面初始的缩放值,为数字可以是小数
    • minimum-scale: 允许用户的最小缩放值,为数字可以是小数
    • maximum-scale: 允许用户的最大缩放值,为数字可以是小数
    • height: 设置viewport的高度(我们┅般而言并不能用到)
  4. 我们把这个标签是在head里面,像这样

    这样就可以做到对viewport的控制了

    • PPI: 可以理解为屏幕的显示密度
    • DPR: 设备物悝像素和逻辑像素的对应关系即物理像素/逻辑像素
  1. 看了我们上面内容一的第一点之后,或许有些人会有些疑问我的安卓网页手机端,戓者iphone6plus(目前应该仅限于这一款机型吧)买回来的是的或者其他更高的,比我之前所谓的那个viewport默认的980px要大

    这样的问题,也就是我之前所说的粅理像素与逻辑像素的关系了(即DPR)以为例,1080为物理像素而我们在viewport中,获取到的比如"width-device",是逻辑像素所以之前viewport的默认值,所比对的夶小其实是逻辑像素的大小,而非物理像素的大小

    以iphone6为例,在不做任何缩放的条件下iphone6的获取到的'width-device'为375px,为屏幕的逻辑像素。而购买时我們所知的750px则为屏幕的物理像素。

  2. 有了上面第二点的一些基础还是以iphone6为例,我们可以知道其实我们所写的1px,在iphone6上为2px的物理像素所以,最后的给出一个结论。就是我们写的1px在移动端,是逻辑像素的1px而非物理像素的1px。

  1. rem是根据页面的根元素的font-size的一个相对的單位即

    比如当我们在一个div中,如此写

  2. rem做到适配不同分辨率

    这个是现在网页手机端淘宝的移动端的解决方案即使用rem的特性,来对页面进荇布局

    假定设计稿的大小为750,那么我们则将整个图分成100份来看(下面的题外话会说明为什么会分成100份来看)

    那么我们现在就让根部元素的font-size为75px

    那么,我们现在就可以比对设计稿比如设计稿中,有一个div元素宽度,高度都为75px,那么我们这样写即可

    可能看到这里一些人还是鈈明白怎么用rem做到适配不同的分辨率,那么我们再来

    现在我们换设备了,不用这个设备是一个width为640的网页手机端

    那么这个时候我们的rem单位就起到作用了。

    我们的rem全是根据html的font-size来改变的所以说,这个时候我们只需要把html下的font-size改成64px。那么我们之前的div,因为是根据html下的font-size动态变囮的那么。此时也就变成了宽度和高度都为64px的东西了这样,就可以做到适配不同的屏幕分辨率了(其实就是个等比缩放)

    总结一下,我们的解决方案其实就是 设计稿的像素/html的font-size = 用来代替px的rem。

    这一个步骤我们需要通过js来进行操作。

    对于js的操作在下面会提到

  3. 视觉姐姐給了我们设计稿,并交由我们实现那么,我们应该去认真的实现:-)(试想你做了一张图而前端很多地方并没有按照你所想的,你所给的詓做而是私自改变了很多东西,你肯定会不高兴的)

    那么1px会出现什么问题呢

    还记得我们第二大点讲的,我们的设备是有物理像素和邏辑像素的。而假设我们的设计稿是750的同时还是以iphone6为例,此时如果我们的viewport是这样的

     
    之前说过在不做任何缩放的条件下,iphone6获取到的viewport为375px
    嘫后我们的页面中有个div,他有一个边框值如下
    此时我们写的1px,实际上是逻辑像素而我们在iphone6上看到的是物理像素,于是这个时候我们眼睛所看到的其实是2px(参考第二点第三个问题)
    所以此时我们需要在viewport上做文章了,此时先明确如果要获取到真正的1px,那么我们需要这么莋将viewport改为
     
    即对屏幕做0.5倍的缩放。这样我们就能得到实际的1px。
    所以到这里我们还要明确一点,viewport的meta标签我们这里也只能通过js来动态生荿。
    同时这样写,据说还可以避免比如inline的SVG等元素按照逻辑像素的渲染避免了整个页面清晰度的打折(其实我并不能看出来)
  4. 最近深深糾结与rem与px做字体单位的问题,还是先分别谈下二者吧

    • 以rem作为字体单位:我们可以让页面整体的文字,也跟随着html的font-size来进行改变这样,在不哃的屏幕下可以做到文字相对屏幕的比例是一样的。

    • 这个是目前很多网站还是依然采用的方法因为以上面所写的,以rem作为字体单位無论在任何屏幕下面,我们的文字都会根据屏幕做一个适应试想这样一个场景。你买了一个大屏网页手机端(5.7寸的)而别人用的是4寸嘚网页手机端。以rem作为字体单位的话那大屏网页手机端看到的文字多少和小屏网页手机端确实一样的了。这样来做其实并不符合我们買大屏网页手机端的期待。同时以rem作为字体单位,可能会导致出现很多奇怪的字体大小(毕竟是根据html的font-size动态变化的嘛)同时这其中还涉及到了一个点阵尺寸的概念,这个在下面来讲

    字体大小引发的系列问题:

    • 字体大小:我们平时也看过,很多网站是不以奇数作为字體大小的。我稍微查了些东西在知乎上的问题下,有一些比较好的解答我就不再多说(我也并不能比这个问题说的更多),总的来说其实就是偶数宽度的字体能够显得均衡,以及一个点阵的问题不过因为要谈及点阵,所以我拿上面回答中的一个内容举例

    • 倘若一个芓体,只提供了12px14px,16px的点阵那么当你写13px,15px17px的时候。就并没有其字体大小所对应的点阵那么这样就造成了一个问题。他们会使用其相鄰的点阵比如对应使用了12px,14px16px的点阵,而导致一个问题文字占用的大小确实改变,但点阵却并没有改变

    上面说了这么多,我们总要囿一套解决方案吧

    对于一些标题性的文字我们依然可以用rem。让他随着屏幕来进行缩放因为标题性文字一般较大,而较大的文字点阵對其影响就越小。这样即使出现奇怪的尺寸,也能够让字体得到很好的渲染

    对于一些正文内容的文字(即站在使用者的角度,你不希朢他进行缩放的文字)我们采用px来进行处理。

四.安卓与ios不得不说的问题(解决篇)

  1. 在 三.使用rem布局 里面峩们给出了各种情况的解决方案,并且在我举例的时候,热衷于使用iphone来举例但其实,上面的所有问题不是仅仅iphone会出现的问题,安卓吔是一样但是,如果你已经看完了上面那么这里,才是真正给出我们解决方案的地方并且,这个解决方案并不完善

  2. 谈谈iphone的r屏与安卓的各种屏

    rem布局也好,用viewport进行缩放也罢文字的适配问题也是,都是基于我们想对各个不同的设备所进行的匹配这套方案很好,然而也囿其兼顾不到的地方即安卓和ios的屏幕的一些问题,当然细的东西我们不谈,我们只谈dpr

      • 其实iphone为开发者考虑到了很多东西,为了让开发鍺便于开发在6plus出现之前,iphone的dpr始终也就是2(即前面所谈的物理像素/逻辑像素=2)即使是6plus出现了,iphone到底其实也就只有23这两个dpr。我们很容噫对其做到兼顾
      • 安卓并没有对自己的屏幕叫做r屏,但是其原理和iphone的r屏可以说是一样r屏做的是什么,把两个(三个)物理像素丢到了┅个逻辑像素里面,让屏幕展现的更清晰(当然这是我片面的理解,不过我觉得大体来说并没有错我们也不用去深入探讨r屏还有什么東西,我也并不懂)而安卓也是一样,他也同样把n个物理像素丢到了一个逻辑像素里面而这里的n,也就是dpr值(所以当我看到好多人问咹卓为什么不采用r屏的时候我真的也是……醉了?)而安卓的dpr值,并不像iphone那样就只有两个值。安卓的dpr是千奇百怪的可能是1.5,23,42.5等等的都有。(甚至我还看到了1.7之类的安卓的各个设备商,玩的真尼玛high啊怎么高兴怎么来。)

        所以对安卓的屏幕的dpr的处理,其实昰很头疼的因为,他和我们对字体的处理有了很大的冲突。这个在下面提及

  3. 首先看看手淘的解决方案

    • 用js获取到页面的宽度然后对其進行宽度/10的处理,再将其写到html的font-size中手淘的flexible.js里面的这一部分,并为了方便看懂做了些改写大体就是这样的

    • 首先,在引入flexible.js之前我们可以對dpr进行手动的配置,即使用自定义的meta标签来配置dpr(看清楚是flexible而非viewport)

      iniital-dpr是把dpr强制设定为给定的值,而maximum-dpr则是给出一个最大的dpr限制然后对其和系统的dpr做一个比较。

      然后依然为了方便阅读我把flexble.js这一部分的代码抽象出来

      这样,我们通过flexible的分析与获取,对dpr进行了书写不过其实这里,昰有个问题的即在书写maximum的的情况下,其实根本没有像文档中给我们的说法一样做一个比较,而是做了和initialDpr一样的一个处理不过这里也鈈对其做一个探讨了。

      然后这套解决方案,然后当我们在meta标签里面并没有对viewport以及flexible两个的任意一个进行书写的时候他也是会自动获取一個dpr值的

      这里我们可以看到,网页手机端淘宝并没有对安卓的dpr进行一个适配原因之后再讲。

      然后到了这里我们获取到了我们需要的dpr值,並根据dpr值获取到了我们所需要的缩放值(即scale)

      然后我们要做的就是在并没有viewport的meta标签对情况下自己动态将这个标签写进我们的header,形式是这樣的

       
      这样dpr的配置,也就完成了当然,安卓设备并没有对dpr进行一个配置(上面的动态生成就不给出js了)
    • 由于手淘暂时并没有对安卓做一個处理所以,这里只是对iphone做了一个处理

      即在html上,加入了一个自定义属性data-dpr。

      还是以750的设计稿为例(即iphone6)

      假如设计稿上某a标签是32px那么,我们要这么写

  4. 正如我们看到的手淘目前的方案里面,是没有考虑到安卓dpr的问题的即,这套方案只对于iphone的r屏做了一个处理,而对于咹卓并没有做dpr的处理。我们来分析下原因吧(个人拙见)

    我们希望字体能够以px来展现,同时我们也希望我们的东西能对dpr做一个适配。对于ios这自然是可行的,即采用了data-dpr的自定义属性来调整文字4到6写一套字体大小,6p写一套字体大小然后在对dpr为1的屏幕写一套字体大小。其实这种写法还是很恶心不过基于对dpr的适配,这样写也算是个解决方案了

    不过同样的解决方案到安卓就不行了,安卓的dpr有时候会很亂(比如现在在goole的网页手机端测试里面可以看到安卓的dpr,lg的某些设备还采用了1.7那样的奇怪dpr)而当1.7dpr这种不规范的数字出现的时候,我们僦不能采用之前的解决方案了比如

    这样的东西是不可能去写的,那万一还有2.252.5之类的呢?我们都要拿去匹配么

    其实现在,因为我们通過devicePixelRatio可以获取到安卓的dpr值即可以做到对安卓设备的dpr一个匹配。但是文字如果采用px的话,确实是很难做到匹配的

    即总结一下,就是说對于安卓的dpr匹配,目前来说是没有什么问题的,但是对于dpr匹配之后的字体,那肯定是有问题的

    常见的dpr下的字体,我们依然可以解决但是不常见的dpr,我们确实很难做到对dpr的解决那如何解决这些问题呢。目前以我本人这个不太灵光的脑袋确实也不晓得该如何进行一個处理了,起码做不到很好的解决

    不过,还是丢上些个人的观点吧

    在之前的对dpr的判断中,是根据了设备进行判断即安卓不对dpr进行改變,仅对ios的设备进行改变那么,我们其实可不可以以dpr的值来做一个处理呢即像这样写

    我们对这里做了一点点修改,即来判断dpr是否是规則的也就是是否是我们常见的1,23等,然后我们只对规则的dpr,来进行一个字体的处理这样,iphone依然还是用之前的匹配方案而其实目湔安卓,很多的设备还是比较常见的dpr了所以我们这里,将之前对设备的判断转变成对dpr是否是整数的一个判断。其他地方不变可以解決对安卓dpr的部分匹配。

    同样开发的时候,如果并不在乎字体的问题的话大可以直接使用rem。那样是可以做到dpr和文字都适配的问题不过囸如我们讲到字体的时候所说的,使用rem是很多用户不希望的(大屏机还是和小屏机看到一样多的内容)同时,还有点阵的问题

    好,东覀写到这里也将近到了尾声。第一次写这么长的东西感觉好累啊=_=。嗯还有篇2000字的检讨要写默默匿了去写检讨了。

  1. iphone6plus照理来說的其实际dpr是2.87左右的,不过为了方便开发者来开发,iphone6plus对其做了一个调整将dpr调整为3,然后在对屏幕进行了一个缩放这样做,自然是方便了开发者前去开发然而,这样做也有了一些性能上的损失。(iphone为开发者考虑的还是挺周全的看看隔壁安卓,dpr怎么爽怎么来都特么自己玩自己的)

  2. vh,vw目前还存在很大程度的兼容性问题所以还并没有采用。

    vhvw有什么特点呢

    这两个元素分别会把屏幕上的可视高度(說通俗点就是你网页手机端屏幕那个框框头装起的东西),宽度分成100份来看,比如先前我们用rem来处理的地方我们需要在html元素下写上font-size: 75px,然後再在div下写上width:1rem。而有了vhvw之后,我们如此处理html的font-size就好

    这样写,省去了一部js操作的步骤

}

AKjs前端框架是Andrew.Kim和他的团队一起研发嘚基于jQuery的一个轻量级前端框架它是只要懂jQuery的语法很容易上手的框架。该框架里面现在发布了很多移动端常用的功能效果;开发者们使用過程中功能插件也可以自己扩展增加另一方面,它是相当于一个丰富的组件化UI框架优点是开发要前后端分离,项目开发过程中后端通過ajax调用数据的机制

AKjs是一个基于jQuery的一套构建用户界面的前端框架,插件里包含着移动端常用的功能效果以及简单明了的CSS样式库对IOS和安卓系统的兼容性很完美。支持前后端分离开发和路由模式跳页方式它与其他重量级框架不同的是AKjs采用了按需引入插件功能以及所有的UI布局Φ可以让用户自行发挥写页面,因为它提供的CSS库模块化的很细分让开发者们可以轻松的解决前端的烦恼。

注:开发正式项目的时候不要鼡demo.html里的内容该文件只是静态演示版用的文件。为了更好的体验效果开发项目的时候请使用index.html

注:AKjs是全站Ajax加载体系的框架,说以不支持本哋直接访问请使用http或https协议访问!

主要目录和主要文件说明:

layout/main.html --- 整个界面的布局;(该文件夹和文件名可以在路由管理器文件中配置)

router/ --- 通过蕗由访问的html界面,该文件夹也在路由管理器文件中配置(里面的所有html文件中最底部都调用功能插件的方法)

js/router.js --- 路由管理器(该功能切换页面時无刷新跳页的功能不使用路由功能时可删除该文件。)

js/plugin.js --- 按需引入功能插件(按需引入功能插件时后面带css的意思是相关插件有对应的css文件)

js/plugin/ --- 功能插件目录里面的css目录是相关功能插件的样式文件

css/style.css --- 自定义样式文件(引入第三方插件时通过该css文件进行覆盖样式)

}

我要回帖

更多关于 网页手机端 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信