1.Iconfont 字体图标(阿里巴巴矢量字体图标库)原理以及实现
2.Media媒体响应式布局
3.Flex弹性盒子布局
4.移动端适配原理 rem(px、em、rem、%、vm): 详解
主讲详情
阿里巴巴矢量图形库:https://www.iconfont.cn/php
浏览器根据font-family解析渲染为不一样图形的过程:
读取文字内容转换成对应的 unicode码();
根据HTML里设置的 font-family (若是没设置则使用浏览器默认设置)去查找电脑里(若是有自定义字体@font-face ,则加载对应字体文件)对应字体的字体文件;
找到文件后根据 unicode 码去查找绘制外形,找到后绘制到页面上;css
实现方法:详情html
1.定义:@media 能够针对不一样的屏幕尺寸设置不一样的样式 测试
2.语法:
1)css中使用html5
@media mediatype and|not|only (media feature) { CSS-Code; }
2)针对不一样的媒体使用不一样 stylesheetsandroid
<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">
3.媒体类型mediatypecss3
4.媒体功能 media feature 测试git
5.用例
http://2011.dconstruct.orggithub
flex图片segmentfault
display:flex和display: inline-flex的区别: 详解浏览器
注意:
1) flex布局讲解
2) 多个子项目之间等间距排列
3) flex多行时,最后一行元素左对齐
1) px:屏幕设备物理上能显示出的最小的一点
浏览器最小能够识别12px大小的字体 解决方案
2) em:相对单位。相对于当前对象内文本的字体尺寸。
特色:一、em值并不固定;二、em会继承父级元素的字体大小。
由于任意浏览器的默认字体高都是16px。全部未经调整的浏览器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。 为了简化font-size的换算,须要在css中的body选择器中声明font-size=62.5%, 这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em
3) rem :相对单位。相对于HTML根元素。
4) % :相对于父元素
5) vm 相对于HTML根元素
6) 其余
方案1:Flexible
针对不一样手机屏幕尺寸和dpr动态的改变根节点html的font-size大小(基准值)。讲解 :
;(function(win, lib) { var doc = win.document; var docEl = doc.documentElement; var metaEl = doc.querySelector('meta[name="viewport"]'); var flexibleEl = doc.querySelector('meta[name="flexible"]'); var dpr = 0; var scale = 0; var tid; var flexible = lib.flexible || (lib.flexible = {}); if (metaEl) { console.warn('将根据已有的meta标签来设置缩放比例'); var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/); if (match) { scale = parseFloat(match[1]); dpr = parseInt(1 / scale); } } else if (flexibleEl) { var content = flexibleEl.getAttribute('content'); if (content) { var initialDpr = content.match(/initial\-dpr=([\d\.]+)/); var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/); if (initialDpr) { dpr = parseFloat(initialDpr[1]); scale = parseFloat((1 / dpr).toFixed(2)); } if (maximumDpr) { dpr = parseFloat(maximumDpr[1]); scale = parseFloat((1 / dpr).toFixed(2)); } } } if (!dpr && !scale) { var isAndroid = win.navigator.appVersion.match(/android/gi); var isIPhone = win.navigator.appVersion.match(/iphone/gi); var devicePixelRatio = win.devicePixelRatio; if (isIPhone) { // iOS下,对于2和3的屏,用2倍的方案,其他的用1倍方案 if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { dpr = 3; } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){ dpr = 2; } else { dpr = 1; } } else { // 其余设备下,仍旧使用1倍的方案 dpr = 1; } scale = 1 / dpr; } docEl.setAttribute('data-dpr', dpr); if (!metaEl) { metaEl = doc.createElement('meta'); metaEl.setAttribute('name', 'viewport'); metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no'); if (docEl.firstElementChild) { docEl.firstElementChild.appendChild(metaEl); } else { var wrap = doc.createElement('div'); wrap.appendChild(metaEl); doc.write(wrap.innerHTML); } } function refreshRem(){ var width = docEl.getBoundingClientRect().width; if (width / dpr > 540) { width = 540 * dpr; } var rem = width / 10; docEl.style.fontSize = rem + 'px'; flexible.rem = win.rem = rem; } win.addEventListener('resize', function() { clearTimeout(tid); tid = setTimeout(refreshRem, 300); }, false); // 倒退 缓存相关 win.addEventListener('pageshow', function(e) { if (e.persisted) { clearTimeout(tid); tid = setTimeout(refreshRem, 300); } }, false); if (doc.readyState === 'complete') { doc.body.style.fontSize = 12 * dpr + 'px'; } else { doc.addEventListener('DOMContentLoaded', function(e) { doc.body.style.fontSize = 12 * dpr + 'px'; }, false); } refreshRem(); flexible.dpr = win.dpr = dpr; flexible.refreshRem = refreshRem; flexible.rem2px = function(d) { var val = parseFloat(d) * this.rem; if (typeof d === 'string' && d.match(/rem$/)) { val += 'px'; } return val; } flexible.px2rem = function(d) { var val = parseFloat(d) / this.rem; if (typeof d === 'string' && d.match(/px$/)) { val += 'rem'; } return val; } })(window, window['lib'] || (window['lib'] = {}));
方案2:使用vw适配
https://www.w3cplus.com/css/v...
1.https://github.com/amfe/lib-f...
2.使用Flexible实现手淘H5页面的终端适配
3.postcss官网