全屏HTML 5適配 個人見解

孔小建發表於2019-03-01

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,可以理解為每個手機的寬度都是一樣的,區別在於高度不一樣。

全屏HTML 5適配 個人見解

2.整屏專案

  • 如果專案是流式佈局,用上述rem即可,不過有時候我們會遇到全屏佈局的專案,這時候就要既保證寬度顯示正常,高度也需要顯示正常。 從上邊圖片中可以看到rem只能解決寬度適配,高度還是適配不了,短屏的露白比長屏的要少。接下來說一下我的適配方案:

1.垂直定位儘量用%,不要用固定單位,會導致長屏手機定位不正常;

.rect{
    position: absolute;
    left:0;
    top:25%;//垂直定位單位為%
    width:100%;
    height:1rem;
    margin-top:-.5rem;//以垂直中心定位
    background:red;
}
複製程式碼

例:

下圖左側定位用的是`rem`,右側垂直定位用的是`%`
複製程式碼

全屏HTML 5適配 個人見解

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 類名的,右側是加了的,在不同尺寸下的渲染,左側的會在窄屏溢位,右側的不會。

全屏HTML 5適配 個人見解

3.整屏的設計稿中的背景層要寬一些,比如主要內容的設計尺寸是640*1100,背景層要寬一些800 *1100

意思是psd的安全區域是640*1100,這裡的內容是要求每個手機都顯示的,另外寬度要外擴一些尺寸,最終的設計尺寸是800 *1100;

全屏HTML 5適配 個人見解
為什麼要外擴一些背景呢?因為一般背景層都要設定background-size: cover來填充,而外擴一些寬度可以更好的適配更多尺寸的螢幕。

來看下例子:

左側的沒有外擴些寬度,右側的有

全屏HTML 5適配 個人見解

綜合起來就是下邊的效果:

全屏HTML 5適配 個人見解

注:psd高度為什麼是1100,而不是1236,1100是除去了app的titlebar之後的尺寸,前端控制不了的部分設計人員可以把他忽略掉

相關文章