移动端适配新思路

于移动端的适配方案,目前用的比较多的是三种方案:

1.  固定高度,宽度自适应 ( 腾讯 、 京东 、 百度 、 天猫 、 亚马逊 的首页都是使用的这种方法。);
2.  固定宽度,viewport缩放 (目前已知 荔枝FM 、 网易新闻 在使用这种方法。有兴趣的同学可以看看是怎么做的);
3.  rem做宽度,viewport缩放 ( 淘宝 使用的方案);

这些方案都有小试,这三个还是有坑的。当然并不是说这些方案不好,而是想寻找更为适用的解决方案。如果有用过或看过淘宝的解决方案的,那应该会注意到淘宝的解决方案中有 设备像素比 = 物理像素 / 设备独立像素 的概念。这个比较高端,不是很好理解这和我们做页面有什么关系。其通过js去设置Html的字号大小,然后用rem来做单位以达到适配(详情请查看淘宝的 Flexible)。整体来说兼容性强,但是要为  IOS 4-5s  IOS 6-6s 写独立的样式,这就比较坑爹了。

本文要说的新解决方案,就是用淘宝的思路(通过设置html的字号,然后用rem来做单位以达到适配),却又不走淘宝的路(用js却设置html的字号大小,为IOS 4-5s  6-6s 写独立的样式)。

为html设置字体大小,但单位却不是用px,而是是vw! px单位是固定的,如果遇到不同的分辨率,那么要达到兼容就得去重新设置值。这样就又得用js。而用vw单位却不用,因为vw这单位并不是固定的。

示例代码:

h1{font-size:8vw;}

如果视口的宽度是200px,那么上述代码中h1元素的字号将为16px,即(8x200)/100; 与百分比(%)相似。

这种情况下,html的字号大小就会根据你的屏幕宽度来改变其实际的大小。还要注意一点就设计稿的px单位与写页面的rem单位比较难换算,虽然淘宝也放出的rem与px的转换插件,但写起来容易维护起来就头疼了!所以在设置html字号大小的时候要考虑px与rem的转换问题。如果1rem=100px,那么我们在计算时就相对的要容易的多了。而已在维护时也能好维护,不用去算来算去。

说了这么多,那到底这解决方案是怎么样的呢?下面就为大家讲解:

html字号用vw单位的解决方案
html字号与设计稿宽度的关系与计算方式
     100            /       设计稿宽度      =    html字体
(页面宽100vw)       (100px=1rem)         (vw单位)

eg:  750px设计稿:
100  /   7.5rem   =  13.333vw

eg: 640px设计稿:
100  /   6.4rem   =15.625vw

在此解决方案中,用rem做为所有的单位。如在设计稿中,字体大小为24px,则使用中为0.24rem。没错,字体大小也用rem做为单位这样能确保做来的页面与设计稿完全一致。

其原理确实很简单,以宽750px的设计稿为例。

我们先设定100px=1rem,那么设计稿 750px=7.5rem; 页面的宽为100vw,那么100vw/7.5rem=13.333vw/rem => 1rem=13.333vw;

页面大小恒定为7.5rem,rem是基于html字号大小,html字号大小基于屏幕宽度。于是屏幕宽度就直接影响到了rem单位。这与百分比的布局有点相同,但百分比无法用于设置高度(并不是所有的手机长宽比都是一样的),而rem单位却能用来设置高度。因为rem是基于html的字号大小而不是基于屏幕的高度。

设置一个正方形的DIV宽为7.5rem,高为7.5rem;不管是多宽的屏幕这个div都会是7.5rem(100vw)的高宽(因为1rem=13.333vw),都正好与屏幕宽度适配。这就是本解决方案的核心。

此解决方案尽适用于移动端,尚未发现bug,如有发现请指正。

时间: 2024-10-23 10:20:42

移动端适配新思路的相关文章

移动端适配方案研究

初次接触移动端的时候,以为终于可以不用像pc那样考虑令人头疼的ie浏览器兼容问题,有强大的css3的帮助,可以随心所欲..可是后来才发现原来移动端各种层次不齐的终端更会让人抓耳挠腮,同样的页面在不同的手机上显示的完全不一样的效果,于是抛开功能,页面适配性也成了一个大的课题. 说到移动端,下面这一行代码大家一定不陌生: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-s

移动端适配知识梳理

了解移动端的知识 viewportviewport是用户网页的可视区域.手机浏览器是把页面放在一个虚拟的"窗口"(viewport)中,通常这个虚拟的"窗口"(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网页的不同部分. 像素css中的像素只是一个抽象的单位,早期的手机屏幕像素密度较低,一个css像素等于一个物理像素.但是随着手机的屏幕像素密度越来越高,比如Retina,

移动端适配之雪碧图(sprite)背景图片定位

为了减少网络请求个数量,提高网站的访问速度,我们一般都会把一些小的图片合并成一张sprite图,然后根据background-position来进行定位.在web端由于是固定的大小与left .top,所以定位起来会比较准确.简单.但是在移动端就不一样了,各种手机的屏幕大小不一样,很难做到使用sprite图然后根据background-position来定位.所以普遍的做法都是使用单张图片,然后使用background-size: cover|100%|contain来控制背景图的大小.其实这样

移动端适配之rem 笔记

/*移动端适配 width|height|font-size = 视觉稿量出来的值 / 100rem;@lbl*/ @media screen and (max-width:359px) and (min-width:320px) { html,body{ font-size: 50px !important; } } @media screen and (max-width:374px) and (min-width:360px) { html,body{ font-size: 56.25px

移动端适配之REM

随着手机等移动设备的普及,移动端带来的流量已经不可忽视,一个网站不只是只有pc的页面就足够了,移动端的适配已经势在必行.但是移动设备种类繁多,屏幕尺寸也千奇百怪,能不能找到一种方式可以适配所有的手机屏幕呢? 答案就是rem. 俗话说 “授人以鱼不如授人以渔”,但今天我就反其道而行,就是授人以鱼的.因为要跟你说什么设备像素比.css像素.ppi等东西,估计你会晕的(主要是我也搞不懂).废话不多说,先上代码. 1 /*移动端适配 width|height|font-size = 视觉稿量出来的值 /

手机平板等移动端适配跳转URL的js代码

<script type="text/javascript"> if(/AppleWebKit.*mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent)

移动端适配js

移动端适配方案非常多,入行两年来始终没有一直使用一个标准,每个项目都按照业务需求来做适配 方案一: 最初听李彦辉老师的课程使用rem 布局了一段时间,但是字体计算比较麻烦,也不太精确 方案二: 偶然在Q群里一群友分享的 动态改变根节点字体的方案布局,头部引用一个js.按照设计图的像素写rem,100px = 1rem //控制字体 var calculate_size = function() { var BASE_FONT_SIZE = 100; var docEl = document.do

移动端适配难点

1.移动端开发通常都会在html中写下以下的meta标签 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> 需要注意的是无论是这样写还是用淘宝flexible.js动态生成meta头,目的只有一个,那就是让布局视口等于苹果手机的分辨率宽高/设备像素比后的宽高.苹果手机的分辨率是指以下所示 而不

前端开发知识之前端移动端适配总结

meta标签到底做了什么事情 做过移动端适配的小伙伴一定有遇到过这行代码: <meta name="viewport" content="width=device-width, initial-scale=1.0"> 但是,很多小伙伴只是感性的认识:噢,我加了这行代码,然后页面的宽度就会跟我的设备宽度一致.然而,这种理解是很片面的.那么,这句话的本质到底是什么呢? 不急,我们先往下面看,这里先留个悬念. 几个专有名词和单位 这里,我们先来辨析一下在适配的