網頁不同解析度適配

2021-10-10 14:41:14 字數 3331 閱讀 6911

你大聲的嚷著你的手機解析度就是1920*1080的,這是你攢了足足兩個月的錢後在小公尺官網買的紅公尺手機,絕不可能有假。

你寫了乙個寬為 960px 的 div,用手機的瀏覽器橫屏開啟後,你期望這個該死的 div 會和在電腦上的瀏覽器載入出來一樣的效果,只佔螢幕的一半。結果卻讓你納了血悶,明明電腦上解析度和手機解析度都是1920*1080,為何電腦上 960px 正好佔一半,手機上卻佔了一大半,幾乎佔滿了你手機的整個螢幕的寬。

然後你去問了前端大神這是怎麼回事,大神欲言又止,看起來並不太想仔細的給你解釋,可能是不太好一兩句話說清楚,他讓你去用**檢視瀏覽器實際的寬度,說是一看便知:

id>

div>

>

var str =

"clientwidth:"

+document.documentelement.clientwidth +

",width:"

+ window.screen.width+

" clientheight:"

+ document.documentelement.clientheight+

",height:"

+ window.screen.height;

console.

log(str)

;alert

(str)

; window.

onload

=function()

script

>

執行結果:

clientwidth:1280, width:1280 clientheight:720, height:720

看完你也明白了,瀏覽器解析度是 1280*720 的,原來瀏覽器的解析度和手機裝置實際解析度不一樣啊!

上面的兩個寬度,可以理解成乙個是瀏覽器非最大化時的寬度,隨著使用者拖動邊框大小會跟著變動,另乙個是瀏覽器最大化時的寬度,不會變。

ui 設計師給你的圖是 1920*1080 尺寸的,本來圖上某個塊是 100px*100px,你**裡就可以直接寫寬 100px,高100px,但是現在這個網頁要放到手機上載入,按你剛才得出的這個解析度比例,你全得除以1.5 寫成寬 66.66px。

等等,先不要忙著改了,因為實際上你並不能這麼做,因為你的手機瀏覽器解析度是 1280*720的,別人的手機可不一定,例如 iphone4 的螢幕解析度是 960*640,瀏覽器的解析度是 480*320 的,你不僅得按1920*1080的設計圖來適配 1280*720的瀏覽器解析度,還要適配 480*320 的解析度,所以你需要準備多套比例來適配。

基於rem的布局

首先要搞清 em 和 rem 的區別:

em 單位是參照元素自身文字大小來設定尺寸,例如乙個 p 標籤的 font-size是 20px,1em就等於20px,這時如果想設定兩個字的縮排,就可以設定text-indent為2em;

rem 是參照根節點 html 標籤的文字大小來設定尺寸,其它元素相關尺寸都用 rem,所有元素就都有了統一參照標準,改變 html 文字大小,就會改變所有用 rem 單位設定的尺寸。

計算方式:

例如設計圖是 720*1280 的尺寸,這時為了容易把 px 轉換到 rem 單位,建議把 html 標籤的 font-size 設定成100px,意思就是在 720*1280 尺寸上,1rem=100px,這樣一來,ui給的是什麼尺寸的圖,就按什麼尺寸的來開發,圖上量的是100px,就寫1rem,量的是234px就寫2.34rem。

為什麼不設定成1px?不是更好換算嗎?

因為前端規定 font-size 屬性最小值是12px,不能設定1,也不能設定10,所以有人設定成20px,實際設定成12px以上都沒問題,例如設定成20px時,設計圖上量的是100px,**中要寫100/20=5rem。

media方式

type

="text/css"

>

/* 設計稿為750寬度 750\*0.025=18.75 */

@media only screen and (

max-width

:480px)

}/*480/750*40 = 25.6*/

@media only screen and (

max-width

:320px)

}@media only screen and (

min-width

:640px)

}@media only screen and (

min-width

:720px)

}@media only screen and (

min-width

:750px)

}style

>

n為隨便定的基準解析度的放大倍數

1rem*n=設計圖實際大小

a/750*n = 40

480解析度的font-size為 480/750*40=25.6px

如果最低想支援到480字型準確,即最低的12px,就是480/750*n=12px,計算結果n = 18.75,就意味著想要在480的解析度上顯示出來12px的字型,750這個基準解析度的放大倍數最低只能設定為18.75倍。

m/18.75*12 = 12,在基準設計圖上最低只能設計18.75px的字型,才能保證在最低支援的480寬的解析度上能正確顯示出12px的字型,如果設計圖上的字型小於18.75,換算到480上會小於12px,並被強制寫成12px,導致不準確。

注意,max-width:480意思是小於480時用這條style,相當於:

if

(width <=

480)

if(width <=

320)

max-width方式時,要把小的值放下面,如果把 320 這條寫到了480上面,瀏覽器解析度是200,那麼先判斷符合320,再判斷是否小於480又符合,320 的就會被 480 覆蓋,導致 html 的 font-size被設定成了480的比例。min-width反之。

所以按上面這種配置,當瀏覽器解析度寬度為730px時,html 的 font-size 就是38.4px,因為 730px 大於640px,小於750px,所以被適配到 720px這一檔。

(function()

;calc()

; window.

addeventlistener

('resize'

, calc);}

)()<

/script>

Android不同解析度適配

適配可以分為 layout land 橫屏布局 layout port 豎屏布局 layout 1920x1080 或者layout land 1920x1080 layout port 1920x1080 注 如果適配的布局檔案中,沒有當前機型,當前機型會選擇相差最小的解析度的配置檔案進行適配 l...

適配不同解析度螢幕

如今的螢幕解析度,小至320px iphone 大到2560px甚至更高 大顯示器 變化範圍極大。除了使用傳統的台式電腦,使用者會越來越多的通過手機 上網本 ipad一類的平板裝置來瀏覽頁面。這種情況下,固定寬度的設計方案將會顯得越發不合理。頁面需要有更好的適應性,其布局結構要做到根據不同的裝置及螢...

Android 適配不同 解析度和尺寸

如題,最近做乙個裝置介面,為了能夠適應不同的解析度 下面分享實現方法 首先 你需要在 androidmanifest.xml 檔案的元素如下新增子元素 supports screens android largescreens true android normalscreens true andr...