H5項(xiàng)目怎么兼容移動(dòng)端?

? ? ? ?H5項(xiàng)目怎么兼容移動(dòng)端?相信這是個(gè)每個(gè)前端開發(fā)者都會(huì)經(jīng)常百度的問題,隨著前端技術(shù)的不斷更新?lián)Q代,現(xiàn)在每個(gè)公司隨隨便便都會(huì)讓你搞一個(gè)H5項(xiàng)目出來(lái),那么問題就來(lái)了,不管你怎么的小心翼翼,等到測(cè)試的時(shí)候總會(huì)出一些個(gè)意想不到的小Bug,每每碰到這些個(gè)問題總是讓人痛不欲生(腦子里不經(jīng)浮現(xiàn)我是誰(shuí)?我在哪?我要做什么?)


所以我就在這總結(jié)了一些經(jīng)常出現(xiàn)的問題,希望能夠幫助到你!

話不多說(shuō),翠花,上干貨啦!

1.屏幕適配方案

說(shuō)到h5頁(yè)面,第一個(gè)想到的就是適配問題,當(dāng)然目前用的最多的就是rem,那么他的原理是什么呢?簡(jiǎn)單來(lái)說(shuō),rem是相對(duì)于HTML根元素為基準(zhǔn)的相對(duì)單位。比如根元素(html)設(shè)置font-size=12px; 非根元素設(shè)置width:2rem;則換成px表示就是24px;如果根元素設(shè)置成font-size=1rem;則根元素?fù)Q成px就是相對(duì)于初始字體大小,一般是12px;

假設(shè)我們將屏幕平局分為10份,每一份寬度用一個(gè)a表示,即a=屏幕寬度/10;那么:

div{width: 5a} /* 屏幕寬度的50%?

但是css中沒有a這個(gè)單位???那怎么辦呢?對(duì),css不是有相對(duì)單位rem么?我們?nèi)梢詫?shí)現(xiàn)借助rem代替上面的a。如:

html {font-size: 12px}

div {width: 2rem} /* 24px*/

html {font-size: 16px}

div {width: 2rem} /* 32px

那么問題來(lái)了?怎么讓html元素字體大小恒等于屏幕的1/10呢?如ipone6寬是375px,font-size:37.5px;

html {fons-size: width / 10}

div {width: 5rem} /* 5rem = 5a = 屏幕寬度的50%?

我們用js很容易動(dòng)態(tài)的設(shè)置html的font-size恒等屏幕的1/10;

(function (doc, win, image_width) {

? ? var docEl = doc.documentElement, //獲取html標(biāo)簽

//orientationchange方向改變事件

resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',

recalc = function () {

//當(dāng)前設(shè)備視口寬度

? ? var clientWidth = docEl.clientWidth;

? ? if (!clientWidth) return;

? ? docEl.style.fontSize = 100 * (clientWidth / image_width) + 'px';

};

? ? if (!doc.addEventListener) return;

? ? win.addEventListener(resizeEvt, recalc, false);

? ? doc.addEventListener('DOMContentLoaded', recalc, false);

})(document, window, //圖是多少的,這就寫多少,比如750);

那么現(xiàn)在應(yīng)該就會(huì)有小伙伴要問了,字體的font-size也可以用rem嗎?如果你非要用的話那誰(shuí)也攔不住你,但是呢其實(shí)在移動(dòng)端字體并不合適使用rem, 字體的大小和字體寬度,并不成線性關(guān)系,所以字體大小不能使用rem;由于設(shè)置了根元素字體的大小,會(huì)影響所有沒有設(shè)置字體大小的元素,因?yàn)樽煮w大小是會(huì)繼承的,難道要每個(gè)元素都顯示設(shè)置字體大???

我們可以在body上做字體修正,比如把body字體大小設(shè)置為16px,但如果用戶自己設(shè)置了更大的字體,此時(shí)用戶的設(shè)置將失效,比如合理的方式是,將其設(shè)置為用戶的默認(rèn)字體大小:

那么如果屏幕尺寸切換了字體怎么辦呢?我們可以換種方法來(lái)實(shí)現(xiàn)


適配問題解決了,那么我們就該聊一聊彈性盒布局了,display:flex和display:box都可用于彈性布局,不同的是display:box是2009年的命名,已經(jīng)過時(shí),用的時(shí)候需要加上前綴;display:flex是2012年之后的命名。在實(shí)際的測(cè)試中display:flex不能完全的替代display:box。display:flex的瀏覽器兼容性比較麻煩。

1.關(guān)于display:flex;

對(duì)于PC端,一般chrome(測(cè)試版本:49.0.2623.110 m)和火狐(測(cè)試版本:49.0.2)都能很好地支持。ie不支持。

對(duì)于移動(dòng)端:

(1)iOS的原生safari瀏覽器是支持的;UC瀏覽器支持的很好;微信瀏覽器不支持

(2)安卓的原生瀏覽器不支持,UC瀏覽器不支持,微信瀏覽器不支持

2.關(guān)于display:box;

PC端:chrome(測(cè)試版本:49.0.2623.110 m)和火狐(測(cè)試版本:49.0.2)都能很好地支持。ie不支持。

移動(dòng)端:

(1)iOS的原生safari瀏覽器是支持的;UC瀏覽器支持的很好

(2)安卓的原生瀏覽器支持;UC瀏覽器不支持

總的來(lái)說(shuō),不考慮IE瀏覽器的話,PC端上使用哪個(gè)都可以,一般使用display:flex;iOS的UCdisplay:box和display:flex兩個(gè)都支持。

通常要做到兼容,寫法是下面這樣:

本來(lái)覺著好像沒多少東西,但是一寫下來(lái)就感覺有好多,不是一時(shí)半會(huì)能寫完的,后續(xù)再慢慢更新吧,今天就寫到這里了!希望能夠?qū)δ阌幸稽c(diǎn)點(diǎn)的幫助

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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