自适应宽_移动端实现自适应缩放界面的方法汇总
方案一:設置tranform/scale
首先設置內容固定寬度、自動高度(以下舉例) width: 375px; height: auto;通過獲取窗口的寬度與固定寬度相除,獲得縮放比例const scaleValue=window.innerWidth / 375在html層,添加一段script:添加一段設置zoom值的函數: getScript() { return ` const zoomValue=window.innerWidth / 375; document.documentElement.style.transform="scale("+zoomValue+")"; document.documentElement.style.transformOrigin="left top";?????; }注:以上也可以直接寫script,我上面返回一段html是因為項目是通過服務端渲染的。樣式的設置必須在界面加載之前,否則會因界面顯示變更出現閃現問題。因為添加了服務端渲染,所以無法在界面一開始初始時,無法獲取window、document等對象。而上面html的注入,對服務端渲染機制的一個黑科技~上面的方案完成后,看看效果。然后坑出來了:項目設置的absolue元素width 100%失效了 -- 可以設置固定的寬度解決
彈框position=fixed位置飛到天邊去了 -- 這個無法規避。
transform限制position:fixed的跟隨效果
關于在transform下的子元素設置fixed無效的困惑
position:fixed不支持,所以想做標題欄置頂,上面方案是無法實現的。
ipad有遺留問題:微信瀏覽器,橫豎屏切換時,有些機型在打開一瞬間,橫向拖動有空白問題。這個問題無法處理~
以上方案因為使用了scale,同時窗口的寬高window.innerHeight無法準確獲取,需要除以比例,比如: window.innerHeight?/?(window.innerWidth?/ 375)
方案二:設置zoom
在上一個方案的基礎上,嘗試zoom縮放: getScript() {return `const zoomValue=window.innerWidth / 375;document.documentElement.style.zoom = zoomValue;;}emmm,很簡單,調試效果看起來很不錯。模擬機上,看起來都正常~但是坑來了:真機有問題,發現在ipad的safari上,頁面是放大了,但是字段根本就沒變化!原因竟然是:蘋果在ipad的網頁,改動渲染方面的相關規則。有點坑~https://apple.stackexchange.com/questions/377216/css-zoom-does-not-work-ipad-os-v13-latest-safarihttps://stackoverflow.com/questions/7907760/why-the-font-size-wont-change-with-browser-zoom-in實現沒辦法,我后面嘗試,通過userAgent對ipad機型(ipad、macintosh)特殊處理,直接獲取所有包含了文字的div、p、span等元素,放大font-size。發現可以處理,沒毛病!但是也有些缺陷,沒辦法在一開始處理字體,因為元素還沒有初始化,而等界面加載后再刷字體大小,界面會閃現一次。方案三:設置viewport-scare
在html中添加默認viewport:ps:minimal-ui 與本文無關,它可以在safari加載網頁時隱藏地址欄與導航欄添加viewport更新:getScript() { return `const zoomValue=window.innerWidth / 375;var viewport = document.querySelector("meta[name=viewport]");viewport.content="width=device-width,initial-scale="+zoomValue+", maximum-scale="+zoomValue+", minimum-scale="+zoomValue+",user-scalable=no, minimal-ui"?; }運行代碼,emmm,有一些小問題。margin:auto,在某些布局下會讓頁面偏移 --?刪除就好
設置background-image的區域,背景圖片并沒有填充滿 --?添加width:100%解決
position:fixed,寬高顯示有問題 --?設置固定寬度,比如375px,固定高度;如果需要全屏,可以使用height: 100vh。
以上方案不支持fixed布局,修改完成后,ipad的水平滾動條依然存在,無法解決
兼容適配
采用第二個zoom縮放方案,同時對ipad機型特殊處理,另外采用scale縮放方案。完整代碼如下:1. 初始化適配(支持服務端渲染)html-header添加script{/* app contentAutoFit */} 自適應可執行代碼文本。 //返回自適應html字符串 getZoomScript() { return ` const zoomValue = window.innerWidth / 375; const userAgentInfo = window.clientInformation.appVersion; //如果是ipad if (userAgentInfo.indexOf("iPad") != -1 || userAgentInfo.indexOf("Macintosh") != -1) { //內容自適應 - 設置transform-scale。 //fixed布局時需要修改下left/margin-left等,同時窗口的寬高無法準確獲取,需要除以比例,詳見windowSizeWithScaleHelper //ipad有遺留問題:微信瀏覽器加載時,橫豎屏切換一瞬間,有空白問題。不過可以忽略~ document.documentElement.style.transform = "scale(" + zoomValue + "," + (zoomValue < 1 ? 1 : zoomValue) + ")"; document.documentElement.style.transformOrigin = "left top"; var html = document.querySelector("html"); html.style.width = '375px'; html.style.overflow = 'hidden'; html.style.overflowY = 'auto'; } else { //內容自適應 - 設置zoom。通過zoom來縮放界面,在ipad的safari瀏覽器等會存在字體無法縮放的兼容問題。 document.documentElement.style.zoom = zoomValue; } // 內容自適應 - 設置viewport,整體okay。但是ipad的水平滾動條無法解決 // var viewport = document.querySelector("meta[name=viewport]"); // viewport.content = "width=device-width,initial-scale=" + zoomValue + ", maximum-scale=" + zoomValue + ", minimum-scale=" + zoomValue + ",user-scalable=no, minimal-ui" `; }2. 添加加載及界面變更刷新機制微信瀏覽器橫豎屏切換時,某些機型不會觸發窗口大小變更,所以需要額外添加orientationchange監聽
加載過程中,微信瀏覽器切換橫豎屏會有顯示問題,需要加載完成后適配
ipad不支持position:fixed,所以無法實現標題欄置頂等功能
微信瀏覽器,橫豎屏切換時,有些機型在打開一瞬間,有空白問題
IOS環境下固定定位position:fixed帶來的問題與解決方案
小技巧css解決移動端ios不兼容position:fixed屬性,無需插件
踩坑路上——IOS Safari瀏覽器下固定定位position:fixed帶來的問題與解決方案
iphone safari不支持position fixed的解決辦法
orientationchange事件、監測微信移動端橫豎屏
總結
以上是生活随笔為你收集整理的自适应宽_移动端实现自适应缩放界面的方法汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基础入门(7)之元组
- 下一篇: 为什么总是封板又打开涨停_警惕!如果股票