Appearance
rem布局
- rem 是一个相对单位,相对于根元素html的font-size的大小。
flexible方案(过渡)
简介
flexible.js是手淘开发出的一个用来适配移动端的js框架。手淘框架的核心原理就是根据制不同的width给网页中html根节点设置不同的font-size,然后所有的px都用rem来代替,这样就实现了不同大小的屏幕都适应相同的样式了。其实它就是一个终端设备适配的解决方案,也就是说它可以让你在不同的终端设备中实现页面适配。
原理
js
(function flexible (window, document) {
var docEl = document.documentElement
var dpr = window.devicePixelRatio || 1
// adjust body font size
function setBodyFontSize () {
if (document.body) {
document.body.style.fontSize = (12 * dpr) + 'px'
}
else {
document.addEventListener('DOMContentLoaded', setBodyFontSize)
}
}
setBodyFontSize();
// set 1rem = viewWidth / 10
function setRemUnit () {
var rem = docEl.clientWidth / 10
docEl.style.fontSize = rem + 'px'
}
setRemUnit()
// reset rem unit on page resize
window.addEventListener('resize', setRemUnit)
window.addEventListener('pageshow', function (e) {
if (e.persisted) {
setRemUnit()
}
})
// detect 0.5px supports
if (dpr >= 2) {
var fakeBody = document.createElement('body')
var testElement = document.createElement('div')
testElement.style.border = '.5px solid transparent'
fakeBody.appendChild(testElement)
docEl.appendChild(fakeBody)
if (testElement.offsetHeight === 1) {
docEl.classList.add('hairlines')
}
docEl.removeChild(fakeBody)
}
}(window, document))
优点
- 简单易用,适用于大部分机型
缺点
- 在某些手机上会出现1px的问题,比如小米手机。
@media方案(弃用)
- 基于不同的屏幕宽度设置不同的font-size
- font-size为视口宽度的1/10。
- 缺点:屏幕过多不太好设置。
css
@media screen and (max-width: 320px) {
html {
font-size: 32px;
}
}
@media screen and (width: 375px) {
html {
font-size: 37.5px;
}
}
@media screen and (width: 414px) {
html {
font-size: 41.4px;
}
}