web前端开发工程师面试题大全

一、HTML 常见题目

01、Doctype作用?严格模式与混杂模式如何区分?它们有何意义?

答:1. <!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器以何种模式来渲染文档。

      2. 严格模式的排版和 JS 运作模式是  以该浏览器支持的最高标准运行。

      3. 在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。

      4. DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。 

 

02、HTML5 为什么只需要写 <!DOCTYPE HTML>?

答:html5不基于SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照他们应该的方式来运行);而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型

03、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

答:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值, 比如div默认display属性值为“block”,成为“块级”元素;

span默认display属性值为“inline”,是“行内”元素。  

行内元素有:a b span img input select strong(强调的语气)
块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p 
知名的空元素:
<br> <hr> <img> <input> <link> <meta>
鲜为人知的是:
<area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>

04、页面导入样式时,使用link和@import有什么区别?

答:页面中使用CSS的方式主要有3种:行内添加定义style属性值,页面头部内嵌调用和外面链接调用,其中外面引用有两种:link和@import。外部引用CSS两种方式link和@import的方式分别是:

XML/HTML代码
<link rel="stylesheet" rev="stylesheet" href="CSS文件" type="text/css" media="all" />  
XML/HTML代码
<style type="text/css" media="screen">  
@import url("CSS文件");  
</style>  

两者都是外部引用CSS的方式,但是存在一定的区别:

  区别1:link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。

  区别2:link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。

  区别3:link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。

  区别4:ink支持使用Javascript控制DOM去改变样式;而@import不支持。

补充:@import最优写法:@import url(style.css) 和@import url("style.css")是最优的选择,兼容的浏览器最多。从字节优化的角度来看@import url(style.css)最值得推荐。

05、介绍一下你对浏览器内核的理解?

答:主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。

  渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。

  JS引擎则:解析和执行javascript来实现网页的动态效果。

  最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。

06、常见的浏览器内核有哪些?

答:Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]

  Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等

  Presto内核:Opera7及以上。 [Opera内核原为:Presto,现为:Blink;]

  Webkit内核:Safari,Chrome等。 [ Chrome的:Blink(WebKit的分支)]

07、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?

答:主要是关于图像,位置,存储,多任务等功能的增加。

  绘画 canvas;

  用于媒介回放的 video 和 audio 元素;

  本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;

  sessionStorage 的数据在浏览器关闭后自动删除;

  语意化更好的内容元素,比如 article、footer、header、nav、section;

  表单控件,calendar、date、time、email、url、search;

  新的技术webworker, websockt, Geolocation;

  移除的元素:

  纯表现的元素:basefont,big,center,font, s,strike,tt,u;

  对可用性产生负面影响的元素:frame,frameset,noframes;

  * 支持HTML5新标签:

  IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签,浏览器支持新标签后,还需要添加标签默认的样式。当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架

08、如何区分 HTML 和 HTML5?

答: DOCTYPE声明\新增的结构元素\功能元素

09、简述一下你对HTML语义化的理解?

答:用正确的标签做正确的事情。

  html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;

  及时在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的;

  搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;

  使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

10、HTML5的离线储存怎么使用,工作原理能不能解释一下?

答:在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。

  原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。

  如何使用:

  1、页面头部像下面一样加入一个manifest的属性;

  2、在cache.manifest文件的编写离线存储的资源;

  CACHE MANIFEST

  #v0.11

  CACHE:

  js/app.js

  css/style.css

  NETWORK:

  resourse/logo.png

  FALLBACK:

  / /offline.html

  3、在离线状态时,操作window.applicationCache进行需求实现。

11、浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?

答:在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。

  离线的情况下,浏览器就直接使用离线存储的资源。

12、请描述一下 cookies,sessionStorage 和 localStorage 的区别?

 答:cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存

  sessionStorage和localStorage的存储空间更大;

  sessionStorage和localStorage有更多丰富易用的接口;

  sessionStorage和localStorage各自独立的存储空间;
     存储大小:
     cookie数据大小不能超过4k。
     sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
     有期时间:
     localStorage    存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
     sessionStorage  数据在当前浏览器窗口关闭后自动删除。
     cookie          设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

13、iframe有那些缺点?

答:iframe会阻塞主页面的Onload事件;

  *iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。

  使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript

  动态给iframe添加src属性值,这样可以可以绕开以上两个问题。

14、Label的作用是什么?是怎么用的?(加 for 或 包裹)

答:label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。

标签的 for 属性应当与相关元素的 id 属性相同。 用法:

<form>
<label for="male">Male</label>
<input type="radio" name="sex" id="male" />
</form>

 

15、HTML5的form如何关闭自动完成功能?

答:给不想要提示的 form 或下某个input 设置为autocomplete=off。

16、如何实现浏览器内多个标签页之间的通信? (阿里)

答:调用localstorage、cookies等本地存储方式

17、webSocket如何兼容低浏览器?(阿里)答:Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR

18、页面可见性(Page Visibility)API 可以有哪些用途?

答:页面可见性: 就是对于用户来说,页面是显示还是隐藏, 所谓显示的页面,就是我们正在看的页面;隐藏的页面,就是我们没有看的页面。 因为,我们一次可以打开好多标签页面来回切换着,始终只有一个页面在我们眼前,其他页面就是隐藏的,还有一种就是.........,(把浏览器最小化,所有的页面就都不可见了)。

API 很简单,document.hidden 就返回一个布尔值,如果是true, 表示页面可见,false 则表示,页面隐藏。  不同页面之间来回切换,触发visibilitychange事件。 还有一个document.visibilityState, 表示页面所处的状态,取值:visible, hidden 等四个。

document.addEventListener("visibilitychange", function(){
    if(document.hidden){
        document.title ="hidden";
    }else {
        document.title = "visibile";
    }
})

我们打开这个页面,然后再打开另一个页面,来回点击这两个页面,当我们看到这个页面时,标题显示visiable ,当我们看另一个页面时,标题显示hidden;

动画,视频,音频都可以在页面显示时打开,在页面隐藏时关闭。

19、如何在页面上实现一个圆形的可点击区域?

答:(答案不唯一)

1. map+area

<img src="t.jpg" width="1366" height="768" border="0" usemap="#Map" /> 

<map name="Map" id="Map">  

     <area shape="circle" coords="821,289,68" href="www.baidu.com" target="_blank" /> 

</map>  

打开DW

2. border-radius(H5)

 

<style>  
 .disc{  
     width:100px;  
     height:100px;  
       
     border-radius: 50%;  
     cursor: pointer;  
     position: absolute;  
     left:50px;  
     top:50px;    
     line-height: 100px;  
     text-align: center;  
     color: white;  
 }  
</style>  
<div class="disc">智学无忧</div> 

 

3. 纯js实现 
需要求一个点在不在圆上简单算法、获取鼠标坐标等等
两点之间的距离计算公式  

上面公式对于JavaScript代码如下: 

        document.onclick=function(e){  
            var r=50;//圆的半径  
        var x1=100,y1=100,x2= e.clientX;y2= e.clientY;  
        //计算鼠标点的位置与圆心的距离  
            var len=Math.abs(Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2)));  
            if(len<=50){  
                console.log("内")  
            }else{  
                console.log("外")  
            }  
         } 

 

20、实现不使用 border 画出1px高的线,在不同浏览器的Quirksmode和CSSCompat模式下都能保持同一效果。答:Quirksmode即怪异模式,而csscompat是标准模式:

#line{
    width: 1000px;
    height:1px;
    background-color: #3ecdb5;
}
<div id=“line”></div>

21、网页验证码是干嘛的,是为了解决什么安全问题?

答:验证码是为了防止一些人使用软件恶意注册、发帖等行为而设的。
它的存在是为了确保登陆网站的是一个坐在电脑面前的真人,而不是一个自动登陆的软件

22、tite与h1的区别、b与strong的区别、i与em的区别?

 答:

1.b和strong的区别

两者虽然在网页中显示效果一样,但实际目的不同。
<b>这个标签对应 bold,即文本加粗,其目的仅仅是为了加粗显示文本,是一种样式/风格需求;
<strong>这个标签意思是加强字符的语气,表示该文本比较重要,提醒读者/终端注意。为了达到这个目的,浏览器等终端将其加粗显示;
总结:<b>为了加粗而加粗,<strong>为了标明重点而加粗,也可以用其它方式来强调,比如下划线,比如字体加大,比如红色,等等,可以通过css来改变strong的具体表现
2.i和em的区别

同样,I是Italic(斜体),而em是emphasize(强调)。

对于搜索引擎来说<strong>和<em>比<b>和<i>要重视的多。

3.title与h1的联系:

从网站角度看,title更重于网站信息。title可以直接告诉搜索引擎和用户这个网站是关于什么主题和内容的。

从文章角度看,h1则是用于概括文章主题。用户进入内容页,想看到的当然就是文章的内容,h1文章标题就是最重要的。文章标题最好只有一个,多个h1会导致搜索引擎不知道这个页面哪个标题内容最重要,导致淡化这个页面的标题和关键词,起不到突出主题的效果。

区别:h1突出文章主题,面对用户,更突出其视觉效果,突出网站标题或关键字用title。一篇文章,一个页面最好只用一个h1,多个h1会稀释主题。一个网站可以有多个title,最好一个单页用一个title,以便突出网站页面主体信息,从seo看,title权重比h1高,适用性比h1广。标记了h1的文字页面给予的权重会比页面内其他权重高很多。一个好的网站是h1和title并存,既突出h1文章主题,又突出网站主题和关键字。达到双重优化网站的效果。

二、、CSS类的题目

01、介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?

答:css盒子模型(1)有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;

  (2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).

     标准的CSS盒子模型和低端IE CSS盒子模型不同:宽高不一样

  标准的css盒子模型宽高就是内容区宽高;

  低端IE css盒子模型宽高 内边距﹢边界﹢内容区;

02、CSS选择符有哪些?哪些属性可以继承?

答:1.id选择器( # myid)

  2.类选择器(.myclassname)

  3.标签选择器(div, h1, p)

  4.相邻选择器(h1 + p)

  5.子选择器(ul > li)

  6.后代选择器(li a)

  7.通配符选择器( * )

  8.属性选择器(a[rel = "external"])

  9.伪类选择器(a: hover, li: nth - child)

  * 可继承的样式: font-size, font-family, color;

  * 不可继承的样式:border padding margin width height ;

  * 优先级就近原则,同权重情况下样式定义最近者为准;

  * 载入样式以最后载入的定位为准;

03、CSS优先级算法如何计算?

答:优先级为:

  !important > id > class > tag

  important 比 内联优先级高

04、CSS3新增伪类有那些?

答:CSS3新增伪类举例:

  p:first-of-type 选择和p元素同一类型的第一个元素。

  p:last-of-type 选择属于p元素类型的最后一个元素

  p:only-of-type 选择属于p元素类型且只有一个元素的

  p:only-child 选择属于其父元素的唯一子元素的

  p:nth-child(2) 选择属于其父元素的第二个子元素

  :enabled :disabled 控制表单控件的禁用状态。

  :checked 单选框或复选框被选中。

05、如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中?

居中div,给div设置一个宽度,然后添加margin:0 auto属性,例如:

  div{

  width:200px;

  margin:0 auto;

  }

居中一个浮动元素

.con {
    width: 400px;
    height: 400px;
    border: 1px solid red;
margin:0 auto; } .cot { width: 200px; height: 200px; border: 1px solid blue; float: left; position: relative; left: -100px; //left值=(父级width-子级width)/2 margin-left: 50%; margin-top: 50%; top: -100px; //top值=(父级height-子级height)/2 }
<div class="con">
    <div class="box">div</div>
</div>

居中绝对定位元素:

*{margin:0;padding:0;}
.con{
width:400px;
height:400px;
border:1px solid red;
position:relative;
margin:0 auto;
}.box {
     width: 200px;
     height: 200px;
     border: 1px solid blue;
     position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
} <div class="con"> <div class="box">div</div> </div>

06、display有哪些值?说明他们的作用。

答:block 象块类型元素一样显示。

  none 缺省值。象行内元素类型一样显示。

  inline-block 象行内元素一样显示,但其内容象块类型元素一样显示。

     list-item 象块类型元素一样显示,并添加样式列表标记。

     display:box和display:flex是css3新添加的盒子模型属性,目前box-flex属性还没有得到firefox、Opera、chrome浏览器的完全支持,但可以使用它们的私有属性定义firefox(-moz-)、opera(-o-)、chrome/safari(-webkit-)

<div class="box">
    <div>div1</div>
    <div>div2</div>
    <div>div3</div>
</div>

*{margin:0;padding:0;}
.box{
    height:100px;
    border:3px solid #000;
    display:-webkit-box;
    padding:10px;
}
.box div{background:#ff0000;height:98px;border:1px solid #fff;}
.box div:nth-of-type(1){-webkit-box-flex:1;}
.box div:nth-of-type(2){width:300px;}
.box div:nth-of-type(3){-webkit-box-flex:1;}

* display:box;和display:inline-box;有兼容性问题,所以在使用的时候需要加上前缀(-webkit、-moz、-o)
* 弹性盒模型:在使用弹性盒模型的时候 父元素必须要加display:box 或 display:inline-box
* 用box-flex轻松解决三栏布局(平行的三个div),中间div宽度固定,左右两个div平分剩余的宽度,
* 用box-flex时需要首先令父级div的display属性值为box;
* box-flex 定义盒子的弹性空间
* 子元素的尺寸=盒子的尺寸*子元素的box-flex属性值 / 所有子元素的box-flex属性值的和

07、position的值relative和absolute定位原点是?

答:*absolute:生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

  *fixed (老IE不支持):生成绝对定位的元素,相对于浏览器窗口进行定位。

      *relative:生成相对定位的元素,相对于其正常位置进行定位。

  * static 默认值。没有定位,元素出现在正常的流中*(忽略 top, bottom, left, right z-index 声明)。

  * inherit 规定从父元素继承 position 属性的值。

08、CSS3有哪些新特性?

答:CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px),

  对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)、边框背景(border-image)

  transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜

  增加了更多的CSS选择器 多背景 rgba

09、请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?

 

10、用纯CSS创建一个三角形的原理是什么?

答:1.div+css画三角形代码原理采用的是均分原理。
     2.在矩形的直角,两条边的样式要均分,比如左上角 border-top 和 border-left 的样式要均分;如果border-left 无色透明, border-top有色, 就会出来一个45度的锐角。

11、一个满屏 品 字布局 如何设计?1、品字布局(每块都有固定宽高)

<!doctype html>
<html>

    <head>
        <meta charset="utf-8">
        <title>品字布局</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
            
            div {
                width: 100px;
                height: 100px;
                background: red;
                font-size: 40px;
                line-height: 100px;
                color: #fff;
                text-align: center;
            }
            
            .div1 {
                margin: 50px auto 0;
            }
            
            .div2 {
                background: green;
                float: left;
                margin-left: 50%;
                position: relative;
                left: -100px;
            }
            
            .div3 {
                background: blue;
                float: left;
                position: relative;
                left: -100px;
            }
        </style>
    </head>

    <body>
        <div class="div1">1</div>
        <div class="div2">2</div>
        <div class="div3">3</div>
    </body>

</html>

2、实现全屏的品字布局(自适应的):

<!doctype html>
<html>

    <head>
        <meta charset="utf-8">
        <title>品字布局</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
            
            div {
                width: 100%;
                height: 100px;
                background: red;
                font-size: 40px;
                line-height: 100px;
                color: #fff;
                text-align: center;
            }
            
            .div1 {
                margin: 0 auto 0;
            }
            
            .div2 {
                background: green;
                float: left;
                width: 50%;
            }
            
            .div3 {
                background: blue;
                float: left;
                width: 50%;
            }
        </style>
    </head>

    <body>
        <div class="div1">1</div>
        <div class="div2">2</div>
        <div class="div3">3</div>
    </body>

</html>

12、常见兼容性问题?

答:* png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.

  * 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。

  * IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。

  浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;}

  这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)

  渐进识别的方式,从总体中逐渐排除局部。

  首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。

  接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。

  css

  .bb{

  background-color:#f1ee18;/*所有识别*/

  .background-color:#00deff\9; /*IE6、7、8识别*/

  +background-color:#a200ff;/*IE6、7识别*/

  _background-color:#1e0bd1;/*IE6识别*/

  }

  * IE下,可以使用获取常规属性的方法来获取自定义属性,

  也可以使用getAttribute()获取自定义属性;

  Firefox下,只能使用getAttribute()获取自定义属性.

  解决方法:统一通过getAttribute()获取自定义属性.

  * IE下,even对象有x,y属性,但是没有pageX,pageY属性;

  Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.

  * 解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。

  * Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,

  可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.

13、li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

答:浏览器的默认行为是把inline元素或者inline-block元素间的空白字符(空格换行tab)渲染成一个空格,也就是我们上面的代码<li>换行后会产生换行字符,而它会变成一个空格,当然空格就占用一个字符的宽度;空白间隙大概8px

解决方法:

*方法一:既然是因为<li>换行导致的,那就可以将<li>代码全部写在一排,这样就解决了,但是: 为了代码美观以及方便修改,很多时候我们不可能将<li>全部写在一排:<ul><li>列表一</li><li>列表二</li><li>列表三</li><li>列表四</li></ul>
* 方法二:既然是空格占一个字符的宽度,那我们索性就将<ul>内的字符尺寸直接设为0,即ul{font-size:0;}问题解决。但是我们看到<ul>中的其他文字就不见了,因为其尺寸被设为0px了,我们只好将他们重新设定字符尺寸。
* 方法三:设置ul{letter-spacing:-4px;}ul li{letter-spacing:normal;}
* 方法四:设置li标签浮动:li{float:left;list-style: none;display:inline-block;width:100px;height:100px}

<ul>
    <li>列表一</li>
    <li>列表二</li>
    <li>列表三</li>
    <li>列表四</li>
</ul>

*{margin:0;padding:0;}
li{list-style: none;display:inline-block;width:100px;height:100px;}
li:nth-child(1){background:red;}
li:nth-child(2){background:blue;}
li:nth-child(3){background:orange;}
li:nth-child(4){background:purple;}

解决后的效果:

14、经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同

问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。

碰到频率:100%

解决方案:CSS里    *{margin:0;padding:0;}

备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设置各个标签的内外补丁是0。

浏览器兼容问题二:块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大

问题症状:常见症状是IE6中后面的一块被顶到下一行

碰到频率:90%(稍微复杂点的页面都会碰到,float布局最常见的浏览器兼容问题)

解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性

备注:我们最常用的就是div+CSS布局了,而div就是一个典型的块属性标签,横向布局的时候我们通常都是用div float实现的,横向的间距设置如果用margin实现,这就是一个必然会碰到的兼容性问题。

浏览器兼容问题三:设置较小高度标签(一般小于10px),在IE6,IE7,遨游中高度超出自己设置高度

问题症状:IE6、7和遨游里这个标签的高度不受控制,超出自己设置的高度

碰到频率:60%

解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设置的高度。

备注:这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是IE8之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的,这个标签的高度还是会达到默认的行高。

浏览器兼容问题四:行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,IE6间距bug

问题症状:IE6里的间距比超过设置的间距

碰到几率:20%

解决方案:在display:block;后面加入display:inline;display:table;

备注:行内属性标签,为了设置宽高,我们需要设置display:block;(除了input标签比较特殊)。在用float布局并有横向的margin后,在IE6下,他就具有了块属性float后的横向margin的bug。不过因为它本身就是行内属性标签,所以我们再加上display:inline的话,它的高宽就不可设了。这时候我们还需要在display:inline后面加入display:talbe。

浏览器兼容问题五:图片默认有间距

问题症状:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。

碰到几率:20%

解决方案:使用float属性为img布局

备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。(我的一个学生使用负margin,虽然能解决,但负margin本身就是容易引起浏览器兼容问题的用法,所以我禁止他们使用)

浏览器兼容问题六:标签最低高度设置min-height不兼容

问题症状:因为min-height本身就是一个不兼容的CSS属性,所以设置min-height时不能很好的被各个浏览器兼容

碰到几率:5%

解决方案:如果我们要设置一个标签的最小高度200px,需要进行的设置为:{min-height:200px; height:auto !important; height:200px; overflow:visible;}

备注:在B/S系统前端开时,有很多情况下我们又这种需求。当内容小于一个值(如300px)时。容器的高度为300px;当内容高度大于这个值时,容器高度被撑高,而不是出现滚动条。这时候我们就会面临这个兼容性问题。

浏览器兼容问题七:透明度的兼容CSS设置

做兼容页面的方法是:每写一小段代码(布局中的一行或者一块)我们都要在不同的浏览器中看是否兼容,当然熟练到一定的程度就没这么麻烦了。建议经常会碰到兼容性问题的新手使用。很多兼容性问题都是因为浏览器对标签的默认属性解析不同造成的,只要我们稍加设置都能轻松地解决这些兼容问题。如果我们熟悉标签的默认属性的话,就能很好的理解为什么会出现兼容问题以及怎么去解决这些兼容问题。

  1. /* CSS hack*/ 

我很少使用hacker的,可能是个人习惯吧,我不喜欢写的代码IE不兼容,然后用hack来解决。不过hacker还是非常好用的。使用hacker我可以把浏览器分为3类:IE6 ;IE7和遨游;其他(IE8 chrome ff safari opera等)

◆IE6认识的hacker 是下划线_ 和星号 *

◆IE7 遨游认识的hacker是星号 *

比如这样一个CSS设置:

  1. height:300px;*height:200px;_height:100px; 

IE6浏览器在读到height:300px的时候会认为高时300px;继续往下读,他也认识*heihgt, 所以当IE6读到*height:200px的时候会覆盖掉前一条的相冲突设置,认为高度是200px。继续往下读,IE6还认识_height,所以他又会覆盖掉200px高的设置,把高度设置为100px;

IE7和遨游也是一样的从高度300px的设置往下读。当它们读到*height200px的时候就停下了,因为它们不认识_height。所以它们会把高度解析为200px,剩下的浏览器只认识第一个height:300px;所以他们会把高度解析为300px。因为优先级相同且想冲突的属性设置后一个会覆盖掉前一个,所以书写的次序是很重要的。

15、为什么要初始化CSS样式。

    因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。

当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。

  *最简单的初始化方法就是: * {padding: 0; margin: 0;} (不建议)

  淘宝的样式初始化:

  body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }

  body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }

  h1, h2, h3, h4, h5, h6{ font-size:100%; }

  address, cite, dfn, em, var { font-style:normal; }

  code, kbd, pre, samp { font-family:couriernew, courier, monospace; }

  small{ font-size:12px; }

  ul, ol { list-style:none; }

  a { text-decoration:none; }

  a:hover { text-decoration:underline; }

  sup { vertical-align:text-top; }

  sub{ vertical-align:text-bottom; }

  legend { color:#000; }

  fieldset, img { border:0; }

  button, input, select, textarea { font-size:100%; }

  table { border-collapse:collapse; border-spacing:0; }

16、absolute的containing block计算方式跟正常流有什么不同?

 

17、CSS里的visibility属性有个collapse属性值是干嘛用的?在不同浏览器下以后什么区别?

 

18、position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

 

19、对BFC规范(块级格式化上下文:block formatting context)的理解?

 

20、CSS权重优先级是如何计算的?

标签的权重为1,class的权重为10,id的权重为100

21、请解释一下为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式

22、移动端的布局用过媒体查询吗?

23、使用 CSS 预处理器吗?喜欢那个?

24、CSS优化、提高性能的方法有哪些?

25、浏览器是怎样解析CSS选择器的?

26、在网页中的应该使用奇数还是偶数的字体?为什么呢?

27、margin和padding分别适合什么场景使用?

28、抽离样式模块怎么写,说出思路,有无实践经验?[阿里航旅的面试题]

29、元素竖向的百分比设定是相对于容器的高度吗?

30、全屏滚动的原理是什么?用到了CSS的那些属性?

31、什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?

32、视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再次出现,和只出现一次分别怎么做?)

33、::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用。

34、如何修改chrome记住密码后自动填充表单的黄色背景 ?

35、你对line-height是如何理解的?

36、设置元素浮动后,该元素的display值是多少?(自动变成display:block)

37、怎么让Chrome支持小于12px 的文字?

38、让页面里的字体变清晰,变细用CSS怎么做?(-webkit-font-smoothing: antialiased;)

39、font-style属性可以让它赋值为“oblique” oblique是什么意思?

40、position:fixed;在android下无效怎么处理?

41、如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)

42、display:inline-block 什么时候会显示间隙?(携程)

43、overflow: scroll时不能平滑滚动的问题怎么处理?

44、有一个高度自适应的div,里面有两个div,一个高度100px,希望另一个填满剩下的高度。

45、png、jpg、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp?

46、什么是Cookie 隔离?(或者说:请求资源的时候不要让它带cookie怎么做)

47、style标签写在body后与body前有什么区别?

 

二、JavaScript类的题目

01、介绍JavaScript的基本数据类型。

number,string,boolean,object,undefined

02、说说写JavaScript的基本规范?

     1.不要在同一行声明多个变量。

  2.请使用 ===/!==来比较true/false或者数值

  3.使用对象字面量替代new Array这种形式

  4.不要使用全局函数。

  5.Switch语句必须带有default分支

  6.函数不应该有时候有返回值,有时候没有返回值。

  7.For循环必须使用大括号

  8.If语句必须使用大括号

  9.for-in循环中的变量 应该使用var关键字明确限定作用域,从而避免作用域污染。

03、JavaScript原型,原型链 ? 有什么特点?

原型:每个对象都会在其内部初始化一个属性,就是prototype(原型);

原型链:当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。

特点:JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。

当我们需要一个属性的时,Javascript引擎会先看当前对象中是否有这个属性, 如果没有的话,就会查找他的Prototype对象是否有这个属性,如此递推下去,一直检索到 Object 内建对象。

04、JavaScript有几种类型的值?(堆:原始数据类型和 栈:引用数据类型),你能画一下他们的内存图吗?

 两大类:

栈:原始数据类型(Undefined,Null,Boolean,Number、String)

堆:引用数据类型(对象、数组和函数)

 

两种类型的区别是:存储位置不同

 

原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;

 

引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体

 

 

 

05、Javascript如何实现继承?

通过原型和构造器

06、Javascript创建对象的几种方式?

07、Javascript作用链域?

08、谈谈This对象的理解。

      this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是有一个总原则,那就是this指的是调用函数的那个对象。this一般情况下:是全局对象Global。 作为方法调用,那么this就是指这个对象

09、eval是做什么的?

     它的功能是把对应的字符串解析成JS代码并运行;  应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。

10、什么是window对象? 什么是document对象?

11、null,undefined的区别?

12、写一个通用的事件侦听器函数(机试题)。

13、[“1”, “2”, “3”].map(parseInt) 答案是多少?

14、关于事件,IE与火狐的事件机制有什么区别? 如何阻止冒泡?

15、什么是闭包(closure),为什么要用它?

16、javascript 代码中的”use strict”;是什么意思 ? 使用它区别是什么?

17、如何判断一个对象是否属于某个类?

18、new操作符具体干了什么呢?

19、用原生JavaScript的实现过什么功能吗?

20、Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

21、对JSON的了解?

22、[].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16) }) 能解释一下这段代码的意思吗?

23、js延迟加载的方式有哪些?

24、Ajax 是什么? 如何创建一个Ajax?

25、同步和异步的区别?

26、如何解决跨域问题?

27、页面编码和被请求的资源编码如果不一致如何处理?

28、模块化开发怎么做?

29、AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?

30、requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何 缓存的?)

31、让你自己设计实现一个requireJS,你会怎么做?

32、谈一谈你对ECMAScript6的了解?

33、ECMAScript6 怎么写class么,为什么会出现class这种东西?

34、异步加载的方式有哪些?

35、documen.write和 innerHTML的区别?

36、DOM操作——怎样添加、移除、移动、复制、创建和查找节点?

37、.call() 和 .apply() 的含义和区别?

38、数组和对象有哪些原生方法,列举一下?

39、JS 怎么实现一个类。怎么实例化这个类

40、JavaScript中的作用域与变量声明提升?

41、如何编写高性能的Javascript?

42、那些操作会造成内存泄漏?

43、JQuery的源码看过吗?能不能简单概况一下它的实现原理?

44、jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?

45、jquery中如何将数组转化为json字符串,然后再转化回来?

46、jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?

47、jquery.extend 与 jquery.fn.extend的区别?

48、jQuery 的队列是如何实现的?队列可以用在哪些地方?

49、谈一下Jquery中的bind(),live(),delegate(),on()的区别?

50、JQuery一个对象可以同时绑定多个事件,这是如何实现的?

51、是否知道自定义事件。jQuery里的fire函数是什么意思,什么时候用?

52、jQuery 是通过哪个方法和 Sizzle 选择器结合的?(jQuery.fn.find()进入Sizzle)

53、针对 jQuery性能的优化方法?

54、Jquery与jQuery UI有啥区别?

55、JQuery的源码看过吗?能不能简单说一下它的实现原理?

56、jquery 中如何将数组转化为json字符串,然后再转化回来?

57、jQuery和Zepto的区别?各自的使用场景?

58、针对 jQuery 的优化方法?

59、Zepto的点透问题如何解决?

60、jQueryUI如何自定义组件?

61、需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案?

62、如何判断当前脚本运行在浏览器还是node环境中?(阿里)

63、移动端最小触控区域是多大?

64、jQuery 的 slideUp动画 ,如果目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,该如何处理呢?

65、把 Script 标签 放在页面的最底部的body封闭之前 和封闭之后有什么区别?浏览器会如何解析它们?

66、移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时?(click 有 300ms 延迟,为了实现safari的双击事件的设计,浏览器要知道你是不是要双击操作。)

67、知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout…)么? 能讲出他们各自的优点和缺点么?

68、Underscore 对哪些 JS 原生对象进行了扩展以及提供了哪些好用的函数方法?

69、解释JavaScript中的作用域与变量声明提升?

70、那些操作会造成内存泄漏?

71、JQuery一个对象可以同时绑定多个事件,这是如何实现的?

72、Node.js的适用场景?(如果会用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?

73、解释一下 Backbone 的 MVC 实现方式?

74、什么是“前端路由”?什么时候适合使用“前端路由”? “前端路由”有哪些优点和缺点?

75、知道什么是webkit么? 知道怎么用浏览器的各种工具来调试和debug代码么?

76、如何测试前端代码么? 知道BDD, TDD, Unit Test么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?

77、前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?

78、简述一下 Handlebars 的基本用法?

79、简述一下 Handlerbars 的对模板的基本处理流程, 如何编译的?如何缓存的?

80、用js实现千位分隔符?(来源:前端农民工,提示:正则+replace)

81、检测浏览器版本版本有哪些方式?

82、我们给一个dom同时绑定两个点击事件,一个用捕获,一个用冒泡,你来说下会执行几次事件,然后会先执行冒泡还是捕获。

 

四、面试官爱问的问题

01、原来公司工作流程是怎么样的,如何与其他人协作的?如何夸部门合作的?

02、你遇到过比较难的技术问题是?你是如何解决的?

03、设计模式 知道什么是singleton, factory, strategy, decrator么?

04、常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?

05、页面重构怎么操作?

06、列举IE与其他浏览器不一样的特性?

07、99%的网站都需要被重构是那本书上写的?

08、什么叫优雅降级和渐进增强?

09、是否了解公钥加密和私钥加密。

10、WEB应用从服务器主动推送Data到客户端有那些方式?

11、对Node的优点和缺点提出了自己的看法?

12、你有用过哪些前端性能优化的方法?

13、http状态码有那些?分别代表是什么意思?

14、一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)

15、部分地区用户反应网站很卡,请问有哪些可能性的原因,以及解决方法?

16、从打开app到刷新出内容,整个过程中都发生了什么,如果感觉慢,怎么定位问题,怎么解决?

17、除了前端以外还了解什么其它技术么?你最最厉害的技能是什么?

18、你用的得心应手用的熟练地编辑器&开发环境是什么样子?

19、对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?

20、你怎么看待Web App 、hybrid App、Native App?

21、你移动端前端开发的理解?(和 Web 前端开发的主要区别是什么?)

22、你对加班的看法?

23、平时如何管理你的项目?

24、说说最近最流行的一些东西吧?常去哪些网站?

25、如何设计突发大规模并发架构?

26、是否了解开源的工具 bower、npm、yeoman、grunt、gulp,一个 npm 的包里的 package.json 具备的必要的字段都有哪些?(名称、版本号,依赖)

每个模块的代码结构都应该比较简单,且每个模块之间的关系也应该非常清晰,随着功能和迭代次数越来越多,你会如何去保持这个状态的?

27、Git知道branch, diff, merge么?如何设计突发大规模并发架构?

28、当团队人手不足,把功能代码写完已经需要加班的情况下,你会做前端代码的测试吗?

29、知道什么是SEO并且怎么优化么? 知道各种meta data的含义么?

30、移动端(Android IOS)怎么做好用户体验?

31、简单描述一下你做过的移动APP项目研发流程?

32、你在现在的团队处于什么样的角色,起到了什么明显的作用?

33、你认为怎样才是全端工程师(Full Stack developer)?

34、介绍一个你最得意的作品吧?

35、你有自己的技术博客吗,用了哪些技术?

36、对前端安全有什么看法?

37、是否了解Web注入攻击,说下原理,最常见的两种攻击(XSS 和 CSRF)了解到什么程度?

38、项目中遇到国哪些印象深刻的技术难题,具体是什么问题,怎么解决?。

39、最近在学什么东西?

40、你的优点是什么?缺点是什么?

41、如何管理前端团队?

42、最近在学什么?能谈谈你未来3,5年给自己的规划吗?

posted @ 2017-04-13 17:05  爽朗琴天  阅读(872)  评论(0)    收藏  举报