移动端适配的问题

1.如何适配?

想要在移动端的不同尺寸设备间做适配,使得页面布局可以等比例缩放。

于是我立刻想到了百分比布局和rem布局。

百分比布局无法适配性定高,只能用px定死,显然这是无法接受的。

rem布局不是响应式布局方案,它的应用仅仅局限于移动端,不同尺寸的移动设备,是一种等比缩放的适配方案。

2.如何用rem做适配?

业内比较流行的做法:

  1.设置viewport为设备宽度(不一定,但常用)

  2、将viewport分成10rem,并计算出1rem在当前浏览器的像素值,赋给html的font-size(分成10rem只是为了方便计算,其他值也可以)

  3.写CSS代码时,width,height,margin,padding等布局属性,就不要再用px了,改用rem

3.viewport是什么?

viewport相当于虚拟的画布

宽度设置为500,那么浏览器横向将被分为500份,CSS的1px就是1/500

也就是说,这个宽度设置的越大,CSS的1px就越小

所以,在CSS中,1px是指viewport中的一个小方格,而viewport的宽度是可以设置的

4.什么是CSS像素?

就是上述viewport里的一个小方格

5.什么是物理像素?

也就是我们常说的n*m分辨率,即,屏幕上有n*m个像素点,它是屏幕能显示的最小粒度。

6.像素密度?

dpi或ppi,屏幕上每实际英寸所占的物理像素点数

7.如何计算转换系数?

CSS像素=转换系数*物理像素

转换系数就是dpr,设备像素比

假设:某台安卓手机,分辨率是1920*1080,屏幕对角线是5英寸。那么在这台手机上一个CSS像素占了多少物理像素?

1.勾股定理算出对角线分辨率√(1920²+1080²)≈2203px

2.算出dpi=对角线分辨率/对角线英寸=2203/5≈440dpi

3.根据下图,440dpi属于XXHDPI,转换系数是3.

因此这一台手机1个CSS像素=3个物理像素。

8.device-width是多大?

device-width很明显是CSS像素,因此

device-width=物理像素(横向)/转换系数

上述安卓手机的device-width=1080/3=360

viewport设置为固定的数值可能会破坏这种转换关系,一般设置为device-width

9.如何在高分屏上设置1px边框?

如上述所言,比如那个安卓手机,1CSS像素代表3物理像素,如果我们把边框设置为1px,那么实际它会显示为3像素宽。

方法一:viewport的initial-scale

  设置为1/dpr,即转换系数的倒数。

  优点:不用改写原来的border代码;可以轻松设置圆角border-radius

  缺点:整个页面缩小了。设置1rem=dpr*document.documentElement.clientWidth/10.

方法二:transform的scale

  在CSS3标准里,可以缩放某个元素。

  

  优点:不需要缩放整个页面

  缺点:为border设置缩放属性并做浏览器兼容,代码量增加。无法实现border-radius圆角。

最后:

如果不设置meta viewport标签,那么移动设备上浏览器默认的宽度值为800px,980px,1024px等这些,总之是大于屏幕宽度的。那么内部元素尺寸也会比预想的要大,于是会出现滚动条!

时间: 2024-08-06 19:30:39

移动端适配的问题的相关文章

移动端适配方案研究

初次接触移动端的时候,以为终于可以不用像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"> 但是,很多小伙伴只是感性的认识:噢,我加了这行代码,然后页面的宽度就会跟我的设备宽度一致.然而,这种理解是很片面的.那么,这句话的本质到底是什么呢? 不急,我们先往下面看,这里先留个悬念. 几个专有名词和单位 这里,我们先来辨析一下在适配的

如何在Vue项目中使用vw实现移动端适配

https://www.w3cplus.com/mobile/vw-layout-in-vue.html  原文网址 如何在Vue项目中使用vw实现移动端适配 作者:大漠 日期:2018-01-25 点击:10362 vw Layout 布局 Vue mobile 编辑推荐:使用 Coding.net 搭建静态博客,自定义域名,全站 HTTPS 加密,自动实时部署, 立即托管您的网站! 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页