web移動(dòng)端常見(jiàn)面試題以及適配兼容問(wèn)題

web移動(dòng)端

1、移動(dòng)端你們一般采用什么布局?移動(dòng)端設(shè)計(jì)稿是多大的尺寸?

● 定寬布局

● 一般移動(dòng)端設(shè)計(jì)稿是640或者750的尺寸

2、移動(dòng)布局自適應(yīng)不同屏幕的幾種方式

(1)響應(yīng)式布局

(2)100%布局(彈性布局)

(3)等比縮放布局(rem)

3、你們做移動(dòng)端平時(shí)在什么瀏覽器上測(cè)試?

? ? ? Chrome,Safari,微信X5,UC,其他手機(jī)自帶瀏覽器

4、說(shuō)說(shuō)移動(dòng)端是如何調(diào)試的?

(1)模擬手機(jī)調(diào)試chrome://inspect

(2)真機(jī)調(diào)試之a(chǎn)ndroid手機(jī)+Chrome

(3)真機(jī)調(diào)試之iphone + safari

(4)UC瀏覽器

(5)微信內(nèi)置瀏覽器調(diào)試

(6)debuggap

(7)抓包

5、移動(dòng)端怎么固定橫屏顯示?

(1)?檢測(cè)手機(jī)豎屏的時(shí)候,元素給元素添加90deg的旋轉(zhuǎn)

(2)?檢測(cè)手機(jī)橫屏的時(shí)候,元素給元素的旋轉(zhuǎn)再改為0

6、em和rem的區(qū)別

● em相對(duì)父級(jí)元素設(shè)置的font-size來(lái)設(shè)置大小 如果父元素沒(méi)有設(shè)置font-size ,則繼續(xù)向上查找,直至有設(shè)置font-size元素

● rem直接參照html標(biāo)簽字體大小,并且所有使用rem單位的都是參照html標(biāo)簽

7、移動(dòng)端用過(guò)那些meta標(biāo)簽?

<!--1:設(shè)置視口寬度 ?縮放比例--><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">?

<!--2:忽略將數(shù)字變?yōu)殡娫捥?hào)碼--><meta content="telephone=no" name="format-detection">?

<!--3:忽略識(shí)別郵箱--><meta name="format-detection" content="email=no" />?

<!--4:IOS中Safari允許全屏瀏覽--><meta content="yes" name="apple-mobile-web-app-capable">

8、為什么移動(dòng)端click會(huì)有300毫秒延遲?

? ? ? ? 因?yàn)橐苿?dòng)端瀏覽器會(huì)有一些默認(rèn)的行為,比如雙擊縮放、雙擊滾動(dòng)。這些行為尤其是雙擊縮放,主要是為桌面網(wǎng)站在移動(dòng)端的瀏覽體驗(yàn)設(shè)計(jì)的。而在用戶對(duì)頁(yè)面進(jìn)行操作的時(shí)候,移動(dòng)端瀏覽器會(huì)優(yōu)先判斷用戶是否要觸發(fā)默認(rèn)的行為。

9、移動(dòng)端zepto中的tap事件點(diǎn)透問(wèn)題?

● 問(wèn)題點(diǎn)擊穿透問(wèn)題:點(diǎn)擊蒙層(mask)上的關(guān)閉按鈕,蒙層消失后發(fā)現(xiàn)觸發(fā)了按鈕下面元素的click事件

● zepto的tap事件是綁定到document的,所以一般點(diǎn)擊tap事件都會(huì)冒泡到document才會(huì)觸發(fā)。當(dāng)點(diǎn)擊隱藏蒙層的時(shí)候默認(rèn)也會(huì)手指觸發(fā)到蒙層下面的元素 ?執(zhí)行事件

(1) github上有個(gè)fastclick插件,用來(lái)規(guī)避click事件的延時(shí)執(zhí)行

(2)用touchend代替tap事件并阻止掉touchend的默認(rèn)行為preventDefault()

//tap事件出現(xiàn)點(diǎn)透問(wèn)題

?$("#id").on("tap", function (event) {

//很多處理比如隱藏什么的

?????event.preventDefault();

?});

//touchend事件解決點(diǎn)頭問(wèn)題

?$("#id").on("touchend", function (event) {

//很多處理比如隱藏什么的

?????event.preventDefault();

?});

(3)給tap事件里面的隱藏蒙層方法執(zhí)行的方法300毫秒延遲

$("#id").on('tap',function(ev){

setTimeout(function(){

$("#id").hide();

},320)

})

10、固定定位布局鍵盤擋住輸入框內(nèi)容?

分析:

● 在軟件盤彈出之后(在focus中加個(gè)延遲時(shí)間),獲取input的坐標(biāo)

● 判斷input是否遮擋

● 判斷 input 是否在可視區(qū)的高度以下

●?如果被遮擋了,就向上移動(dòng)整個(gè)頁(yè)面

(1)通過(guò)綁定窗口改變事件,監(jiān)聽(tīng)鍵盤的彈出。然后去改變固定定位元素的位置。默認(rèn)鍵盤的寬度應(yīng)該是頁(yè)面的2分之一。所以我們位移的距離改成鍵盤的二分之一就可以。

window.onresize = function(){

//$(".mian")就是固定定位的元素

if($(".mian").css('top').replace('px','') != 0){

$(".mian").css('top',0);

}else{

var winHeight = $(window).height();

$(".mian").css('top',-(winHeight/4));

? }

}

(2)通過(guò)定時(shí)器實(shí)時(shí)監(jiān)聽(tīng)是否觸發(fā)input。如果觸發(fā)input框,就把固定定位改變成靜態(tài)定位。這樣就會(huì)瀏覽器會(huì)總動(dòng)把內(nèi)容頂上去。

function fixedWatch(el) {

//activeElement獲取焦點(diǎn)元素

if(document.activeElement.nodeName == 'INPUT') {

el.css('position', 'static');

} else {

el.css('position', 'fixed');

}

}

setInterval(function() {

fixedWatch($('.mian'));

}, 500);

11、為什么安卓瀏覽器看背景圖片,有些設(shè)備會(huì)模糊?

? ? ?因?yàn)槭謾C(jī)分辨率太小,如果按照分辨率來(lái)顯示網(wǎng)頁(yè),字會(huì)非常小,安卓手機(jī)devicePixoRadio比較亂,有1.5的,有2的也有3的。想讓圖片在手機(jī)里顯示更為清晰,必須使用2x的背景圖來(lái)代替img標(biāo)簽(一般情況下都是2倍的),或者指定background-size:contain;都可以。

用-webkit-min-device-pixel-ratio可以做到不同倍數(shù)不同尺寸的圖片:

.icon-logo{

????background-image:?url(src/assets/logo.png);

????width:?24px;

????height:?24px;

????background-size:?contain;}@media screen and (-webkit-min-device-pixel-ratio:?2){

????.icon-logo?{?background-image:?url(src/assets/logo@2.png);?}}@media screen and (-webkit-min-device-pixel-ratio:?3){

????.icon-logo?{?background-image:?url(src/assets/logo@3.png);?}}@media screen and (-webkit-min-device-pixel-ratio:?4){

????.icon-logo?{?background-image:?url(src/assets/logo@4.png);?}}

12、pc端與移動(dòng)端字體大小的問(wèn)題

html,body,form,fieldset,p,div,h1,h2,h3,h4,h5,h6{

????-webkit-text-size-adjust:100%;}

pc端字體正常顯示,但ios真機(jī)就出現(xiàn),h1、span等標(biāo)簽字體比較大。

html{

????-webkit-text-size-adjust:100%;/*ios端谷歌瀏覽器測(cè)試有效,Android端未測(cè)試*/}

13、如何防止手機(jī)中頁(yè)面放大和縮?。?/b>

<meta name="viewport"?content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"?/>

14、如何解決上下拉動(dòng)滾動(dòng)條時(shí)出現(xiàn)卡頓的現(xiàn)象?

body{

????-webkit-overflow-scrolling:touch;

????overflow-scrolling:touch;}

Android3+和iOSi5+支持CSS3的新屬性為overflow-scrolling

15、如何解決長(zhǎng)時(shí)間按住頁(yè)面閃退的現(xiàn)象?

element{

????-webkit-touch-callout:none;}

16、iphone及ipad下輸入框默認(rèn)內(nèi)陰影

element{

????-webkit-appearance:none;}

17、ios和android下觸摸元素時(shí)出現(xiàn)半透明灰色遮罩

element{

????-webkit-tap-highlight-color:rgba(255,255,255,0);}

設(shè)置alpha值為0就可以去除本透明灰色遮罩,備注:transparent的屬性值在android下無(wú)效。

18、active兼容處理即偽類:active失效

方法一:body添加ontouchstart

<body ontouchstart=''>

方法二:js給document綁定touchstart或touchend事件

<style>

????a

????{

????????color:#000;

????}

a:active

????{

????????color:#fff;

????}

</style>

<a href=foo>bar</a>

<script>

????document.addEventListentener('touchstart',function(){},false);

</script>

19、移動(dòng)端為什么會(huì)有一像素問(wèn)題?如何解決??

因?yàn)樵谝苿?dòng)端,由于屏幕分辨率的不同,現(xiàn)在分為一倍屏、二倍屏、三倍屏。在不同的分辨率上,有可能一像素被渲然成二個(gè)像素點(diǎn)或者三個(gè)像素點(diǎn),所以在實(shí)際寫代碼的時(shí)候,我們寫的border: 1px solid #000;?可能實(shí)際被渲然為 2px/3px;

(1)先使用偽類元素實(shí)現(xiàn)邊框效果,然后通過(guò)媒體查詢來(lái)操控transform: scale來(lái)適配不同分辨率

.border-bottom{

????position:?relative;}.border-bottom::after?{

????content:?" ";

????position:?absolute;

????left:?0;

????bottom:?0;

????width:?100%;

????height:?1px;

????background-color:?#e4e4e4;

????-webkit-transform-origin:?left bottom;

????transform-origin:?left bottom;}

/* 2倍屏 */@media only screen and (-webkit-min-device-pixel-ratio:?2.0)?{

????.border-bottom::after?{

????????-webkit-transform:?scaleY(0.5);

????????transform:?scaleY(0.5);

????}}

/* 3倍屏 */@media only screen and (-webkit-min-device-pixel-ratio:?3.0)?{

????.border-bottom::after?{

????????-webkit-transform:?scaleY(0.33);

????????transform:?scaleY(0.33);

????}}

(2)使用border-image來(lái)代替border

.border-image-1px?{

????border-width:?1px 0px;

????-webkit-border-image:?url("border.png")?2 0 stretch;

????border-image:?url("border.png")?2 0 stretch;}

(3)使用viewport +rem

● 設(shè)置meta標(biāo)簽

<meta

?????name="viewport"

?????id="WebViewport"

?????content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>?

● 并在js中通過(guò)判斷當(dāng)前是一倍屏還是二倍屏、三倍屏,來(lái)動(dòng)態(tài)的設(shè)置meta標(biāo)簽的內(nèi)容

function?rem()?{

????document.documentElement.style.fontSize =?document.documentElement.clientWidth /?7.5?+?'px';

????let?viewport =?document.querySelector("#WebViewport")

????if?(window.devicePixelRatio ==?1)?{

????????viewport.setAttribute('content',?'width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no')

????}?

????if?(window.devicePixelRatio ==?2)?{

????????viewport.setAttribute('content',?'width=device-width, initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no')

????}?

????if?(window.devicePixelRatio ==?3)?{

????????viewport.setAttribute('content',?'width=device-width, initial-scale=0.333333333, maximum-scale=0.333333333, minimum-scale=0.333333333, user-scalable=no')

????}?}rem()

window.onresize =?rem;

(4)border.css通過(guò)項(xiàng)目中引入border.css來(lái)解決

20、響應(yīng)式圖片

? ? ? ?在移動(dòng)端中,圖片的處理應(yīng)該是很謹(jǐn)慎的。假設(shè)有一張圖片本身的尺寸是X寬,設(shè)置和包裹它的div一樣寬,如果是div寬度小于圖片寬度沒(méi)有問(wèn)題,但是如果div寬度大于圖片的寬度,圖片則會(huì)被拉伸失真

解決方法:讓圖片最大只能是自己的寬度

img{

max-width: 100%;

display: block;

margin: 0 auto;

}

21、使用了3d做動(dòng)畫之后,3d元素下邊的文字失真的問(wèn)題

  給上面動(dòng)畫的幻燈片什么的外層加上絕對(duì)定位,定位里面一層加上相對(duì)定位。


注:所有題目均來(lái)源于網(wǎng)絡(luò),只是稍微進(jì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)容

  • H5移動(dòng)端知識(shí)點(diǎn)總結(jié) 閱讀目錄 移動(dòng)開發(fā)基本知識(shí)點(diǎn) calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,829評(píng)論 0 26
  • 移動(dòng)開發(fā)基本知識(shí)點(diǎn) 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,725評(píng)論 0 6
  • meta基礎(chǔ)知識(shí) H5頁(yè)面窗口自動(dòng)調(diào)整到設(shè)備寬度,并禁止用戶縮放頁(yè)面 忽略將頁(yè)面中的數(shù)字識(shí)別為電話號(hào)碼 忽略And...
    Mycro閱讀 1,028評(píng)論 0 11
  • 一、使用真實(shí)手機(jī)測(cè)試未發(fā)布網(wǎng)頁(yè)的方法 方法① 在虛擬機(jī)中搭建xampp,將文件通過(guò)FTP傳到虛擬機(jī),在一個(gè)局域網(wǎng)中...
    fastwe閱讀 804評(píng)論 0 0
  • 繼最近寫移動(dòng)端H5項(xiàng)目不斷踩坑之后,決定找一些對(duì)自己后續(xù)開發(fā)有幫助的大總結(jié)博客來(lái)看看,但是個(gè)人很懶,所以將瀏覽過(guò)的...
    陳大沖閱讀 2,471評(píng)論 0 8

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