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官網