前端面试常见问答

https://zhuanlan.zhihu.com/p/22800583?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

 

1. 常用那几种浏览器测试?有哪些内核(Layout Engine)?
(Q1) 浏览器:IE,Chrome,FireFox,Safari,Opera。
(Q2) 内核:Trident,Gecko,Presto,Webkit。

 

2. 说下行内元素和块级元素的区别?行内块元素的兼容性使用?(IE8 以下)
(Q1) 行内元素:会在水平方向排列,不能包含块级元素,设置width无效,height无效(可以设置line-height),margin上下无效,padding上下无效。
块级元素:各占据一行,垂直方向排列。从新行开始结束接着一个断行。
(Q2) 兼容性:display:inline-block;*display:inline;*zoom:1;
IE中的inline-block
IE6不支持这个属性,但IE8开始支持这个属性。

让IE6内联元素具备inline-block特性

由于inline-block会触发IE的layout,所以IE6中只要设置{display:inline-block;}即可。

让IE6区块元素具备inline-block属性,有两种方法

A、可以先触发layout,再设置为inline,需要注意的是这两个display必须在两个CSS声明中才有效,代码如下:

div {
    width:400px;
    height:200px;
    display:inline-block;
}
div {
    display:inline;
}
B、直接设置为inline,再利用zoom来触发layout来实现类似效果:

div {
    width:400px;
    height:200px;
    *display:inline;
    *zoom:1;
}

 

3. 清除浮动有哪些方式?比较好的方式是哪一种?

(Q1)
(1)父级div定义height。
(2)结尾处加空div标签clear:both。
(3)父级div定义伪类:after和zoom。
.div:after{content: "";  display:block;  height:0;  clear:both;}
或.div:after{display:block; content:"clear"; height:0; clear:both; overflow:hidden; visibility:hidden;}
(4)父级div定义overflow:hidden。
(5)父级div定义overflow:auto。
(6)父级div也浮动,需要定义宽度。
(7)父级div定义display:table。
(8)结尾处加br标签clear:both。
(Q2) 比较好的是第3种方式,好多网站都这么用。


4. box-sizing常用的属性有哪些?分别有什么作用?
(Q1)box-sizing: content-box|border-box|inherit;
(Q2)content-box:宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框(元素默认效果)。
border-box:元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。

5. Doctype作用?标准模式与兼容模式各有什么区别?
(Q1) <!DOCTYPE>告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
(Q2) 标准模式的排版和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

6. HTML5 为什么只需要写 <!DOCTYPE HTML>?
HTML5不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行)。
而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
 
7. 页面导入样式时,使用link和@import有什么区别?
(1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
(3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题。

 
8. 介绍一下你对浏览器内核的理解?
主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和js引擎。
渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。
浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。
JS引擎则:解析和执行javascript来实现网页的动态效果。
最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。

9. html5有哪些新特性?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?
(Q1)
HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
(1)绘画 canvas;
(2)用于媒介回放的 video 和 audio 元素;
(3)本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
(4)sessionStorage 的数据在浏览器关闭后自动删除;
(5)语意化更好的内容元素,比如 article、footer、header、nav、section;
(6)表单控件,calendar、date、time、email、url、search;
(7)新的技术webworker, websocket, Geolocation;
(Q2)
IE8/IE7/IE6支持通过document.createElement方法产生的标签,
可以利用这一特性让这些浏览器支持HTML5新标签,
浏览器支持新标签后,还需要添加标签默认的样式。
当然也可以直接使用成熟的框架、比如html5shim,
(Q3)
1).在文档类型声明上;2).在结构语义上;3).强大的HTML5的新功能
 
10. 简述一下你对HTML语义化的理解?
用正确的标签做正确的事情。
html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于seo;
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

JavaScript

1. 介绍js的基本数据类型
Undefined、Null、Boolean、Number、String

2. js有哪些内置对象?
数据封装类对象:Object、Array、Boolean、Number 和 String
其他对象:Function、Arguments、Math、Date、RegExp、Error

3. this对象的理解
this总是指向函数的直接调用者(而非间接调用者);
如果有new关键字,this指向new出来的那个对象;
在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window。

4. eval是做什么的?
它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')')。

5. DOM怎样添加、移除、移动、复制、创建和查找节点
// 创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
// 添加、移除、替换、插入
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子节点前插入一个新的子节点
// 查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
getElementById() //通过元素Id,唯一性

6. null和undefined的区别?
null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
undefined:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
null:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。


7. new操作符具体干了什么呢?
(1)创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
(2)属性和方法被加入到 this 引用的对象中。
(3)新创建的对象由 this 所引用,并且最后隐式的返回 this 。

8. JSON 的了解?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。
格式:采用键值对,例如:{'age':'12', 'name':'back'}

9. call() 和 apply() 的区别和作用?
apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组。如果上下文是null,则使用全局对象代替。
如:function.apply(this,[1,2,3]);
call()的第一个参数是上下文,后续是实例传入的参数序列。
如:function.call(this,1,2,3);

10. 如何获取UA?
function whatBrowser() {
document.Browser.Name.value=navigator.appName;
document.Browser.Version.value=navigator.appVersion;
document.Browser.Code.value=navigator.appCodeName;
document.Browser.Agent.value=navigator.userAgent;
}

1. HTTP状态码知道哪些?
100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功并且服务器创建了新的资源
202 Accepted 服务器已接受请求,但尚未处理
301 Moved Permanently 请求的网页已永久移动到新位置。
302 Found 临时性重定向。
303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。
304 Not Modified 自从上次请求后,请求的网页未修改过。
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
401 Unauthorized 请求未授权。
403 Forbidden 禁止访问。
404 Not Found 找不到如何与 URI 相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
 
2. 你有哪些性能优化的方法?
(1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
(2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存ajax请求结果,每次操作本地变量,不用请求,减少请求次数
(3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
(4) 当需要设置的样式很多时设置className而不是直接操作style。
(5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
(6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
(7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。

3. 什么叫优雅降级和渐进增强?
优雅降级:web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。
由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效。
渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥作用。

4. 哪些常见操作会造成内存泄漏?
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。
setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)。

5. 线程与进程的区别
一个程序至少有一个进程,一个进程至少有一个线程。
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

HTML
1、Doctype作用?严格模式与混杂模式如何区分?它们有何意义?
 
2、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
行内元素有: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> 

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

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

就像cookie一样,html5的离线存储也需要服务器环境。

使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。
HTML5引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。 应用程序缓存为应用带来三个优势:
离线浏览 – 用户可在应用离线时使用它们
速度 – 已缓存资源加载得更快
减少服务器负载 – 浏览器将只从服务器下载更新过或更改过的资源。

 

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

http://www.2cto.com/kf/201407/315340.html

当用户本地再次联网的时候,本地的离线存储资源需要检查是否需要更新,这个更新过程,也是通过manifest的更新来控制的,更新了manifest文件,浏览器会自动的重新下载新的manifest文件并在下一次刷新页面的时候进行资源文件的重新请求(第三次刷新替换本地缓存为最新缓存),而且这个请求是全局性的,也就是所有在manifest缓存列表中的文件都会被请求一次,而不是单独请求某个特定修改过的资源文件,因为manifest是不知道哪个文件被修改过了的。

对于全局更新的担心是不必要的,因为对于没有更新过的资源文件,请求依旧是304响应,只有真正更新过的资源文件才是200.

所以控制离线存储的更新,需要2个步骤,一是更新资源文件,二是更新manifest文件,特别的,更新manifest文件是不需要修改什么特定内容的,只要是这个文件随意一处被修改,那么浏览器就会感知,对于我们的资源文件通常名称是固定的,比如xxx.css,更新内容不会带有文件名更新的情况下,需要更新manifest文件怎么操作呢?一个比较好的方式是更新任意一处# 开头的注释即可,其目的只是告诉浏览器这个manifest文件被更新过。

 
5、iframe有那些缺点?
框架的优点
 
重载页面时不需要重载整个页面,只需要重载页面中的一个框架页(减少了数据的传输,加快了网页下载速度)
技术易于掌握,使用方便,使用者众多,可主要应用于不需搜索引擎来搜索的页面
方便制作导航栏 
 
框架的缺点(iframe的缺点与frame类似)
 
会产生很多页面,不容易管理
不容易打印(目前只能实现分框架页面的打印,不能实现对frameset的打印)
浏览器的后退按钮无效(只能针对实现当前光标所在页面的前进与后退,无法实现frameset整个页面的前进与后退)
代码复杂,无法被一些搜索引擎索引到(框架结构(帧结构)的不能为每个网页都设置一个标题(TITLE),更为糟糕的是,有些搜索引擎对框架结构的页面不能正确处理,会影响到搜索结果的排列名次)
多数小型的移动设备(PDA 手机)无法完全显示框架
多框架的页面会增加服务器的http请求
由于上面诸多缺点,因此不符合标准网页设计的理念,已经被标准网页设计抛弃,目前的html5已不再支持此标签 

 

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

HTML的输入框可以拥有自动完成的功能,当你往输入框输入内容的时候,浏览器会从你以前的同名输入框的历史记录中查找出类似的内容并列在输入框下面,这样就不用全部输入进去了,直接选择列表中的项目就可以了。
但有时候我们希望关闭输入框的自动完成功能,例如当用户输入内容的时候,我们希望使用AJAX技术从数据库搜索并列举而不是在用户的历史记录中搜索。
关闭输入框的自动完成功能有3种方法:
1、在IE的Internet选项菜单里的内容--自动完成里面设置
2、设置Form的autocomplete为"on"或者"off"来开启或者关闭自动完成功能
3、设置输入框的autocomplete为"on"或者"off"来开启或者关闭该输入框的自动完成功能

 

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

调用cookie、localStorage等本地存储方式

 

8、webSocket如何兼容低浏览器?(阿里)

在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API。WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看HTML5的WebSocket API:它可用于客户端、服务器端。而且有一个优秀的第三方API,名为Socket.IO。
WebSocket API最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。WebSocket并不限于以Ajax(或XHR)方式通信,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;XHR受到域的限制,而WebSocket允许跨域通信。
就目前而言,WebSocket是最好的Web通信解决方案了。但是IE从10才开始兼容它,对于目前大量IE8存在的市场,原生的WebSocket显然不太实用,我们需要低版本兼容的解决方案。于是我模拟WebSocket在浏览器上的行为,用AS3写了个兼容的版本。 
 
9、页面可见性(Page Visibility)API 可以有哪些用途?
 
 http://wenku.baidu.com/link?url=A4lhlYAwkU1EFfR4B6wI4kjtupwbwFPvK-CQgZcX3XAu6vEKibEw-6AfzXhGI9Ein3QlJo9lDszfTNQH9ak_YUfocyjWh9bjFfVLZD_V36m
 
10、如何在页面上实现一个圆形的可点击区域?
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        div{
            width: 50px;
            height: 50px;
            border-radius: 25px;
            cursor: pointer;
            background-color: red;
            text-align: center;
            line-height: 50px;
        }
    </style>
</head>
<body>
    <div>点击</div>
</body>
</html>
        button{
            width:50px;
            height: 50px;
            border-radius: 25px;
            background: red;
            outline: none;
            border:none;
            cursor: pointer;
        }
        input{
            width:50px;
            height: 50px;
            border-radius: 25px;
            background: red;
            outline: none;
            border:1px solid black;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div>点击</div>
    <button>点击</button>
    <input type="button" value="点击"></input>
</body>

 

11、实现不使用 border 画出1px高的线,在不同浏览器的Quirksmode和CSSCompat模式下都能保持同一效果。

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        #div1{height: 1px;background: black;}
    </style>
</head>
<body>
    <div id="div1"></div>
</body>

 

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

防止恶意注册和暴力破解 所谓恶意注册和暴力破解都是用软件进行的。 人工注册再快,也需要一项一项输入资料,速度很慢,对服务器基本没有影响。如果没有验证码可以使用软件注册的话,可以同时运行成千上万个线程,一次能注册成千上万个用户,让服务器的数据库很快变得臃肿不堪,运行效率下降。 如果一个无聊的人或竞争对手对某网站怀有敌意,那么这种方法很容易就能让对方瘫痪。

防止恶意破解密码、刷票、论坛灌水、刷页。

http://baike.baidu.com/item/%E9%AA%8C%E8%AF%81%E7%A0%81/31701

 

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

1)大标题<H1>属性和title网站标题属性。

H1不等于title。H1,大标题。一般出现在文章页面,作用如同一张报纸的大标题,使用读者在没看内容之前就大概了解本文的旨意,它是直接给用户看的。在SEO中,搜索引擎也非常重视H1,目的是告诉搜索引擎,这个地方的内容很重要,H1要求贴近文章内容,突出主题,言简意赅。title,面对的是搜索引擎和用户,其范围相对于H1来说要广,title中可以包含H1,在搜索引擎中tiele的权重要高于H1;一般来讲,H1做到突出主题目,title修饰主题关键字。
2)用在网页上,默认情况下它们起的均是加粗字体的作用,二者所不同的是,<b>标签是一个实体标签,它所包围的字符将被设为bold(粗体),而<strong>标签是一个逻辑标签,它的作用是加强字符的语气,一般来说,加强字符的语气是通过将字符变为bold(粗体)来实现的。
3)<i>标签: 显示斜体文本效果 <i>标签告诉浏览器将包含其中的文本以斜体字(italic)或者倾斜(oblique)字体显示;
<em>标签: <em>标签中的文本表示为强调的内容,对于所有浏览器的显示效果来说,是把这段文字用斜体来显示;
 
1、CSS选择符有哪些?哪些属性可以继承?

CSS 元素选择器

CSS 选择器分组:可以将任意多个选择器分组在一起,对此没有任何限制。

CSS 类选择器

CSS ID 选择器

CSS 属性选择器:属性选择器可以根据元素的属性及属性值来选择元素。还可以根据多个属性进行选择,只需将属性选择器链接在一起即可。

        所以可以根据自己设定的属性值来设置对应的样式

CSS 后代选择器:h1 em {color:red;}

CSS 子元素选择器:h1 > strong {color:red;}

CSS 相邻兄弟选择器:二者有相同父元素。h1 + p {margin-top:50px;},改变后一个兄弟的样式

CSS 伪类:锚伪类,:first-child 伪类,:lang 伪类

CSS 伪元素::first-letter,:first-line,:before,:after

伪类用于向某些选择器添加特殊的效果。

伪元素用于将特殊的效果添加到某些选择器。

伪类的效果可以通过添加一个实际的类来达到,而伪元素的效果则需要通过添加一个实际的元素才能达到

不可继承的:display、margin、border、padding、background、height、min-height、max-height、width、min-width、max-width、overflow、position、left、right、top、bottom、z-index、float、clear、table-layout、vertical-align、page-break-after、page-bread-before和unicode-bidi。

所有元素可继承:visibility和cursor。

内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、font-family、font-size、font-style、font-variant、font-weight、text-decoration、text-transform、direction。

终端块状元素可继承:text-indent和text-align。

列表元素可继承:list-style、list-style-type、list-style-position、list-style-image。

 

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

CSS优先级包含四个级别(标签内选择符,ID选择符,Class选择符,元素选择符)以及各级别出现的次数!
* 元素标签中定义的样式(Style属性),加1,0,0,0
* 每个ID选择符(如 #id),加0,1,0,0 * 每个Class选择符(如 .class)、每个属性选择符(如 [attribute=])、每个伪类(如 :hover)加0,0,1,0 * 每个元素选择符(如p)或伪元素选择符(如 :firstchild)等,加0,0,0,1 然后,将这四个数字分别累加,就得到每个CSS定义的优先级的值, 然后从左到右逐位比较大小,数字大的CSS样式的优先级就高。
例子:
css文件或<style>中如下定义:
1. h1 {color: red;}
/* 一个元素选择符,结果是0,0,0,1 */
2. body h1 {color: green;}
/* 两个元素选择符,结果是 0,0,0,2 */
3. h2.grape {color: purple;}
/* 一个元素选择符、一个Class选择符,结果是 0,0,1,1*/
4. li#answer {color: navy;}
/* 一个元素选择符,一个ID选择符,结果是0,1,0,1 */
元素的style属性中如下定义:
h1 {color: blue;}
/* 元素标签中定义,一个元素选择符,结果是1,0,0,1*/
如此以来,h1元素的颜色是蓝色。
注意:
1、!important声明的样式优先级最高,如果冲突再进行计算。
2、如果优先级相同,则选择最后出现的样式。
3、继承得到的样式的优先级最低。
1.  内联样式表的权值最高 10002.  ID 选择器的权值为 100
3.  Class 类选择器的权值为 10
4.  HTML 标签选择器的权值为 1

 

3、css3新增伪类有那些?

http://www.w3chtml.com/css3/selectors/pseudo-classes/

CSS3 伪类选择符 E:not() 匹配不含有s选择符的元素E。

CSS3 伪类选择符 E:root,匹配E元素在文档的根元素。
CSS3 伪类选择符 E:last-child 匹配父元素的最后一个子元素E。
CSS3 为例选择符 E:only-child 匹配父元素仅有的一个子元素E。
CSS3 伪类选择符 E:nth-child(n) 匹配父元素的第n个子元素E。
CSS3 伪类选择符 E:nth-last-child(n) 匹配父元素的倒数第n个子元素E。
。。。。。。
 
4、如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中?
//居中DIV
.wrap {
    background: yellow;
    width: 200px;
    height: 200px;
    display: flex; 
    align-items: center; 
    justify-content: center;
}
 
.center {
    background: green;
    width: 100px;
    height: 100px;
}

//居中浮动
.div1{
    width: 600px;
    height: 600px;
    background: yellow;
    display: flex;
    align-items: center;
    justify-content: center;
}
.div2{
    height: 200px;
    width: 200px;
    background: green;
    float: left;
}

//居中绝对定位
.div1{
    width: 600px;
    height: 600px;
    background: yellow;
    position: relative;

}
.div2{
    height: 200px;
    width: 200px;
    background: green;
    position: absolute;
    margin: auto;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
}

 

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

http://www.html5cn.org/article-9872-1.html

 

6、CSS3有哪些新特性?

http://www.runoob.com/css3/css3-intro.html

CSS3被拆分为"模块"。旧规范已拆分成小块,还增加了新的。

一些最重要CSS3模块如下:

  • 选择器
  • 盒模型
  • 背景和边框
  • 文字特效
  • 2D/3D转换
  • 动画
  • 多列布局
  • 用户界面
 
7、请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?
https://segmentfault.com/a/1190000000707526
https://www.w3.org/html/ig/zh/css-flex-1/

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

    <style type="text/css">
        div{
            width: 0;
            height: 0;
            border-right: 100px solid red;
            border-top: 100px solid transparent;
            border-bottom: 100px solid transparent;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>
均分原理
每个box(盒子)都有4条边(border ),而且边都是有宽度的
边可以设置的样式大概有三条 border-width (宽) border-color(颜色) border-style(虚线啊还是点啊还是实线)
而box的角会被两条边的样式作用,因为你不能说左上角只属于左边,不属于上边
所以沿对角线平分,每边各占一个45度的锐角
 9、一个满屏 品 字布局 如何设计?
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .d1{width: 80%;height: 200px;border: 2px solid black;margin:50px auto;}
        .d2,.d3{width: 45%;height: 200px;border: 2px solid black;}
        .d2{float: left;margin-left: 20px;}
        .d3{float: right;margin-right: 20px;}
    </style>
</head>
<body>
    <div class="d1"></div>
    <div class="d2"></div>
    <div class="d3"></div>
</body>

10、常见兼容性问题?

http://www.w3cfuns.com/notes/18090/961a36d50f2efa676061b5a02c374f75.html

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

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

 

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

中间出现间距的原因:<li>标签和<li>标签之间有空格引起;

方式1:第一个<li>标签和第二个<li>标签直接注释掉或者紧挨着没有空格 :<li><a href="#">公告</a></li><!--   --><li><a href="#">规则</a></li>  

方式2:li选择器中加入 float: left; 让li变成浮动,让各个<li>标签紧挨着排列。同时还可以看到 float具有inline元素特性。

方式3:设置ul标签的属性 font-size = 0,再重新设置li标签的 font-size 。

 

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

 

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

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

 

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

http://www.caopeng.net/2011/02/what-is-the-css-containing-block-containing-block/
包含块(Containing Block)是视觉格式化模型的一个重要概念,它与框模型类似,也可以理解为一个矩形,而这个矩形的作用是为它里面包含的元素提供一个参考,元素的尺寸和位置的计算往往是由该元素所在的包含块决定的。
包含块简单说就是定位参考框,或者定位坐标参考系,元素一旦定义了定位显示(相对、绝对、固定)都具有包含块性质,它所包含的定位元素都将以该包含块为坐标系进行定位和调整。
 

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

http://www.tuicool.com/articles/aERrYr
其实 visibility 可以有第三种值,就是 collapse 。当一个元素的 visibility 属性被设置成 collapse 值后,对于一般的元素,它的表现跟 hidden 是一样的。但例外的是,如果这个元素是table相关的元素,例如table行,table group,table列,table column group,它的表现却跟 display: none 一样,也就是说,它们占用的空间也会释放。
在谷歌浏览器里,使用 collapse 值和使用 hidden 值没有什么区别。 (See this bug report and comments )
在火狐浏览器、Opera和IE11里,使用 collapse 值的效果就如它的字面意思:table的行会消失,它的下面一行会补充它的位置。
 
16、position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

http://www.cnblogs.com/jackyWHJ/p/3756087.html

 

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

 

 

 

 

 

 

 

posted @ 2016-10-16 16:45  chenxj  阅读(378)  评论(0)    收藏  举报