婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 吃透移動(dòng)端 Html5 響應(yīng)式布局

吃透移動(dòng)端 Html5 響應(yīng)式布局

熱門標(biāo)簽:ok電銷機(jī)器人 惡搞電話機(jī)器人 如何查看地圖標(biāo)注 黃石ai電銷機(jī)器人呼叫中心 欣鼎電銷機(jī)器人 效果 地圖標(biāo)注軟件打印出來 高德地圖標(biāo)注商戶怎么標(biāo) 電話機(jī)器人技術(shù) 智能電銷機(jī)器人被禁用了么

最近寫第三個(gè)移動(dòng)端 H5 的項(xiàng)目了,準(zhǔn)備記錄下自己在 H5 項(xiàng)目中的一些實(shí)踐探索。移動(dòng)端 H5 與 PC 端開發(fā)最大的區(qū)別之一,大概就是 響應(yīng)式布局 問題。

那么下面我們來聊聊移動(dòng)端響應(yīng)式布局,了解他的來龍去脈,對(duì)現(xiàn)有的最佳解決方案探索。

問題

全文將圍繞下面幾個(gè)問題進(jìn)行論述和展開:

寫移動(dòng)端H5 相關(guān)頁(yè)面,相比 PC 端有哪些值得注意的點(diǎn)?

關(guān)于H5 響應(yīng)式布局有哪些解決方案?

什么是 rem?如何在項(xiàng)目中完美使用它?

vh/vw 是最佳解決方案嗎?它有什么優(yōu)勢(shì)和缺陷 大型開源庫(kù)里面常用解決方案是什么?

怎樣快速搭建一套移動(dòng)端布局解決方案?

由來

概念

什么是 H5 技術(shù)?

H5 這個(gè)命名本身是一個(gè)很不討巧的命名,咋一眼看上去認(rèn)為 HTML5,或者第 5 級(jí)標(biāo)題的標(biāo)簽,對(duì)一些造成一些不小的誤解。

比如:我的一個(gè)某后端同事,談?wù)摰?H5 很簡(jiǎn)單,HTML 之前我也學(xué)過一些,以后要是你請(qǐng)假,我來幫你寫。

我是一臉蒙蔽,H5 === HTML?

再看看,搜索引擎中H5是什么?(引用來自谷歌詞條第一頁(yè))

如此看來,將 H5 視作 HTML 的大有人在,而 H5 這個(gè)概念只在中國(guó)特有,所以對(duì)外國(guó)人來說他們也認(rèn)為是 HTML, 所以,對(duì)于外國(guó)人和非這個(gè)領(lǐng)域的人來說,他們存在一樣的誤解。

目前的 H5 算是一個(gè)比較大的概念了,我認(rèn)為的 H5 技術(shù)是 一系列移動(dòng)端 web 前端技術(shù)的集合 大致用一個(gè)韋恩圖表示如下

我們這里只談 web 前端中 H5 技術(shù),H5 技術(shù)本身是用于 移動(dòng)端的 web 網(wǎng)頁(yè) 。由于App本身有個(gè) “ webview ” 的容器,在容器里可以運(yùn)行 web 前端相關(guān)代碼,由此 H5 和原生 App 結(jié)合又衍生出來了 Hybrid App 技術(shù)

Hybrid App 技術(shù)大致原理

這是我給公司同事普及 H5 知識(shí)繪制的圖像。

移動(dòng)端 web 和 PC web 的區(qū)別

PC 端我們是怎么布局的呢? 一般采用兩種方案,一種是 min-width 限制最小的寬度,瀏覽器寬度小于 min-width 就直接滾動(dòng)。另外一種呢,就是留白。設(shè)置頁(yè)面一個(gè)基礎(chǔ)寬度,超出的部分留白。

但是這兩種解決方案在移動(dòng)端可行嗎?

移動(dòng)端手機(jī)的寬度,大多不一致,而且沒辦法進(jìn)行窗口的縮放。讓移動(dòng)端產(chǎn)生滾動(dòng),體驗(yàn)更加糟糕,更別說和原生 app 性能相比較,基本頁(yè)面展示體驗(yàn)就很差了。

那么留白呢? 更不可行了,手機(jī)設(shè)備本身寬度就小,再留白就基本看不了什么了。

所以為了讓這種 web 能夠像原生 app 一樣的體驗(yàn),就出現(xiàn)了 H5 技術(shù)。進(jìn)一步衍生了 Hybird , 雖然比不上 app 性能,但是在 熱更新 上占有絕對(duì)優(yōu)勢(shì),有著原生無法替代的地方。

下面我們來就來實(shí)踐下 H5 最基本的技術(shù)之一 移動(dòng)端響應(yīng)式布局

實(shí)踐

解決方案一:rem + pxToRem 概念

css 中用于計(jì)量的單位有兩種,一種是 絕對(duì)單位 ,另一種是 相對(duì)單位

絕對(duì)單位

 

對(duì)于絕對(duì)單位,一般來說常用的也就 px, 其他的可能打印需要用到

相對(duì)單位

 

對(duì)于相對(duì)單位來說, emrem 屬于一對(duì), vwvh屬于一對(duì)。

前一對(duì)相對(duì)于 字體大小 ,區(qū)別在于 rem 相對(duì)于 根字體 ,對(duì)于我們控制整體的大小相對(duì)容易些,所以我們可以使用它來控制整個(gè)頁(yè)面的縮放。

后一對(duì),相對(duì)于視窗的大小,這個(gè)將在下一個(gè)節(jié)中發(fā)揮主要作用。

原理

  • 監(jiān)聽屏幕視窗的寬度,通過一定比例換算賦值給 htmlfont-size 。此時(shí),根字體大小就會(huì)隨屏幕寬度而變化。
  • px 轉(zhuǎn)換成 rem , 常規(guī)方案有兩種,一種是利用 sass / less 中的自定義函數(shù) pxToRem ,寫 px 時(shí),利用 pxToRem 函數(shù)轉(zhuǎn)換成 rem 。另外一種是直接寫 px ,編譯過程利用插件全部轉(zhuǎn)成 rem 。這樣 dom 中元素的大小,就會(huì)隨屏幕寬度變化而變化了。

 實(shí)現(xiàn)

動(dòng)態(tài)更新根字體大小

const MAX_FONT_SIZE = 420

// 定義最大的屏幕寬度
document.addEventListener('DOMContentLoaded', () => {
  const html = document.querySelector('html')
  let fontSize = window.innerWidth / 10
  fontSize = fontSize > MAX_FONT_SIZE ? MAX_FONT_SIZE : fontSize
  html.style.fontSize = fontSize + 'px'
})

px 轉(zhuǎn) rem

pxToRem 方案一

$rootFontSize: 375 / 10;
// 定義 px 轉(zhuǎn)化為 rem 的函數(shù)
@function px2rem ($px) {
    @return $px / $rootFontSize + rem;
}

.demo {
    width: px2rem(100);
    height: px2rem(100);
}

pxToRem 方案二

vue-cli3 中配置 裝 postcss-pxtorem 插件就可以了,其他平臺(tái)大致差不多

const autoprefixer = require('autoprefixer')
const pxtorem = require('postcss-pxtorem')
module.exports = { 
  // ...
  css: {
    sourceMap: true,
    loaderOptions: {
      postcss: {
        plugins: [
          autoprefixer(),
          pxtorem({
            rootValue: 37.5,
            propList: ['*']
          })
        ]
      }
    }
  }
}

點(diǎn)擊快速配置 H5 項(xiàng)目工程

繼續(xù)探索postcss-pxtorem 插件源碼,查看它實(shí)現(xiàn)的原理

function createPxReplace (rootValue, unitPrecision, minPixelValue) {
    return function (m, $1) {
        if (!$1) return m;
        var pixels = parseFloat($1);
        if (pixels < minPixelValue) return m;
        var fixedVal = toFixed((pixels / rootValue), unitPrecision);
        return (fixedVal === 0) ? '0' : fixedVal + 'rem';
    };
}

px 變換成 rem 主要是這個(gè)函數(shù),當(dāng)然里面有很多可配置的參數(shù), 核心原理和我們方案一差不多,方便在于,不需要每次寫 px 都要加上一個(gè)函數(shù),代碼也清晰很多

是不是所有元素 px 都要轉(zhuǎn)換成 rem 呢?,那可不一定哦, border 中的 px 不應(yīng)該轉(zhuǎn) rem,涉及到另外一個(gè) 1px 的問題,上一篇文章詳細(xì)論述過,避免 px 轉(zhuǎn) rem ,將 border 中的 px 大寫成 PX/Px/pX

1px 適配問題請(qǐng)移至吃透移動(dòng)端 1px

解決方案二:vh + vw

原理

vw 相對(duì)于視窗寬度的單位,隨寬度變化而變化。由此看來,方案一其實(shí)是方案二的一種 Hack, 通過使用監(jiān)聽實(shí)現(xiàn)了方案二的效果

實(shí)現(xiàn)

與 rem 類似做法,直接使用postcss-px-to-viewport 插件進(jìn)行配置, 配置方式也是和 postcss-pxtorem 大同小異

我們看看插件的原理是不是也是一樣的

function createPxReplace(opts, viewportUnit, viewportSize) {
  return function (m, $1) {
    if (!$1) return m;
    var pixels = parseFloat($1);
    if (pixels <= opts.minPixelValue) return m;
    var parsedVal = toFixed((pixels / viewportSize * 100), opts.unitPrecision);
    return parsedVal === 0 ? '0' : parsedVal + viewportUnit;
  };
}

果然呢,連方法名、變量名、代碼邏輯,都一摸一樣哈哈哈,誰(shuí)抄誰(shuí),我就不指出來啦 - -

其他解決方案 

                    

  
  方案 缺陷
1 百分比 高度無法百分比
2 媒體查詢 + meta 中 viewport 不同設(shè)備寬度不同,縮放比無法完全確定
3 flex 還是無法解決寬度超出問題

上面方案均存在致命缺陷,不推薦使用它完成移動(dòng)端布局計(jì)算。

flex 與 rem 結(jié)合使用更佳

兼容性

上述兩種方案, 兼容性主要在于 rem,vh,vw 關(guān)鍵詞上

rem 在移動(dòng)端表現(xiàn)高達(dá) 100%,令人驚嘆!

 

 

vh vw表現(xiàn)還是比較令人滿意,低版本的 safari 情況下會(huì)有兼容性問題,但不影響它會(huì)成為一種比較好的移動(dòng)端布局解決方案。

 開源庫(kù)解決方案

vant 組件庫(kù)

vant 組件庫(kù)中,默認(rèn)采用 px 做計(jì)量單位,如果需要使用 rem ,直接使用插件完美適配。

對(duì)于 vw 方案,vant 也是可以通過插件將 px 轉(zhuǎn)成 vw ,對(duì)于 vw 可能會(huì)存在一些坑點(diǎn)。

ant-design-mobile 組件庫(kù)

ant-design-mobile 組件庫(kù)仍然使用 px 單位

@hd: 1px; // 基本單位

// 字體尺寸
// ---
@font-size-icontext: 10 * @hd;
@font-size-caption-sm: 12 * @hd;
@font-size-base: 14 * @hd;
@font-size-subhead: 15 * @hd;
@font-size-caption: 16 * @hd;
@font-size-heading: 17 * @hd;

// 圓角
// ---
@radius-xs: 2 * @hd;
@radius-sm: 3 * @hd;
@radius-md: 5 * @hd;
@radius-lg: 7 * @hd;
@radius-circle: 50%;

// 邊框尺寸
// ---
@border-width-sm: 1PX;
@border-width-md: 1PX;
@border-width-lg: 2 * @hd;

vant 組件一樣, 還是由開發(fā)者來決定到底用哪一種方案 這種把選擇權(quán)交給開發(fā)者,算是一種開源庫(kù)的最靈活的做法了 。

總結(jié)

通過該文,你大概了解 H5 問題的來龍去脈了吧,也明白了如何解決移動(dòng)端響應(yīng)式布局問題,如果這篇文章能解決你的疑問或者工作中問題,不妨 點(diǎn)個(gè)贊 收藏下。

由于技術(shù)水平有限,文章中如有錯(cuò)誤地方,請(qǐng)?jiān)谠u(píng)論區(qū)指出,感謝!

上一篇文章,解決了 1px 問題 ,這篇文章解決了 響應(yīng)式布局 問題, 接下我應(yīng)該會(huì)繼續(xù)研究下, 關(guān)于 H5 一些踩坑總結(jié) ,之后應(yīng)該會(huì)去研究下 vue 最新的源碼 再進(jìn)行分享,想持續(xù)了解更多,不妨點(diǎn)個(gè) 關(guān)注 唄。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:盤錦 阿壩 赤峰 綏化 金昌 聊城 中山 萍鄉(xiāng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《吃透移動(dòng)端 Html5 響應(yīng)式布局》,本文關(guān)鍵詞  吃透,移動(dòng),端,Html5,響應(yīng),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《吃透移動(dòng)端 Html5 響應(yīng)式布局》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于吃透移動(dòng)端 Html5 響應(yīng)式布局的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产成人在线看| 日本一区二区免费在线观看视频 | 国产精品18久久久| 国产精品久久久久久久裸模| 精品精品国产高清a毛片牛牛| 亚洲乱码中文字幕综合| 久久日一线二线三线suv| 欧美一区二区免费观在线| 91成人在线免费观看| 理论电影国产精品| 亚洲色图都市小说| 日本一区中文字幕| 91日韩在线专区| 精品精品国产高清a毛片牛牛| 欧美中文字幕一区| 久久黄色级2电影| 天堂在线一区二区| 日韩国产欧美视频| 免费观看一级欧美片| 无吗不卡中文字幕| 亚洲成人tv网| 五月综合激情婷婷六月色窝| 亚洲一区自拍偷拍| 亚洲大片在线观看| 日韩和的一区二区| 日韩电影在线观看一区| 亚洲欧美影音先锋| 亚洲在线成人精品| 日韩激情一二三区| 欧美日韩在线播放三区| 亚洲欧美日韩国产另类专区| 成人免费小视频| 亚洲精品国产a久久久久久| 夜夜精品浪潮av一区二区三区| 久久先锋影音av| 国产精品伦一区| 亚洲人成在线观看一区二区| 一区二区三区国产精华| 日日摸夜夜添夜夜添国产精品 | 国产精品精品国产色婷婷| 国产欧美一二三区| 亚洲精品综合在线| 日韩精品福利网| 国产在线视频精品一区| 中文成人综合网| 国产麻豆精品在线观看| 中文字幕的久久| 欧美日韩精品欧美日韩精品一综合| 亚洲欧美aⅴ...| 日韩免费一区二区| 欧美精品电影在线播放| caoporm超碰国产精品| 国产在线视频一区二区三区| 一区二区在线免费观看| 久久久精品国产免大香伊| 91精品综合久久久久久| 欧美综合欧美视频| 99re在线精品| 欧美大度的电影原声| 天堂va蜜桃一区二区三区 | 欧美日韩一区二区三区视频| 国产乱色国产精品免费视频| 99久久国产综合精品麻豆| 国产精品三级视频| 欧美日韩aaaaa| 色999日韩国产欧美一区二区| 99久久综合精品| 久久99久久99小草精品免视看| 韩国一区二区三区| 欧美伊人久久大香线蕉综合69 | 日韩精品中文字幕一区二区三区| 国产精品视频看| 亚洲色图19p| 一区二区三区中文字幕精品精品| 欧美国产日韩一二三区| 在线亚洲欧美专区二区| 老司机精品视频线观看86| 亚洲第一狼人社区| 精品一区二区精品| 一区二区不卡在线播放| 色久优优欧美色久优优| 美日韩黄色大片| 亚洲人一二三区| 精品在线视频一区| 欧美日韩不卡一区二区| 艳妇臀荡乳欲伦亚洲一区| 91亚洲精品久久久蜜桃网站 | 欧美性受xxxx| 国产精品国产三级国产普通话蜜臀| 日韩av一区二| 欧美无砖专区一中文字| 亚洲一区二区三区不卡国产欧美| 成人白浆超碰人人人人| 国产欧美日韩在线观看| 国产成人av一区| 在线观看一区日韩| 欧美伊人久久久久久久久影院| 美女视频黄 久久| 日本一区二区三区四区在线视频| 日韩一级免费一区| 午夜电影一区二区三区| 51精品秘密在线观看| 日本成人超碰在线观看| 欧美一区二区精品久久911| 日韩精品久久理论片| 日韩片之四级片| 精品无码三级在线观看视频| 久久午夜色播影院免费高清| 国产福利精品导航| 亚洲欧美韩国综合色| 欧洲人成人精品| 青青青爽久久午夜综合久久午夜| 日本韩国欧美在线| 亚洲成人av免费| 91精品国产福利| 粉嫩一区二区三区在线看| 中文字幕一区二区三区蜜月| 在线精品亚洲一区二区不卡| 天天免费综合色| 久久精品一二三| 91麻豆产精品久久久久久| 亚洲精品国产品国语在线app| 久久国产成人午夜av影院| 久久九九全国免费| 制服.丝袜.亚洲.中文.综合| 久久国产剧场电影| 亚洲人成网站精品片在线观看| 国产成人在线视频播放| 国产精品传媒视频| 欧美一区二区在线视频| 懂色一区二区三区免费观看| 亚洲国产一区二区视频| 精品伦理精品一区| 91丨porny丨户外露出| 午夜精品福利一区二区蜜股av | 亚洲成a人片综合在线| 久久97超碰色| 欧美日免费三级在线| 亚洲乱码国产乱码精品精可以看| 亚洲日本欧美天堂| 国产乱子伦一区二区三区国色天香| 日日摸夜夜添夜夜添国产精品| 亚洲免费在线看| 国产成人夜色高潮福利影视| 久久精品国产999大香线蕉| 国产精品乱人伦一区二区| 欧美一区二区在线观看| 91丨porny丨国产| 国产高清不卡一区| 免费亚洲电影在线| 亚洲午夜在线观看视频在线| 国产日产欧美一区| 91麻豆精品久久久久蜜臀| 欧美日韩第一区日日骚| 精品少妇一区二区三区在线播放 | 日韩欧美在线1卡| 成人精品gif动图一区| www.日韩精品| 国产999精品久久久久久| 精品在线视频一区| 日本久久一区二区三区| youjizz久久| 成人18视频日本| 国产一区二区三区四区五区美女 | 久久麻豆一区二区| 69p69国产精品| 色先锋久久av资源部| 国产一区欧美二区| 日av在线不卡| 日本aⅴ免费视频一区二区三区| 中文字幕一区二区三区精华液| 日韩久久久久久| 91精品国产综合久久蜜臀| 成人97人人超碰人人99| 老鸭窝一区二区久久精品| 婷婷国产v国产偷v亚洲高清| 亚洲国产美女搞黄色| 午夜精品久久久久久久| 午夜精品久久久久久久久| 午夜不卡av免费| 久久99精品久久只有精品| 久久电影网站中文字幕| 狠狠狠色丁香婷婷综合久久五月| 亚洲国产视频一区二区| 亚洲一区二区三区四区在线| 一区二区三区国产精华| 亚洲综合自拍偷拍| 午夜久久久影院| 久久国产生活片100| 国产精品一区在线观看你懂的| 全部av―极品视觉盛宴亚洲| 久久成人av少妇免费| 国产真实乱偷精品视频免| 粉嫩欧美一区二区三区高清影视| 国产精品99久久久久久有的能看 | 99re热视频这里只精品| 99re在线精品| 欧美日韩高清一区二区| 日韩欧美国产综合一区 | 成人黄色国产精品网站大全在线免费观看 |