web移动端常见面试题以及适配兼容问题

web移动端

1、移动端你们一般采用什么布局?移动端设计稿是多大的尺寸?

● 定宽布局

● 一般移动端设计稿是640或者750的尺寸

2、移动布局自适应不同屏幕的几种方式

(1)响应式布局

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

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

3、你们做移动端平时在什么浏览器上测试?

      Chrome,Safari,微信X5,UC,其他手机自带浏览器

4、说说移动端是如何调试的?

(1)模拟手机调试chrome://inspect

(2)真机调试之android手机+Chrome

(3)真机调试之iphone + safari

(4)UC浏览器

(5)微信内置浏览器调试

(6)debuggap

(7)抓包

5、移动端怎么固定横屏显示?

(1) 检测手机竖屏的时候,元素给元素添加90deg的旋转

(2) 检测手机横屏的时候,元素给元素的旋转再改为0

6、em和rem的区别

● em相对父级元素设置的font-size来设置大小 如果父元素没有设置font-size ,则继续向上查找,直至有设置font-size元素

● rem直接参照html标签字体大小,并且所有使用rem单位的都是参照html标签

7、移动端用过那些meta标签?

<!--1:设置视口宽度  缩放比例--><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"> 

<!--2:忽略将数字变为电话号码--><meta content="telephone=no" name="format-detection"> 

<!--3:忽略识别邮箱--><meta name="format-detection" content="email=no" /> 

<!--4:IOS中Safari允许全屏浏览--><meta content="yes" name="apple-mobile-web-app-capable">

8、为什么移动端click会有300毫秒延迟?

        因为移动端浏览器会有一些默认的行为,比如双击缩放、双击滚动。这些行为尤其是双击缩放,主要是为桌面网站在移动端的浏览体验设计的。而在用户对页面进行操作的时候,移动端浏览器会优先判断用户是否要触发默认的行为。

9、移动端zepto中的tap事件点透问题?

● 问题点击穿透问题:点击蒙层(mask)上的关闭按钮,蒙层消失后发现触发了按钮下面元素的click事件

● zepto的tap事件是绑定到document的,所以一般点击tap事件都会冒泡到document才会触发。当点击隐藏蒙层的时候默认也会手指触发到蒙层下面的元素  执行事件

(1) github上有个fastclick插件,用来规避click事件的延时执行

(2)用touchend代替tap事件并阻止掉touchend的默认行为preventDefault()

//tap事件出现点透问题

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

//很多处理比如隐藏什么的

     event.preventDefault();

 });

//touchend事件解决点头问题

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

//很多处理比如隐藏什么的

     event.preventDefault();

 });

(3)给tap事件里面的隐藏蒙层方法执行的方法300毫秒延迟

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

setTimeout(function(){

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

},320)

})

10、固定定位布局键盘挡住输入框内容?

分析:

● 在软件盘弹出之后(在focus中加个延迟时间),获取input的坐标

● 判断input是否遮挡

● 判断 input 是否在可视区的高度以下

● 如果被遮挡了,就向上移动整个页面

(1)通过绑定窗口改变事件,监听键盘的弹出。然后去改变固定定位元素的位置。默认键盘的宽度应该是页面的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)通过定时器实时监听是否触发input。如果触发input框,就把固定定位改变成静态定位。这样就会浏览器会总动把内容顶上去。

function fixedWatch(el) {

//activeElement获取焦点元素

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

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

} else {

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

}

}

setInterval(function() {

fixedWatch($('.mian'));

}, 500);

11、为什么安卓浏览器看背景图片,有些设备会模糊?

     因为手机分辨率太小,如果按照分辨率来显示网页,字会非常小,安卓手机devicePixoRadio比较乱,有1.5的,有2的也有3的。想让图片在手机里显示更为清晰,必须使用2x的背景图来代替img标签(一般情况下都是2倍的),或者指定background-size:contain;都可以。

用-webkit-min-device-pixel-ratio可以做到不同倍数不同尺寸的图片:

.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端与移动端字体大小的问题

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

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

pc端字体正常显示,但ios真机就出现,h1、span等标签字体比较大。

html{

    -webkit-text-size-adjust:100%;/*ios端谷歌浏览器测试有效,Android端未测试*/}

13、如何防止手机中页面放大和缩小?

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

14、如何解决上下拉动滚动条时出现卡顿的现象?

body{

    -webkit-overflow-scrolling:touch;

    overflow-scrolling:touch;}

Android3+和iOSi5+支持CSS3的新属性为overflow-scrolling

15、如何解决长时间按住页面闪退的现象?

element{

    -webkit-touch-callout:none;}

16、iphone及ipad下输入框默认内阴影

element{

    -webkit-appearance:none;}

17、ios和android下触摸元素时出现半透明灰色遮罩

element{

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

设置alpha值为0就可以去除本透明灰色遮罩,备注:transparent的属性值在android下无效。

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、移动端为什么会有一像素问题?如何解决? 

因为在移动端,由于屏幕分辨率的不同,现在分为一倍屏、二倍屏、三倍屏。在不同的分辨率上,有可能一像素被渲然成二个像素点或者三个像素点,所以在实际写代码的时候,我们写的border: 1px solid #000; 可能实际被渲然为 2px/3px;

(1)先使用伪类元素实现边框效果,然后通过媒体查询来操控transform: scale来适配不同分辨率

.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来代替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

● 设置meta标签

<meta

     name="viewport"

     id="WebViewport"

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

● 并在js中通过判断当前是一倍屏还是二倍屏、三倍屏,来动态的设置meta标签的内容

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通过项目中引入border.css来解决

20、响应式图片

       在移动端中,图片的处理应该是很谨慎的。假设有一张图片本身的尺寸是X宽,设置和包裹它的div一样宽,如果是div宽度小于图片宽度没有问题,但是如果div宽度大于图片的宽度,图片则会被拉伸失真

解决方法:让图片最大只能是自己的宽度

img{

max-width: 100%;

display: block;

margin: 0 auto;

}

21、使用了3d做动画之后,3d元素下边的文字失真的问题

  给上面动画的幻灯片什么的外层加上绝对定位,定位里面一层加上相对定位。


注:所有题目均来源于网络,只是稍微进行加工。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,444评论 0 26
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,460评论 0 6
  • meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 忽略将页面中的数字识别为电话号码 忽略And...
    Mycro阅读 874评论 0 11
  • 一、使用真实手机测试未发布网页的方法 方法① 在虚拟机中搭建xampp,将文件通过FTP传到虚拟机,在一个局域网中...
    fastwe阅读 718评论 0 0
  • 继最近写移动端H5项目不断踩坑之后,决定找一些对自己后续开发有帮助的大总结博客来看看,但是个人很懒,所以将浏览过的...
    陈大冲阅读 2,101评论 0 8