1、像素 :像素是屏幕显示最小的单位。
2、设备像素 :设备像素又称物理像素(physical pixel),设备能控制显示的最小单位,我们可以把这些像素看作成显示器上一个个的点。 iPhone5 的物理像素是 640 X 1136
3、逻辑像素(logical pixel):独立于设备的用于逻辑上衡量像素的单位。css 像素就是逻辑像素,CSS 像素是 Web 编程的概念。
4、设备独立像素(density-independent pixel):简称 dip ,单位 dp ,独立于设备的用于逻辑上衡量像素的单位 。且逻辑像素 ≈ 设备独立像素。
5、设置像素比(device pixel ratiodpr):dpr = 物理像素 / 设备独立像素。可通过 window.devicePixelRatio 获取。所谓的一倍屏、二倍屏(Retina)、三倍屏,指的是设备以多少物理像素来显示一个 CSS 像素即:几 dpr。普通 Android 是一倍屏,在 Retina 屏的 iPhone 上,devicePixelRatio 的值为 2,也就是说 1 个 CSS 像素相当于 2 个物理像素。通常所说的二倍屏(Retina)的 dpr 是 2, 三倍屏(IPhoneX 等)是 3 。
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
现有屏幕适配方案 :
设置 viewport 的 scale 值为 1
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
根据屏幕的分辨率动态设置 html 的文字大小,达到等比缩放的功能:375 屏幕为 20px,以此为基础计算出每一种宽度的字体大小
Rem.less 中设置其他基础尺寸 @bps :320px, 360px, 375px, 400px, 414px, 480px, 768px, 1024px
并计算相应的比例缩放:
.loop(@i: 1) when (@i <= length(@bps)) { //注意less数组是从1开始的
@bp: extract(@bps, @i);
@font: round(@bp/@baseWidth*@baseFont, 1);
@media only screen and (min-width: @bp){
html {
font-size: @font !important;
}
}
.loop((@i + 1));
};
然后在 variables.less 中设置比例和行高:
@2ptr : 1/2/20rem @ptr : 1/20rem
最后所有 CSS 使用 @2ptr 和 @ptr 利用 rem 缩放 dom 、字体
@media screen and (max-width: 300px){}
优点:
缺点:
固定 viewport 的高度等于设备高度,宽度自适应,元素都采用 px 做单位
<meta name="viewport" content="width=device-width,initial-scale=1">
随着屏幕宽度变化,页面也会跟着变化,效果就和PC页面的流体布局差不多,在哪个宽度需要调整的时候使用响应式布局调调就行(比如网易新闻)
根据屏幕宽度设定 rem 值,需要适配的元素都使用 rem 为单位,不需要适配的元素还是使用 px 为单位。根据 rem 将页面放大 dpr 倍, 然后 viewport 设置为 1 / dpr。
如 iPhone6 plus 的 dpr 为 3, 则页面整体放大 3 倍, 1px (css单位)在plus下默认为 3px (物理像素)
然后 viewport 设置为 1/3, 这样页面整体缩回原始大小,从而实现高清。这样整个网页在设备内显示时的页面宽度就会等于设备逻辑像素大小,也就是 device-width 。这个 device-width 的计算公式为:
设备的物理分辨率 / (devicePixelRatio * scale),在 scale 为 1 的情况下,device-width = 设备的物理分辨率 / devicePixelRatio
rem弊端
iOS 与 Android 平台的适配方式背后隐藏的设计哲学是这样的:阅读文字时,可读性较好的文字字号行距等绝对尺寸数值组合与文字所在媒介的绝对尺寸关系不大。(可以这样简单理解:A4 大小的报纸和 A3 大小甚至更大的报纸,舒适的阅读字号绝对尺寸是一样的,因为他们都需要拿在手里阅读,在手机也是上同理)。在看图片视频时,图片、视频的比例应该是固定的,不应该出现拉伸变形的情况。而 rem 用在字号时,使字号在不同屏幕上的绝对尺寸不一致,违背了设计哲学。
浏览器兼容
不支持 IE 8.0 以下 、Safari 4.0 以下、FireFox 3.5以下
vw 可以轻松搞定弹性布局,流体布局。vw 逻辑非常清晰其实 vw 的方案的写法和 flexible 方案的写法一致
~~因为 flexible 其实就是用 hack 的手段模拟了 vw 的实现而已。
具体写法:针对 750px 的设计稿,将相应的 px 值除以 75 就是 vw 的值。
使用 vw 来实现页面的适配,并且通过 PostCSS 的插件 postcss-px-to-viewport 把 px 转换成 vw 。这样的好处是,我们在撸码的时候,不需要进行任何的计算,你只需要根据设计图写 px 单位。postcss-px-to-viewport 插件主要用来把 px 单位转换为 vw 、vh 、vmin 或者 vmax 这样的视窗单位,也是 vw 适配方案的核心插件之一。
为了更好的实现长宽比,特别是针对于 img、video 和 iframe 元素,通过 PostCSS 插件postcss-aspect-ratio-mini 来实现,在实际使用中,只需要把对应的宽和高写进去即可。
在全面屏的 iPhone X 上,不需要而外的代码,Safari 可以非常完美的展示现有的网站。整个网站的内容都会自动地展示在一个“安全区域”内,并不会被四周的圆角或者“小刘海”遮挡住。
关于移动端适配的技术方案主要有以下四种:(1)通过媒体查询的方式即CSS3的meida queries(2)以天猫首页为代表的 flex 弹性布局(3)以淘宝首页为代表的 rem+viewport缩放(4)rem 方式
判断是否是IPhoneX手机;增加fix-iphonex-bottom样式,如果想更改IPhoneX底部34像素的背景颜色怎么办呢?增加iphone-footer-bg样式
网站适配的终端可以用js或媒体查询的方式获取,分配对应的样式。布局上采用相对单位,百分比和flex的弹性方式。对移动端的特殊性进行适配,如1px问题,默认样式等。
em与rem之间的区别:共同点:它们都是像素单位,它们都是相对单位。不同点:em大小是基于父元素的字体大小,rem大小是基于根元素(html)的字体的大小
为了提高代码的兼容性,我们有时需要判断当前系统的平台,然后做一些适配。比如,我们在使用 StatusBar 做导航栏的时候,在 iOS 平台下根视图的位置默认情况下是占据状态栏的位置的,我们通常希望状态栏下面能显示一个导航栏
本文的目标是通过下文介绍的适配方案,使用vue或react开发移动端及H5的时候,不需要再关心移动设备的大小,只需要按照固定设计稿的px值布局,提升开发效率。
首先是名词介绍:像素:Pixel,就是物理像素:也就是设备像素,逻辑像素:(css像素)单位为 px设备像素比:devicePixelRatio,(在高倍屏会出现1px变大的问题)。css单位em:相对于当前对象内文本的字体尺寸
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!