em 参照自己元素的 font-sizejavascript
rem 参照 html 根元素 的 font-sizecss
1. rem 适配 (同一元素,在不一样设备上,效果同样)html
适用状况: 当页面大于 独立像素375 时,或者页面元素不少时java
页面中的元素,统一 单位 rem(字体使用 px 而不使用 rem)面试
根元素字体大小 设置成 整个屏幕的宽(1 rem = 375px),而后元素的 css 像素根据占据屏宽,使用 rem app
// 适配 (手写 面试题) (function(){ /* 1. 建立 style 标签 */ var styleNode = document.createElement("style"); /* 2. 给 style 标签添加内容 (屏幕分份, 大多数公司 16 份) */ styleNode.innerHTML = "html {"+ "font-size:"+width/16+"px !important"+ "}"; /* IPhone 6 的 font-size: 23.4375px */ /* 3. 把 style 标签追加到 head 标签里 */ document.head.appendChild(styleNode); }());
缺点: 需换算元素占屏幕的 rem布局
2. viewport 适配字体
适用状况: 当 ui 设计图 小于 独立像素 375时。 避免换算,直接使用 css 像素单位 pxui
缺点: 图片可能失真; 打破完美布局视口。spa
让 布局视口 等于 设计图纸的 width
(直接 让meta 标签中 content 的 布局视口 width=320px 安卓不支持)
<head> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> </head> <script type="text/javascript"> var clientWidth = document.documentElement.clientWidth; var targetWidth = 320; var scale = clientWidth/targetWidth; var metaNode = document.querySelector("meta[name='viewport']"); metaNode.content = "initial-scale="+scale+ ", user-scalable=no"; </script>
3. 百分比适配
zepto 移动端实战项目。
适用状况: 页面元素少。
4. 媒体选择器(响应式布局)
不一样屏幕,自适应呈现出不一样的布局。
5. 具体像素值
适用状况: 当 ui 设计图 未标明 宽度,以及元素的具体位置时。
关键点: