CSS 最佳實(shí)踐 + 套路(四) -- 移動(dòng)端適配

腳本實(shí)現(xiàn)自動(dòng)創(chuàng)建移動(dòng)端適配的相關(guān)文件

概述

手機(jī)上顯示網(wǎng)頁(yè)是將整個(gè)網(wǎng)頁(yè)縮小,模擬頁(yè)面寬度 980px ,可以使用 document.documentElement.clientWidth 來(lái)獲取到頁(yè)面寬度為 980px。在移動(dòng)端加上 <meta> 標(biāo)簽才是自適應(yīng),否則就是 980px ,即網(wǎng)頁(yè)整體縮小。

meta 標(biāo)簽

<meta name=' viewport ' content=' width=device-width user-scalable=no initial-scale=1.0 maximum=1.0 minimum-scale=1.0 '>

說(shuō)明:

  • width=device-width ==> 網(wǎng)頁(yè)寬度默認(rèn)等于屏幕寬度
  • user-scalable=no ==> 用戶是否可以縮放
  • initial-scale=1.0 ==> 原始縮放比例為 1.0 ,即網(wǎng)頁(yè)初始大小占屏幕面積的 100%
  • maximum=1.0 ==> 最大縮放比例
  • minimum-scale=1.0 ==> 最小縮放比例

<meta> 標(biāo)簽可以防止手機(jī)模擬 980px,防止頁(yè)面在用戶雙擊的時(shí)候放大和防止用戶橫屏

Media Query (媒體查詢)模塊

由一個(gè)可選的媒體類型和零個(gè)或多個(gè)使用媒體功能的限制了樣式表范圍的表達(dá)式組成,即對(duì)媒體進(jìn)行某些條件的查詢

  1. 目前來(lái)說(shuō)只用兩種模式 :

    • 移動(dòng)端
    • PC 端
  2. 兩種技術(shù):

    • mobiles-first ==> 先做移動(dòng)端頁(yè)面后做 PC 端頁(yè)面(推薦)
    • desktop-first ==> 先做 PC 端頁(yè)面后做移動(dòng)端頁(yè)面
  3. 兩種方案:

    • 移動(dòng)端和 PC 端分別跳轉(zhuǎn)不同網(wǎng)站(京東、淘寶)
    • 渲染不同的 HTML+CSS(知乎)

<link> 元素中的 CSS 媒體查詢

滿足查詢條件,則生效,否則不生效。但是無(wú)論生效與否都會(huì)下載

<link rel="stylesheet" media="(max-width: 800px)" href="example.css" />

樣式表中的CSS媒體查詢

滿足查詢條件,則生效,否則不生效。

<style>
@media (max-width: 600px) {
  .facet_sidebar {
    display: none;
  }
}
</style>

操作符

  • and 操作符 ==> 把多個(gè)媒體屬性組合成一條媒體查詢,對(duì)成鏈?zhǔn)降奶卣鬟M(jìn)行請(qǐng)求,只有當(dāng)每個(gè)屬性都為真時(shí),結(jié)果才為真
(min-width: 700px) and (max-width: 960px) { ... }
  • 逗號(hào)分隔列表 ==> 使用逗號(hào)分隔效果等同于or邏輯操作符。當(dāng)使用逗號(hào)分隔的媒體查詢時(shí),如果任何一個(gè)媒體查詢返回真樣式就是有效
@media (min-width: 700px), handheld and (orientation: landscape) { ... }
  • not 操作符 ==> 應(yīng)用于整個(gè)媒體查詢,在媒體查詢?yōu)榧贂r(shí)返回真

  • only 操作符 ==> 防止老舊的瀏覽器不支持帶媒體屬性的查詢而應(yīng)用到給定的樣式

<link rel="stylesheet" media="only screen and (color)" href="example.css" />

說(shuō)明:若使用了not或only操作符,必須明確指定一個(gè)媒體類型。

媒體特征

  • device-width ==> 設(shè)備寬度
  • width ==> 寬度。描述了輸出設(shè)備渲染區(qū)域的寬度。接受 mix/min 前綴

響應(yīng)式

響應(yīng)式即不同的屏幕得到不同的樣式

長(zhǎng)度單位

  • px ==> 絕對(duì)長(zhǎng)度單位,像素
  • em ==> 相對(duì)長(zhǎng)度單位,這個(gè)單位表示元素的 font-size 的計(jì)算值。
  • rem ==> 相對(duì)長(zhǎng)度單位,這個(gè)單位代表根元素(<html>)font-size 大小
    說(shuō)明:網(wǎng)頁(yè)默認(rèn)的 font-size: 16px
  • vh ==> viewport hight,相對(duì)長(zhǎng)度單位,視口高度的 1/100。
  • vw ==> viewport width,相對(duì)長(zhǎng)度單位,視口寬度的 1/100。
    說(shuō)明:vh 和 vw 的兼容性比較差,使用較少

動(dòng)態(tài) REM

由于手機(jī)上分辨率太多,不是做響應(yīng)式,只能退而求其次

  • 百分比布局:高度問(wèn)題,寬度不知道具體大小,僅僅知道百分比。造成了寬度不確定導(dǎo)致高度和寬度不能做任何配合
  • 動(dòng)態(tài)REM:一切單位以寬度為基準(zhǔn)(vw 啊,但是 vw 兼容性較差),退而求其次:rem

rem ==> html font-size =(JS實(shí)現(xiàn))=> page width(頁(yè)面寬度)

<head>
    <script>
        var pageWidth = window.innerWidth
        document.write( '<style>html{font-size:' + pageWidth/10 + 'px;}</style>' )
    </script>
    <style>
        body{
            font-size: 16px;
        }
    </style>
</head>

將 rem 變?yōu)?pageWidth/100 即可以表示 vw(視口寬度的 1/100),Chrome 瀏覽器默認(rèn)最小字號(hào) 12px,此時(shí)的 font-size 被 Chrome 瀏覽器強(qiáng)制為 12px。所以將 rem 變?yōu)?pageWidth/10 。

最佳實(shí)踐 & 套路

SASS 實(shí)現(xiàn)將 px 自動(dòng)變?yōu)?rem

LUNIX 安裝SASS
SASS 文件內(nèi)容

@function px( $px ){
  @return $px/$designWidth*10 + rem; // 此處的 10 是 html{font-size:' + pageWidth/10 + 'px;} 中的10 
}
$designWidth : 640; // 640 是設(shè)計(jì)稿的寬度,需要根據(jù)設(shè)計(jì)稿的寬度填寫(xiě)

相關(guān)知識(shí)點(diǎn)

  1. 移動(dòng)端中沒(méi)有 hover 事件,但是有 touch 事件
  2. 移動(dòng)端中沒(méi)有 resize 事件,并且沒(méi)有滾動(dòng)條(隱藏滾動(dòng)條)
  3. 使用相對(duì)大小的字體 rem
  4. 流動(dòng)布局,各個(gè)區(qū)塊都是浮動(dòng)的
  5. 選擇加載 CSS ,Media Query 模塊(CSS3)自動(dòng)探測(cè)屏幕寬度,然后加載相應(yīng)的 CSS 文件
  6. CSS 的 @media 規(guī)則
  7. 圖片自適應(yīng) max-width: 100%;
  8. 很小很小的地方使用 px ==> 1px
  9. rem 單位和其他單位混用,例如:font-size: 16px
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,119評(píng)論 1 92
  • 寫(xiě)在前面 本文參考了大量關(guān)于移動(dòng)端適配的資料 侵刪 謝謝 基礎(chǔ)介紹 在說(shuō)明移動(dòng)端的適配之前我們需要理解一個(gè)重要的東...
    熊蛋子17閱讀 846評(píng)論 1 3
  • 響應(yīng)式布局的實(shí)現(xiàn)依靠媒體查詢( Media Queries )來(lái)實(shí)現(xiàn),選取主流設(shè)備寬度尺寸作為斷點(diǎn)針對(duì)性寫(xiě)額外的樣...
    iyimao閱讀 567評(píng)論 0 0
  • 我們第一次接觸移動(dòng)web的時(shí)候,直觀印象樣應(yīng)該是:屏幕比pc小很多,所以對(duì)pc端設(shè)計(jì)的界面,不一定(或者說(shuō)不完全)...
    Scaukk閱讀 17,146評(píng)論 6 46
  • 我知道,你一直都在,從未走開(kāi)。 我知道,你很害怕。 我知道,你很孤單。 我知道,你一直在壓抑著...
    愛(ài)自滿溢閱讀 289評(píng)論 0 0

友情鏈接更多精彩內(nèi)容