1. rem佈局
rem
(font size of the root element)是指相對於根元素的字型大小的單位。- 例子:
<!doctype html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<style>
html{
/*以寬度640的設計為例*/
/*demo用的是vw單位,想要相容性好的話,用js動態寫fontSize*/
/*最後的乘以100,是因為font-size不能小於瀏覽器內建的最小字號,乘以100即好計算又大於內建最小字號*/
font-size:calc(100vw/640*100);
}
.cube{
position: absolute;
top: 0;
left: 0;
width: 6.4rem;
height: 6.4rem;
background:red;
}
</style>
</head>
<body>
<span class="cube"></span>
</body>
</html>
複製程式碼
不同手機呈現如下:
- 雖然不同手機的寬高尺寸不一樣,但是設定了
root font-size
之後,每個手機的寬度都是等量的rem
,可以理解為每個手機的寬度都是一樣的,區別在於高度不一樣。
2.整屏專案
- 如果專案是流式佈局,用上述
rem
即可,不過有時候我們會遇到全屏佈局的專案,這時候就要既保證寬度顯示正常,高度也需要顯示正常。 從上邊圖片中可以看到rem
只能解決寬度適配,高度還是適配不了,短屏的露白比長屏的要少。接下來說一下我的適配方案:
1.垂直定位儘量用%
,不要用固定單位,會導致長屏手機定位不正常;
.rect{
position: absolute;
left:0;
top:25%;//垂直定位單位為%
width:100%;
height:1rem;
margin-top:-.5rem;//以垂直中心定位
background:red;
}
複製程式碼
例:
下圖左側定位用的是`rem`,右側垂直定位用的是`%`
複製程式碼
2. 運用Media query去適當縮小元素,預防短屏適配過於擁擠。
上圖可以理解元素垂直定位運用%
會引起相鄰元素的相對位置會發生改變,當元素過大時,在窄屏內就會過於擁擠,可以用css的Media query
來避免這個問題;
aspect-ratio
定義輸出裝置中的頁面可見區域寬度與高度的比率
```
<!doctype html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<style>
html{
font-size:calc(100vw/640*100);
}
.cube{
position: absolute;
top: 50%;
left: 0;
width: 6.4rem;
height: 11rem;
background:red;
}
@media screen and (min-aspect-ratio: 640/1050) {
.auto-scale{
transition:transform .5s;
transform:scale(0.95);
}
}
@media screen and (min-aspect-ratio: 640/1000) {
.auto-scale{
transform:scale(0.9);
}
}
@media screen and (min-aspect-ratio: 640/950) {
.auto-scale{
transform:scale(0.85);
}
}
@media screen and (min-aspect-ratio: 640/900) {
.auto-scale{
transform:scale(0.8);
}
}
</style>
</head>
<body>
<span class="cube auto-scale"></span>
</body>
</html>
```
複製程式碼
結果如下:
左側是不加
auto-scale
類名的,右側是加了的,在不同尺寸下的渲染,左側的會在窄屏溢位,右側的不會。
3.整屏的設計稿中的背景層要寬一些,比如主要內容的設計尺寸是640*1100,背景層要寬一些800 *1100
為什麼要外擴一些背景呢?因為一般背景層都要設定意思是psd的安全區域是640*1100,這裡的內容是要求每個手機都顯示的,另外寬度要外擴一些尺寸,最終的設計尺寸是800 *1100;
background-size: cover
來填充,而外擴一些寬度可以更好的適配更多尺寸的螢幕。
來看下例子:
左側的沒有外擴些寬度,右側的有
綜合起來就是下邊的效果:
注:psd高度為什麼是1100,而不是1236,1100是除去了app的titlebar之後的尺寸,前端控制不了的部分設計人員可以把他忽略掉