所谓自适应布局,从页面上展示出来,就是字体、盒子大小随着视口 viewport的大小变化而变化。
依赖于 单位 rem 的运用。
首先引入一段JS代码,这段代码负责调解html中 font-size 字体的大小变化,让字体随窗口的增大而增大
(function flexible (window, document) { let docEl = document.documentElement let 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 () { let 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) { let fakeBody = document.createElement('body') let 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))
接着设置网页宽度等于屏幕宽度(width=device-width),原始缩放比例为1.0
<meta name="viewport" content="width=device-width, initial-scale=1" />
接下布局字体、盒子单位使用rem就OK了。
这里稍微提一下,响应式布局与自适应布局的一些差异。
1、自适应布局是通过检测视口分辨率来判断当前访问的设备是pc端还是平板或者是手机,从而请求服务层返回不同的页面;
响应式布局是通过检测视口分辨率针对不同客户端在客户端做代码处理,来展现不同的布局和内容
2、自适应布局需要开发多套界面,而响应式布局只需要开发一套界面就可以了
3、自适应对页面做的屏幕适配是在一定范围:比如pc端一般要大于1024像素,手机端要小于768像素,而响应式布局是一套页面全部适应。
4、自适应布局如果屏幕太小会发生内容过于拥挤,响应式布局可以自动识别屏幕宽度并作出相应的调整页面设计
响应式布局是自适应的升华,融合了(流式布局+自适应)的特点