**rem是什么?
这个方法就是在监听屏幕的宽度,然后根据不同的屏幕做出反应
rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过rem计算的规则是依赖根元素,em是依赖父元素计算。
**rem布局原理
拿到设计稿,按照设计稿的宽去设置一个合适的rem ,配合js查询屏幕大小来改变html的font-size,从而达到适配各种屏幕的效果
**rem布局优缺点
优点,宽度自适应,可以完美适配不同宽度的屏幕
缺点,高度不固定,如果遇到高度要求很严格的就实现不了
**rem 常用换算模式式
1em = 16px;
html{
font-size:16px;
}px
html{
font-size:62.5% // 10/16*100% 也就是设置 是10px
}
其实也就是我们设置页面根元素字体font-size 是多大 1em 就是多大 以上是两个常用标准 比
根据媒体查询,不同屏幕之间用不同的标准
@media
only
screen
and
(min-device-
width
:
320px
)and
(-webkit-min-device-pixel-ratio:
2
)
{
//针对iPhone
4
,
5
c,
5
s,
所有iPhone
6
的放大模式,个别iPhone
6
的标准模式
html{
font-size
:
10px
;
}}
@media
only
screen
and
(min-device-
width
:
375px
)and
(-webkit-min-device-pixel-ratio:
2
)
{
//针对大多数iPhone
6
的标准模式
html{
font-size
:
12px
;}
}
@media
only
screen
and
(min-device-
width
:
375px
)and
(-webkit-min-device-pixel-ratio:
3
)
{
//针对所有iPhone
6
+的放大模式
html{
font-size
:
16px
;}
}
@media
only
screen
and
(min-device-
width
:
412px
)
and (-webkit-min-device-pixel-ratio:
3
)
{
//针对所有iPhone
6
+的标准模式,
414px
写为
412px
是由于三星Nexus
6
为
412px
,可一并处理
html{<
font-size
:
20px
;}
}
**基于JS动态计算font-size
(
function
(doc,
win) {
var
docEl
= doc.documentElement,
resizeEvt
=
'orientationchange'
in
window
?
'orientationchange'
:
'resize'
,
recalc
=
function
()
{
var
clientWidth
= docEl.clientWidth;<br>window.innerWidth>max ? window.innerWidth : max;
if
(!clientWidth)
return
;
docEl.style.fontSize
= 20 * (clientWidth / 320) +
'px'
;
};
if
(!doc.addEventListener)
return
;
win.addEventListener(resizeEvt,
recalc,
false
);
doc.addEventListener(
'DOMContentLoaded'
,
recalc,
false
);
})(document,
window);
orientationchange :检测屏幕发生反转时,就是是横屏还是竖屏时
clientWidth
:就是设备的宽度
docEl.style.fontSize
= 20 * (clientWidth / 320) +
'px'
;
:核心就是这句设置根元素的字体大小是clientWidth/320*20