這篇文章主要介紹了詳解H5 活動頁之行動端 REM 佈局適配方法的相關資料,內容挺不錯的,現在分享給大家,也給大家做個參考。
拿到設計稿後,如何進行版面還原?
如果只需要做非精確的響應式設計,那麼使用媒體查詢來實現就 OK 了。如果需要精確還原設計稿,則一般透過縮放來實現。常見方案有基於 viewport 和基於 rem 的縮放方案。
1 viewport 縮放方案
在行動端,可以透過 viewport 縮放頁面大小比率達到目的。
簡單來說,即所有寬高像素與視覺稿輸出相同,然後透過頁面寬度與視覺稿的寬度比率,動態設定 viewport。縮放方案核心程式碼參考:
(function () { var docEl = document.documentElement; var isMobile = window.isMobile /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobi/i.test(navigator.userAgent); function setScale() { var pageScale = 1; if (window.top !== window) { return pageScale; } var width = docEl.clientWidth || 360; var height = docEl.clientHeight || 640; if (width / height >= 360 / 640) { // 高度优先 pageScale = height / 640; } else { pageScale = width / 360; } var content = 'width=' + 360 + ', initial-scale=' + pageScale + ', maximum-scale=' + pageScale + ', user-scalable=no'; document.getElementById('viewport').setAttribute('content', content); window.pageScale = pageScale; } if (isMobile) { setScale(); } else { docEl.className += ' pc'; } })()
這個方案在我們去年的一次 H5 活動頁設計中進行了相關實作。
但如果希望 PC 上也能顯示,由於沒有 viewport 的縮放概念,只能以固定值來設定,這個效果就不太理想。
2 rem 佈局適配方案
rem 佈局適配方案被提及的比較多,在各大互聯網企業產品中都有較為廣泛的應用。
簡單來說其方法為:
-
依照設計稿與裝置寬度的比例,動態計算並設定html 根標籤的font-size 大小;
css 中,設計稿元素的寬、高、相對位置等取值,依同等比例換算為rem 為單位的值;
設計稿中的字體使用px 為單位,透過媒體查詢稍作調整。
下面我們都舉個例子來說明。
2.1 動態設定 html 標籤 font-size 大小
第一個問題是 html 標籤的 font-size 動態計算。這取決於如何約定換算比例,以頁面寬度十等份為例,核心程式碼參考:
#(function(WIN) { var setFontSize = WIN.setFontSize = function (_width) { var docEl = document.documentElement; // 获取当前窗口的宽度 var width = _width || docEl.clientWidth; // docEl.getBoundingClientRect().width; // 大于 1080px 按 1080 if (width > 1080) { width = 1080; } var rem = width / 10; console.log(rem); docEl.style.fontSize = rem + 'px'; // 部分机型上的误差、兼容性处理 var actualSize = win.getComputedStyle && parseFloat(win.getComputedStyle(docEl)["font-size"]); if (actualSize !== rem && actualSize > 0 && Math.abs(actualSize - rem) > 1) { var remScaled = rem * rem / actualSize; docEl.style.fontSize = remScaled + 'px'; } } var timer; //函数节流 function dbcRefresh() { clearTimeout(timer); timer = setTimeout(setFontSize, 100); } //窗口更新动态改变 font-size WIN.addEventListener('resize', dbcRefresh, false); //页面显示时计算一次 WIN.addEventListener('pageshow', function(e) { if (e.persisted) { dbcRefresh() } }, false); setFontSize(); })(window)
另外,對於全螢幕顯示的H5 活動頁,對寬高比例有所要求,此時應做的調整。可以這麼來做:
function adjustWarp(warpId = '#warp') { // if (window.isMobile) return; const $win = $(window); const height = $win.height(); let width = $win.width(); // 考虑导航栏情况 if (width / height < 360 / 600) { return; } width = Math.ceil(height * 360 / 640); $(warpId).css({ height, width, postion: 'relative', top: 0, left: 'auto', margin: '0 auto' }); // 重新计算 rem window.setFontSize(width); }
依照這個縮放方法,幾乎在任何裝置上都可以實現等比縮放的精確佈局。
2.2 元素大小取值方法
第二個問題是元素大小的取值。
以設計稿寬度 1080px 為例,我們將寬度分成 10 等份以便於換算,那麼 1rem = 1080 / 10 = 108px 。其換算方法為:
const px2rem = function(px, rem = 108) { let remVal = parseFloat(px) / rem; if (typeof px === "string" && px.match(/px$/)) { remVal += 'rem'; } return remVal; }
例如,設計稿中有一個圖片大小為 460x210 ,相對頁位置 top: 321px; left: 70; 。依照如上換算方式,得到該元素最終的css 樣式應為:
.img_demo { position: absolute; background-size: cover; background-image: url('demo.png'); top: 2.97222rem; left: 0.64814rem; width: 4.25926rem; height: 1.94444rem; }
2.3 rem 佈局方案的開發方式
透過以上方法,rem 佈局方案就實現了。但是手動計算 rem 的取值顯然不切實際。
透過 less/sass 預處理工具,我們只需要設定 mixins 方法,然後依照設計稿的實際大小來取值。以less 為例,mixins 參考如下:
// px 转 rem .px2rem(@px, @attr: 'width', @rem: 108rem) { @{attr}: (@px / @rem); } .px2remTLWH(@top, @left, @width, @height, @rem: 108rem) { .px2rem(@top, top, @rem); .px2rem(@left, left, @rem); .px2rem(@width, width, @rem); .px2rem(@height, height, @rem); }
#針對前文的範例元素,css 樣式可以這樣來寫:
#.img_demo { position: absolute; background-size: cover; background-image: url('demo.png'); .px2remTLWH(321, 70, 460, 210); }
這裡,寬和高可以直接透過設計稿輸出的圖片元素大小讀取到;top/left 的取值,可以透過在Photoshop 中移動參考線定位元素快速得到。
2.4 字體使用px 為單位
字體使用rem 等比縮放會出現顯示上的問題,只需要針對性使用媒體查詢設定幾種大小即可。
範例參考:
// 字体响应式 @media screen and (max-width: 321px) { body { font-size: 13px; } } @media screen and (min-width: 321px) and (max-width: 400px) { body { font-size: 14px; } } @media screen and (min-width: 400px) { body { font-size: 16px; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
以上是H5 活動頁之行動裝置 REM 佈局適配方法的分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

H5代碼的最佳實踐包括:1.使用正確的DOCTYPE聲明和字符編碼;2.採用語義化標籤;3.減少HTTP請求;4.使用異步加載;5.優化圖像。這些實踐能提升網頁的效率、可維護性和用戶體驗。

Web标准和技术从HTML4、CSS2和简单的JavaScript演变至今,经历了显著的发展。1)HTML5引入了Canvas、WebStorage等API,增强了Web应用的复杂性和互动性。2)CSS3增加了动画和过渡功能,使页面效果更加丰富。3)JavaScript通过Node.js和ES6的现代化语法,如箭头函数和类,提升了开发效率和代码可读性,这些变化推动了Web应用的性能优化和最佳实践的发展。

H5不僅僅是HTML5的簡稱,它代表了一個更廣泛的現代網頁開發技術生態:1.H5包括HTML5、CSS3、JavaScript及相關API和技術;2.它提供更豐富、互動、流暢的用戶體驗,能在多設備上無縫運行;3.使用H5技術棧可以創建響應式網頁和復雜交互功能。

H5與HTML5指的是同一個東西,即HTML5。 HTML5是HTML的第五個版本,帶來了語義化標籤、多媒體支持、畫布與圖形、離線存儲與本地存儲等新功能,提升了網頁的表現力和交互性。

H5referstoHTML5,apivotaltechnologyinwebdevelopment.1)HTML5introducesnewelementsandAPIsforrich,dynamicwebapplications.2)Itsupportsmultimediawithoutplugins,enhancinguserexperienceacrossdevices.3)SemanticelementsimprovecontentstructureandSEO.4)H5'srespo

H5開發需要掌握的工具和框架包括Vue.js、React和Webpack。 1.Vue.js適用於構建用戶界面,支持組件化開發。 2.React通過虛擬DOM優化頁面渲染,適合複雜應用。 3.Webpack用於模塊打包,優化資源加載。

HTML5hassignificantlytransformedwebdevelopmentbyintroducingsemanticelements,enhancingmultimediasupport,andimprovingperformance.1)ItmadewebsitesmoreaccessibleandSEO-friendlywithsemanticelementslike,,and.2)HTML5introducednativeandtags,eliminatingthenee

H5通過語義化元素和ARIA屬性提升網頁的可訪問性和SEO效果。 1.使用、、等元素組織內容結構,提高SEO。 2.ARIA屬性如aria-label增強可訪問性,輔助技術用戶可順利使用網頁。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。