史上前端面试题(HTML)

1WEB标准以及W3C标准是什么?

标签闭合、标签小写、不乱嵌套、使用外链css和js、结构行为表现的分离。

2.xhtml和html有什么区别?

一个是功能上的差别
主要是XHTML可兼容各大浏览器、手机以及PDA,并且浏览器也能快速正确地编译网页。

另外是书写习惯的差别。
XHTML 元素必须被正确地嵌套,闭合,区分大小写,文档必须拥有根元素

4行内元素有哪些?块级元素有哪些? 空(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>

扫描二维码关注公众号,回复: 3402520 查看本文章

行内元素不可以设置宽高,不独占一行;

块级元素可以设置宽高,独占一行。

5link 和@import 的区别是?

link属于XHTML标签,而@import是CSS提供的;

页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;

import只在IE5以上才能识别,而link是XHTML标签,无兼容问题;

link方式的样式的权重 高于@import的权重。

6浏览器的内核分别是什么?

IE浏览器的内核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera内核原为Presto,现为Blink。

7常见兼容性问题?

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

浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一,,但是全局效率很低,一般是如下这样解决:

body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{

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已经独立识别。
8.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; 解决.
超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}

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

  • HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务、画布、强后台相关技术等功能的增加。他的新的定义为:一套新的javascriptAPI和若干小的对html结构的改动

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。

***新的技术***

canvas,svg,webworker, websocket, Geolocation......

11.HTML5的离线储存?

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

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

(写)描述一段语义的html代码
(HTML5中新增加的很多标签(如:<article>、<nav>、<header>和<footer>等)就是基于语义化设计原则)

< div id="header">

    < h1>标题< /h1>

    < h2>专注Web前端技术< /h2>

 < /div>

  • HTML5的离线存储怎么使用?能否解释一下工作原理?

在用户没有连接英特网时,可以正常访问站点和应用;在用户连接英特网时,更新用户机器上的缓存文件。

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

使用方法:

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

(2) 在 cache.manifest 文件里编写离线存储资源;

   CACHE MANIFEST

   #v0.11

   CACHE:

     js/app.js

     css/style.css

   NETWORK:

     resource/logo.png

   FALLBACK:

     / /offline.html

(3) 在离线状态时,操作 window.applicationCache 进行需求实现;

13.请描述一下 cookies,sessionStorage 和 localStorage 的区别?

cookie在浏览器和服务器间来回传递。

sessionStorage和localStorage不会 sessionStorage和localStorage的存储空间更大;

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

sessionStorage和localStorage各自独立的存储空间;

15.webSocket如何兼容低浏览器?(阿里)

Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR

16说说你对语义化的理解?

1,去掉或者丢失样式的时候能够让页面呈现出清晰的结构

2,有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;

3,方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;

4,便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。

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

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

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

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

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

18你知道多少种Doctype文档类型?

 该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。

 HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。

 XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。

Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks

 (包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。

19.HTMLXHTML——二者有什么区别

区别:

1.所有的标记都必须要有一个相应的结束标记

2.所有标签的元素和属性的名字都必须使用小写

3.所有的XML标记都必须合理嵌套

4.所有的属性必须用引号""括起来

5.把所有<和&特殊符号用编码表示

6.给所有属性赋一个值

7.不要在注释内容中使“--”

8.图片必须有说明文字

20.常见兼容性问题?

* png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.也可以引用一段脚本处理.

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

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

* 浮动ie产生的双倍距离(IE6双边距问题:在IE6下,如果对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会加倍。)

  #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下,event对象有x,y属性,但是没有pageX,pageY属性;

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

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

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

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

* 超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:

L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}

* 怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯。现在可以使用[html5](http://www.w3.org/TR/html5/single-page.html)推荐的写法:`<doctype html>`

* 上下margin重合问题

ie和ff都存在,相邻的两个div的margin-left和margin-right不会重合,但是margin-top和margin-bottom却会发生重合。

解决方法,养成良好的代码编写习惯,同时采用margin-top或者同时采用margin-bottom。

* ie6对png图片格式支持不好(引用一段脚本处理)

21解释下浮动和它的工作原理?清除浮动的技巧

浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。

1.使用空标签清除浮动。

   这种方法是在所有浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增加了无意义标签。

2.使用overflow。

   给包含浮动元素的父标签添加css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。

3.使用after伪对象清除浮动。

   该方法只适用于非IE浏览器。具体写法可参照以下示例。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置 height:0,否则该元素会比实际高出若干像素;

22浮动元素引起的问题和解决办法?

浮动元素引起的问题:

(1)父元素的高度无法被撑开,影响与父元素同级的元素

(2)与浮动元素同级的非浮动元素会跟随其后

(3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构

解决方法:
使用CSS中的clear:both;属性来清除元素的浮动可解决2、3问题,对于问题1,添加如下样式,给父元素添加clearfix样式:

.clearfix:after{content: ".";display: block;height: 0;clear: both;visibility: hidden;}

.clearfix{display: inline-block;} /* for IE/Mac */

23清除浮动的几种方法:

1,额外标签法,<div style="clear:both;"></div>(缺点:不过这个办法会增加额外的标签使HTML结构看起来不够简洁。)

2,使用after伪类

#parent:after{

    content:".";

    height:0;

    visibility:hidden;

    display:block;

    clear:both;

    }

3,浮动外部元素

4,设置`overflow`为`hidden`或者auto

24IE 8以下版本的浏览器中的盒模型有什么不同

IE8以下浏览器的盒模型中定义的元素的宽高不包括内边距和边框

27.你有哪些性能优化的方法?

  (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) 图片预加载,将样式表放在顶部,将脚本放在底部  加上时间戳。

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

100-199 用于指定客户端应相应的某些动作。

200-299 用于表示请求成功。

300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。

400-499 用于指出客户端的错误。400    1、语义有误,当前请求无法被服务器理解。401   当前请求需要用户验证 403  服务器已经理解请求,但是拒绝执行它。

500-599 用于支持服务器错误。 503 – 服务不可用

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 服务器端暂时无法处理请求(可能是过载或维护)。

http状态码是表示服务器对请求的响应状态,主要分为以下几个部分

1**:这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束

2**:表示请求成功,

3**:表示重定向

4**:表示客户端错误

5**:表示服务器端错误

100(continue),客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收

200(OK),表示请求成功,请求所希望的响应头或数据体将随此响应返回。

202(Accepted),服务器已接受请求,但尚未处理。

204(No-Content),服务器成功处理了请求,但不需要返回任何实体内容

205(Reset-Content),服务器成功处理了请求,且没有返回任何内容。但是与204响应不同,返回此状态码的响应要求请求者重置文档视图。该响应主要是被用于接受用户输入后,立即重置表单,以便用户能够轻松地开始另一次输入。

206(Partial-Content),服务器已经成功处理了部分 GET 请求。

301(Moved-Permanently),永久性重定向

302(Moved-Temporarily),暂时性重定向

304(Not-Modified),浏览器端缓存的资源依然有效

400(Bad-Reques),请求有误,当前请求无法被服务器理解。

401(Unauthorized),当前请求需要用户验证。

403(Forbidden),服务器已经理解请求,但是拒绝执行它。

404(Not-Found),请求的资源没有被找到

500(Interval Server Error),服务器内部错误

502(Bad GateWay),网关出错

503(Service Unavailable),由于临时的服务器维护或者过载,服务器当前无法处理请求。

504(Gateway Timeout),作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

 

29.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

    分为4个步骤:

    (1),当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址。

    (2), 浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。

    (3),一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应。

    (4),此时,Web服务器提供资源服务,客户端开始下载资源。

请求返回后,便进入了我们关注的前端模块

简单来说,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,而javascript又可以根据DOM API操作DOM

30.平时如何管理你的项目?

先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等;

        编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);

        标注样式编写人,各模块都及时标注(标注关键样式调用的地方);

        页面进行标注(例如 页面 模块 开始和结束);

        CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);

        JS 分文件夹存放 命名以该JS功能为准的英文翻译。

        图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理

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

Node.js、Mongodb、npm、MVVM、MEAN、three.js,React 。

网站:w3cfuns,sf,hacknews,CSDN,慕课,博客园,InfoQ,w3cplus等

Doctype作用?标准模式与兼容模式各有什么区别
(1)、声明位于位于HTML文档中的第一行,处于 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。

(2)、标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

HTML5 为什么只需要写  
1.HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);

而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。

(web前端学习交流群:328058344 禁止闲聊,非喜勿进!) 
行内元素有哪些?块级元素有哪些? 空(void)元素有那些? 
首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。 
(1)行内元素有:a b span img input select strong(强调的语气) 
(2)块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p 
(3)常见的空元素: 
鲜为人知的是: 

页面导入样式时,使用link@import有什么区别? 
(1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS; 
(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载; 
(3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;

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

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

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

常见的浏览器内核有哪些? 
Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML] 
Gecko
内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey 
Presto
内核:Opera7及以上。 [Opera内核原为:Presto,现为:Blink;] 
Webkit
内核:Safari,Chrome等。 [ Chrome的:BlinkWebKit的分支)]

  • 如何区分HTML5: DOCTYPE声明\新增的结构元素\功能元素

如何区分HTML5 DOCTYPE声明\新增的结构元素\功能元素

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进行需求实现。

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

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

请描述一下 cookiessessionStorage localStorage 的区别?

cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。 
cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。 
sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。

存储大小: 
cookie数据大小不能超过4k。 
sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

有期时间: 
localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据; 
sessionStorage 数据在当前浏览器窗口关闭后自动删除。 
cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

iframe有那些缺点? 
*iframe会阻塞主页面的Onload事件; 
*搜索引擎的检索程序无法解读这种页面,不利于SEO;

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

使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript 
动态给iframe添加src属性值,这样可以绕开以上两个问题。

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

<label for="Name">Number:</label>

<input type=“text“name="Name" id="Name"/>

<label>Date:<input type="text" name="B"/></label>

如何实现浏览器内多个标签页之间的通信? (阿里
WebSocket、SharedWorker; 
也可以调用localstorge、cookies等本地存储方式;

localstorge另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件, 
我们通过监听事件,控制它的值来进行页面信息通信; 
注意quirks:Safari 在无痕模式下设置localstorge值时会抛出 QuotaExceededError 的异常;

如何在页面上实现一个圆形的可点击区域? 
1、map+area或者svg 
2、border-radius 
3、纯js实现 需要求一个点在不在圆上简单算法、获取鼠标坐标等等

实现不使用 border 画出1px高的线,在不同浏览器的标准模式与怪异模式下都能保持一致的效果。 
<div style="height:1px;overflow:hidden;background:red"></div> 

titleh1的区别、bstrong的区别、iem的区别?

title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取也有很大的影响;

strong是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:会重读,而是展示强调内容。

i内容展示为斜体,em表示强调的文本;

Physical Style Elements – 自然样式标签 
b, i, u, s, pre 
Semantic Style Elements – 语义样式标签 
strong, em, ins, del, code 
应该准确使用语义样式标签, 但不能滥用, 如果不能确定时首选使用自然样式标签。

1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?

 IE: trident内核

 Firefox:gecko内核

 Safari:webkit内核

 Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核

 Chrome:Blink(基于webkit,Google与Opera Software共同开发)

2.每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗?

答案:<!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html> 标签之前。此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。(重点:告诉浏览器按照何种规范解析页面

3.Quirks模式是什么?它和Standards模式有什么区别

答案:

从IE6开始,引入了Standards模式,标准模式中,浏览器尝试给符合标准的文档在规范上的正确处理达到在指定浏览器中的程度。

在IE6之前CSS还不够成熟,所以IE5等之前的浏览器对CSS的支持很差, IE6将对CSS提供更好的支持,然而这时的问题就来了,因为有很多页面是基于旧的布局方式写的,而如果IE6 支持CSS则将令这些页面显示不正常,如何在即保证不破坏现有页面,又提供新的渲染机制呢?

在写程序时我们也会经常遇到这样的问题,如何保证原来的接口不变,又提供更强大的功能,尤其是新功能不兼容旧功能时。遇到这种问题时的一个常见做法是增加参数和分支,即当某个参数为真时,我们就使用新功能,而如果这个参数 不为真时,就使用旧功能,这样就能不破坏原有的程序,又提供新功能。IE6也是类似这样做的,它将DTD当成了这个“参数”,因为以前的页面大家都不会去写DTD,所以IE6就假定 如果写了DTD,就意味着这个页面将采用对CSS支持更好的布局,而如果没有,则采用兼容之前的布局方式。这就是Quirks模式(怪癖模式,诡异模式,怪异模式)。

区别:

总体会有布局、样式解析和脚本执行三个方面的区别。

盒模型:在W3C标准中,如果设置一个元素的宽度和高度,指的是元素内容的宽度和高度,而在Quirks 模式下,IE的宽度和高度还包含了padding和border。

设置行内元素的高宽:在Standards模式下,给<span>等行内元素设置wdith和height都不会生效,而在quirks模式下,则会生效。

设置百分比的高度:在standards模式下,一个元素的高度是由其包含的内容来决定的,如果父元素没有设置百分比的高度,子元素设置一个百分比的高度是无效的用margin:0 auto设置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下却会失效。

(还有很多,答出什么不重要,关键是看他答出的这些是不是自己经验遇到的,还是说都是看文章看的,甚至完全不知道。)

4.div+css的布局较table布局有什么优点?

改版的时候更方便 只要改css文件。

页面加载速度更快、结构化清晰、页面显示简洁。

表现与结构相分离。

易于优化(seo)搜索引擎更友好,排名更容易靠前。

5.aimgalttitle有何异同?bstrongem的异同?

答案:

a:

alt(alt text):为不能显示图像、窗体或applets的用户代理(UA),alt属性用来指定替换文字。替换文字的语言由lang属性指定。(在IE浏览器下会在没有title时把alt当成 tool tip显示)

title(tool tip):该属性为设置该属性的元素提供建议性的信息。

b:

strong:粗体强调标签,强调,表示内容的重要性

em:斜体强调标签,更强烈强调,表示内容的强调点

6.你能描述一下渐进增强和优雅降级之间的不同吗?

渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。

“优雅降级”观点

“优雅降级”观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段,并把测试对象限定为主流浏览器(如 IE、Mozilla 等)的前一个版本。

在这种设计范例下,旧版的浏览器被认为仅能提供“简陋却无妨 (poor, but passable)” 的浏览体验。你可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较大的错误之外,其它的差异将被直接忽略。

“渐进增强”观点

“渐进增强”观点则认为应关注于内容本身。

内容是我们建立网站的诱因。有的网站展示它,有的则收集它,有的寻求,有的操作,还有的网站甚至会包含以上的种种,但相同点是它们全都涉及到内容。这使得“渐进增强”成为一种更为合理的设计范例。这也是它立即被 Yahoo! 所采纳并用以构建其“分级式浏览器支持 (Graded Browser Support)”策略的原因所在。

那么问题来了。现在产品经理看到IE6,7,8网页效果相对高版本现代浏览器少了很多圆角,阴影(CSS3),要求兼容(使用图片背景,放弃CSS3),你会如何说服他?

(自由发挥)

7.为什么利用多个域名来存储网站资源会更有效?

CDN缓存更方便

突破浏览器并发限制

节约cookie带宽

节约主域名的连接数,优化页面响应速度

防止不必要的安全问题

8.请谈一下你对网页标准和标准制定机构重要性的理解。

(无标准答案)网页标准和标准制定机构都是为了能让web发展的更‘健康’,开发者遵循统一的标准,降低开发难度,开发成本,SEO也会更好做,也不会因为滥用代码导致各种BUG、安全问题,最终提高网站易用性。

9.请描述一下cookiessessionStoragelocalStorage的区别?

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

web storage和cookie的区别

Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。

除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。

10.简述一下srchref的区别。

答案:

src用于替换当前元素,href用于在当前文档和引用资源之间确立联系。

src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。

<script src =”js.js”></script>

当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。

href是Hypertext Reference的缩写,指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,如果我们在文档中添加

<link href=”common.css” rel=”stylesheet”/>

那么浏览器会识别该文档为css文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么建议使用link方式来加载css,而不是使用@import方式。

11.知道的网页制作会用到的图片格式有哪些?

答案:

png-8,png-24,jpeg,gif,svg。

但是上面的那些都不是面试官想要的最后答案。面试官希望听到是Webp。(是否有关注新技术,新鲜事物)

科普一下Webp:WebP格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。Facebook Ebay等知名网站已经开始测试并使用WebP格式。

在质量相同的情况下,WebP格式图像的体积要比JPEG格式图像小40%

12.知道什么是微格式吗?谈谈理解。在前端构建中应该考虑微格式吗?

答案:

微格式(Microformats)是一种让机器可读的语义化XHTML词汇的集合,是结构化数据的开放标准。是为特殊应用而制定的特殊格式。

优点:将智能数据添加到网页上,让网站内容在搜索引擎结果界面可以显示额外的提示。(应用范例:豆瓣,有兴趣自行google)

13.css/js代码上线之后开发人员经常会优化性能,从用户刷新网页开始,一次js请求一般情况下有哪些地方会有缓存处理?

答案:dns缓存,cdn缓存,浏览器缓存,服务器缓存。

14.一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更好的体验。

图片懒加载,在页面上的未可视区域可以添加一个滚动条事件,判断图片位置与浏览器顶端的距离与页面的距离,如果前者小于后者,优先加载。

如果为幻灯片、相册等,可以使用图片预加载技术,将当前展示图片的前一张和后一张优先下载。

如果图片为css图片,可以使用CSSsprite,SVGsprite,Iconfont、Base64等技术。

如果图片过大,可以使用特殊编码的图片,加载时会先加载一张压缩的特别厉害的缩略图,以提高用户体验。

如果图片展示区域小于图片的真实大小,则因在服务器端根据业务需要先行进行图片压缩,图片压缩后大小与展示一致。

15.你如何理解HTML结构的语义化? 

去掉或样式丢失的时候能让页面呈现清晰的结构:

html本身是没有表现的,我们看到例如<h1>是粗体,字体大小2em,加粗;<strong>是加粗的,不要认为这是html的表现,这些其实html默认的css样式在起作用,所以去掉或样式丢失的时候能让页面呈现清晰的结构不是语义化的HTML结构的优点,但是浏览器都有有默认样式,默认样式的目的也是为了更好的表达html的语义,可以说浏览器的默认样式和语义化的HTML结构是不可分割的。

屏幕阅读器(如果访客有视障)会完全根据你的标记来“读”你的网页.

例如,如果你使用的含语义的标记,屏幕阅读器就会“逐个拼出”你的单词,而不是试着去对它完整发音.

PDA、手机等设备可能无法像普通电脑的浏览器一样来渲染网页(通常是因为这些设备对CSS的支持较弱)

使用语义标记可以确保这些设备以一种有意义的方式来渲染网页.理想情况下,观看设备的任务是符合设备本身的条件来渲染网页.

语义标记为设备提供了所需的相关信息,就省去了你自己去考虑所有可能的显示情况(包括现有的或者将来新的设备).例如,一部手机可以选择使一段标记了标题的文字以粗体显示.而掌上电脑可能会以比较大的字体来显示.无论哪种方式一旦你对文本标记为标题,您就可以确信读取设备将根据其自身的条件来合适地显示页面.

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

过去你可能还没有考虑搜索引擎的爬虫也是网站的“访客”,但现在它们他们实际上是极其宝贵的用户.没有他们的话,搜索引擎将无法索引你的网站,然后一般用户将很难过来访问.

你的页面是否对爬虫容易理解非常重要,因为爬虫很大程度上会忽略用于表现的标记,而只注重语义标记.

因此,如果页面文件的标题被标记,而不是,那么这个页面在搜索结果的位置可能会比较靠后.除了提升易用性外,语义标记有利于正确使用CSS和JavaScript,因为其本身提供了许多“钩钩”来应用页面的样式与行为.

SEO主要还是靠你网站的内容和外部链接的。

便于团队开发和维护

W3C给我们定了一个很好的标准,在团队中大家都遵循这个标准,可以减少很多差异化的东西,方便开发和维护,提高开发效率,甚至实现模块化开发

16.谈谈以前端角度出发做好SEO需要考虑什么?

了解搜索引擎如何抓取网页和如何索引网页

你需要知道一些搜索引擎的基本工作原理,各个搜索引擎之间的区别,搜索机器人(SE robot 或叫 web crawler)如何进行工作,搜索引擎如何对搜索结果进行排序等等。

Meta标签优化

主要包括主题(Title),网站描述(Description),和关键词(Keywords)。还有一些其它的隐藏文字比如Author(作者),Category(目录),Language(编码语种)等。

如何选取关键词并在网页中放置关键词

搜索就得用关键词。关键词分析和选择是SEO最重要的工作之一。首先要给网站确定主关键词(一般在5个上下),然后针对这些关键词进行优化,包括关键词密度(Density),相关度(Relavancy),突出性(Prominency)等等。

了解主要的搜索引擎

虽然搜索引擎有很多,但是对网站流量起决定作用的就那么几个。比如英文的主要有Google,Yahoo,Bing等;中文的有百度,搜狗,有道等。不同的搜索引擎对页面的抓取和索引、排序的规则都不一样。还要了解各搜索门户和搜索引擎之间的关系,比如AOL网页搜索用的是Google的搜索技术,MSN用的是Bing的技术。

主要的互联网目录

Open Directory自身不是搜索引擎,而是一个大型的网站目录,他和搜索引擎的主要区别是网站内容的收集方式不同。目录是人工编辑的,主要收录网站主页;搜索引擎是自动收集的,除了主页外还抓取大量的内容页面。

按点击付费的搜索引擎

搜索引擎也需要生存,随着互联网商务的越来越成熟,收费的搜索引擎也开始大行其道。最典型的有Overture和百度,当然也包括Google的广告项目Google Adwords。越来越多的人通过搜索引擎的点击广告来定位商业网站,这里面也大有优化和排名的学问,你得学会用最少的广告投入获得最多的点击。

搜索引擎登录

网站做完了以后,别躺在那里等着客人从天而降。要让别人找到你,最简单的办法就是将网站提交(submit)到搜索引擎。如果你的是商业网站,主要的搜索引擎和目录都会要求你付费来获得收录(比如Yahoo要299美元),但是好消息是(至少到目前为止)最大的搜索引擎Google目前还是免费,而且它主宰着60%以上的搜索市场。

  • 链接交换和链接广泛度(Link Popularity)

网页内容都是以超文本(Hypertext)的方式来互相链接的,网站之间也是如此。除了搜索引擎以外,人们也每天通过不同网站之间的链接来Surfing(“冲浪”)。其它网站到你的网站的链接越多,你也就会获得更多的访问量。更重要的是,你的网站的外部链接数越多,会被搜索引擎认为它的重要性越大,从而给你更高的排名。

合理的标签使用

1.有哪项方式可以对一个DOM设置它的CSS样式? 

外部样式表,引入一个外部css文件

内部样式表,将css代码放在 <head> 标签内部

内联样式,将css样式直接定义在 HTML 元素内部

2.CSS都有哪些选择器?

派生选择器(用HTML标签申明)

id选择器(用DOM的ID申明)

类选择器(用一个样式类名申明)

属性选择器(用DOM的属性申明,属于CSS2,IE6不支持,不常用,不知道就算了)

除了前3种基本选择器,还有一些扩展选择器,包括

后代选择器(利用空格间隔,比如div .a{  })

群组选择器(利用逗号间隔,比如p,div,#a{  })

那么问题来了,CSS选择器的优先级是怎么样定义的?

基本原则:

一般而言,选择器越特殊,它的优先级越高。也就是选择器指向的越准确,它的优先级就越高。

复杂的计算方法:

用1表示派生选择器的优先级

用10表示类选择器的优先级

用100标示ID选择器的优先级

 

div.test1 .span var 优先级 1+10 +10 +1

span#xxx .songs li 优先级1+100 + 10 + 1

#xxx li 优先级 100 +1

那么问题来了,看下列代码,<p>标签内的文字是什么颜色的?

 

<style>

.classA{ color:blue;}

.classB{ color:red;}

</style>

<body>

<p class='classB classA'> 123 </p>

</body>

答案:red。与样式定义在文件中的先后顺序有关,即是后面的覆盖前面的,与在<p class=’classB classA’>中的先后关系无关。

3.CSS中可以通过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内?

最基本的:

设置display属性为none,或者设置visibility属性为hidden

技巧性:

设置宽高为0,设置透明度为0,设置z-index位置在-1000

4.超链接访问过后hover样式就不出现的问题是什么?如何解决?

答案:被点击访问过的超链接样式不在具有hover和active了,解决方法是改变CSS属性的排列顺序: L-V-H-A(link,visited,hover,active)

5.什么是Css Hackie6,7,8hack分别是什么?

答案:针对不同的浏览器写不同的CSS code的过程,就是CSS hack。

示例如下:

 

3

 

4

 

5

 

6

 

7

 

8

 

9

 

10

 

11

 

12

 

#test       {  

 

        width:300px;  

        height:300px;  

        background-color:blue;     

/*firefox*/

        background-color:red\9;     

/*all ie*/

        background-color:yellow;   

/*ie8*/

        +background-color:pink;       

/*ie7*/

        _background-color:orange;      

/*ie6*/     } 

        :root

#test { background-color:purple\9; }  /*ie9*/

    @media all and (min-width:0px){  #test {background-color:black;} }  /*opera*/

    @media screen and (-webkit-min-device-pixel-ratio:0){  #test {background-color:gray;} }       /*chrome and safari*/

6.请用Css写一个简单的幻灯片效果页面

答案:知道是要用css3。使用animation动画实现一个简单的幻灯片效果。

/**HTML**/

        div.ani

        /**css**/

        .ani{

          width:480px;

          height:320px;

          margin:50px  auto;

 

          overflow:hidden;

          box-shadow:0 0  5px  rgba(0,0,0,1);

          background-size: cover;

          background-position:center;

          -webkit-animation-name:"loops";

          -webkit-animation-duration:20s;

          -webkit-animation-iteration-count: infinite;

        }

        @-webkit-keyframes:"loops"  {

            0%

{

 background:url(http://d.hiphotos.baidu.com/image/w%3D400/sign=c01e6adca964034f0fcdc3069fc27980/e824b899a9014c08e5e38ca4087b02087af4f4d3.jpg)

no-repeat;    

} 25%

{

background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=edee1572e9f81a4c2632edc9e72b6029/30adcbef76094b364d72bceba1cc7cd98c109dd0.jpg)

no-repeat;

            }

            50%

{

                background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=937dace2552c11dfded1be2353266255/d8f9d72a6059252d258e7605369b033b5bb5b912.jpg)

no-repeat;

            }

            75%

{

           background:url(http://g.hiphotos.baidu.com/image/w%3D400/sign=7d37500b8544ebf86d71653fe9f9d736/0df431adcbef76095d61f0972cdda3cc7cd99e4b.jpg)

no-repeat;

            }

            100%

{

           background:url(http://c.hiphotos.baidu.com/image/w%3D400/sign=cfb239ceb0fb43161a1f7b7a10a54642/3b87e950352ac65ce2e73f76f9f2b21192138ad1.jpg)

no-repeat;

            }

        }

 

7.行内元素和块级元素的具体区别是什么?行内元素的paddingmargin可设置吗?

块级元素(block)特性:

总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示;

宽度(width)、高度(height)、内边距(padding)和外边距(margin)都可控制;

内联元素(inline)特性:

和相邻的内联元素在同一行;

宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变(也就是padding和margin的left和right是可以设置的),就是里面文字或图片的大小。

那么问题来了,浏览器还有默认的天生inline-block元素(拥有内在尺寸,可设置高宽,但不会自动换行),有哪些?

答案:<input> 、<img> 、<button> 、<texterea> 、<label>。

8.什么是外边距重叠?重叠的结果是什么?

答案:

外边距重叠就是margin-collapse。

在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠,并且因而所结合成的外边距称为折叠外边距。

折叠结果遵循下列计算规则:

两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。

两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。

两个外边距一正一负时,折叠结果是两者的相加的和。

9.rgba()和opacity的透明效果有什么不同?

答案:

rgba()和opacity都能实现透明效果,但最大的不同是opacity作用于元素,以及元素内的所有内容的透明度,

而rgba()只作用于元素的颜色或其背景色。(设置rgba透明的元素的子元素不会继承透明效果!)

10.css中可以让文字在垂直和水平方向上重叠的两个属性是什么?

答案:

垂直方向:line-height

水平方向:letter-spacing

那么问题来了,关于letter-spacing的妙用知道有哪些么?

答案:可以用于消除inline-block元素间的换行符空格间隙问题。

11.如何垂直居中一个浮动元素?

 

8

 

// 方法一:已知元素的高宽

#div1{

    background-color:#6699FF;

    width:200px;

    height:200px;

    position:

absolute;        //父元素需要相对定位

   top:

50%;

    left:

50%;

    margin-top:-100px

;   //二分之一的height,widt

    margin-left:

-100px;

    }

//方法二:未知元素的高宽

  #div1{

    width:200px;

    height:200px;

    background-color:#6699FF;

    margin:auto;

    position:absolute;        //父元素需要相对定位

    left:0;

    top:0;

    right:0;

    bottom:0;

    }

那么问题来了,如何垂直居中一个<img>?(用更简便的方法。

 

#container     //<img>的容器设置如下

{

    display:table-cell;

 

    text-align:center;

    vertical-align:middle;

}

12.px和em的区别。

px和em都是长度单位,区别是,px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。

浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。

13.描述一个”reset”的CSS文件并如何使用它。知道normalize.css吗?你了解他们的不同之处?

重置样式非常多,凡是一个前端开发人员肯定有一个常用的重置CSS文件并知道如何使用它们。他们是盲目的在做还是知道为什么这么做呢?原因是不同的浏览器对一些元素有不同的默认样式,如果你不处理,在不同的浏览器下会存在必要的风险,或者更有戏剧性的性发生。

你可能会用Normalize来代替你的重置样式文件。它没有重置所有的样式风格,但仅提供了一套合理的默认样式值。既能让众多浏览器达到一致和合理,但又不扰乱其他的东西(如粗体的标题)。

在这一方面,无法做每一个复位重置。它也确实有些超过一个重置,它处理了你永远都不用考虑的怪癖,像HTML的audio元素不一致或line-height不一致。

14.Sass、LESS是什么?大家为什么要使用他们?

他们是CSS预处理器。他是CSS上的一种抽象层。他们是一种特殊的语法/语言编译成CSS。

例如Less是一种动态样式语言. 将CSS赋予了动态语言的特性,如变量,继承,运算, 函数. LESS 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可一在服务端运行 (借助 Node.js)。

为什么要使用它们?

结构清晰,便于扩展。

可以方便地屏蔽浏览器私有语法差异。这个不用多说,封装对浏览器语法差异的重复处理,减少无意义的机械劳动。

可以轻松实现多重继承。

完全兼容 CSS 代码,可以方便地应用到老项目中。LESS 只是在 CSS 语法上做了扩展,所以老的 CSS 代码也可以与 LESS 代码一同编译。

15.display:nonevisibility:hidden的区别是什么?

display : 隐藏对应的元素但不挤占该元素原来的空间。

visibility: 隐藏对应的元素并且挤占该元素原来的空间。

即是,使用CSS display:none属性后,HTML元素(对象)的宽度、高度等各种属性值都将“丢失”;而使用visibility:hidden属性后,HTML元素(对象)仅仅是在视觉上看不见(完全透明),而它所占据的空间位置仍然存在。

 

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

(1)<!DOCTYPE>声明位于HTML文档中的第一行,处于<html>标签之前,用于告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。

(2)标准模式的排版和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

 (3)如果HTML文档包含形式完整的DOCTYPE,那么他一般以标准模式呈现。对于HTML4.01文档,包含严格DTD的DOCTYPE常常导致页面已标准模式呈现。DOCTYPE不存在或者格式不正确会导致文档已混杂模式呈现。

 

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

(1)HTML5不基于SGML,因此不需要对DTD进行引用,但是需要DOCTYPE来规范浏览器的行为(让浏览器按照它们应该的方式来运行);

(2)HTML4.01基于SGML,所以需要对DTD进行引用,才能让浏览器知道该文档所使用的文档类型。

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

***行内元素***:

a - 锚点,em - 强调,strong - 粗体强调,span - 定义文本内区块,i - 斜体,img - 图片,b - 粗体,label - 表格标签,select - 项目选择,textarea - 多行文本输入框,sub - 下标,

sup - 上标,q - 短引用;

***块元素***:

div - 常用块级,dl - 定义列表,dt,dd,ul- 非排序列表,li,ol-排序表单,p-段落,h1,h2,h3,h4,h5-标题,table-表格,fieldset - form控制组,form - 表单,

***空元素***:

br-换行,hr-水平分割线;

 

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

浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“渲染引擎”,不过我们一般习惯将之称为“浏览器内核”。负责对网页语法的解释(如标准通用标记语言下的一个应用HTML、JavaScript)并渲染(显示)网页。 所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果的原因。

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

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

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

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

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

EdgeHTML内核:Microsoft Edge。  [此内核其实是从MSHTML fork而来,删掉了几乎所有的IE私有特性]

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

web Storage有两种形式:LocalStorage(本地存储)和sessionStorage(会话存储)。这两种方式都允许开发者使用js设置的键值对进行操作,在在重新加载不同的页面的时候读出它们。这一点与cookie类似。

(1)与cookie不同的是:Web Storage数据完全存储在客户端,不需要通过浏览器的请求将数据传给服务器,因此x相比cookie来说能够存储更多的数据,大概5M左右。

(2)LocalStorage和sessionStorage功能上是一样的,但是存储持久时间不一样。

LocalStorage:浏览器关闭了数据仍然可以保存下来,并可用于所有同源(相同的域名、协议和端口)窗口(或标签页);

sessionStorage:数据存储在窗口对象中,窗口关闭后对应的窗口对象消失,存储的数据也会丢失。

注意:sessionStorage 都可以用localStorage 来代替,但需要记住的是,在窗口或者标签页关闭时,使用sessionStorage 存储的数据会丢失。

(3)使用 local storage和session storage主要通过在js中操作这两个对象来实现,分别为window.localStorage和window.sessionStorage. 这两个对象均是Storage类的两个实例,自然也具有Storage类的属性和方法。

  •  

iframe有那些缺点?

(1)iframe会阻塞主页面的Onload事件;

(2)搜索引擎的检索程序无法解读这种页面,不利于SEO;

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

(4)使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好通过JavaScript动态给iframe添加src属性值,这样可以绕开以上两个问题。

 

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

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

<label for="Name">Number:</label>

<input type="text" name="Name" id="Name" />

<label>Date:<input type="text" name="B" /></label>

 

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

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

 

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

<div style="height:1px;overflow:hidden;background:#ccc"></div>

一、html+css部分、

(1)css盒模型,可能会要求手写一个布局,这个布局基本上用到的css是margin的负值,boxing-sizing:border-box,布局尽量往这方面想。浏览器布局的基本元素是盒,在w3c的标准模式下,width=width,但是在怪异模式下,width=border*2+padding*2+width;其中后代元素的width:100%;参照的是右边的那个width,

(2)html5的新特性

1、标签语义化,比如header,footer,nav,aside,article,section等,新增了很多表单元素,入email,url等,除去了center等样式标签,还有除去了有性能问题的frame,frameset等标签

2、音视频元素,video,audio的增加使得我们不需要在依赖外部的插件就可以往网页中加入音视频元素。

3、新增很多api,比如获取用户地理位置的window.navigator.geoloaction,

4、websocket

websocket是一种协议,可以让我们建立客户端到服务器端的全双工通信,这就意味着服务器端可以主动推送数据到客户端,

5、webstorage,webstorage是本地存储,存储在客户端,包括localeStorage和sessionStorage,localeStorage是持久化存储在客户端,只要用户不主动删除,就不会消失,sessionStorage也是存储在客户端,但是他的存在时间是一个回话,一旦浏览器的关于该回话的页面关闭了,sessionStorage就消失了,

6、缓存

html5允许我们自己控制哪些文件需要缓存,哪些不需要,具体的做法如下:

 

1、首先给html添加manifest属性,并赋值为cache.manifest

2、cache.manifest的内容为:

         CACHE MANIFEST

         #v1.2

         CACHE :           //表示需要缓存的文件

           a.js

           b.js

       NETWORK:    //表示只在用户在线的时候才需要的文件,不会缓存

         c.js

       FALLBACK

       /        /index.html     //表示如果找不到第一个资源就用第二个资源代替

7、web worker,web worker是运行在浏览器后台的js程序,他不影响主程序的运行,是另开的一个js线程,可以用这个线程执行复杂的数据操作,然后把操作结果通过postMessage传递给主线程,这样在进行复杂且耗时的操作时就不会阻塞主线程了。

(3)对html5的语义话的理解

html5的语义化指的是用正确的标签包含正确的内容,比如nav标签,里面就应该包含导航条的内容,而不是用做其他的用途,标签语义化的好处就是结构良好,便于阅读,方便威化,也有利于爬虫的查找,提高搜索率。

  •  
  • (4)cookie,sessionStorage,localeStorage的区别

cookie是存储在浏览器端,并且随浏览器的请求一起发送到服务器端的,它有一定的过期时间,到了过期时间自动会消失。sessionStorage和localeStorage也是存储在客户端的,同属于web Storage,比cookie的存储大小要大有8m,cookie只有4kb,localeStorage是持久化的存储在客户端,如果用户不手动清除的话,不会自动消失,会一直存在,sessionStorage也是存储在客户端,但是它的存活时间是在一个回话期间,只要浏览器的回话关闭了就会自动消失。

(5)多个页面之间如何进行通信

使用cookie,使用web worker,使用localeStorage和sessionStorage

(6)浏览器的渲染过程

1、首先获取html,然后构建dom树

2、其次根据css构建render树,render树中不包含定位和几何信息

3、最后构建布局数,布局是含有元素的定位和几何信息

(7)重构、回流

浏览器的重构指的是改变每个元素外观时所触发的浏览器行为,比如颜色,背景等样式发生了改变而进行的重新构造新外观的过程。重构不会引发页面的重新布局,不一定伴随着回流,

回流指的是浏览器为了重新渲染页面的需要而进行的重新计算元素的几何大小和位置的,他的开销是非常大的,回流可以理解为渲染树需要重新进行计算,一般最好触发元素的重构,避免元素的回流;比如通过通过添加类来添加css样式,而不是直接在DOM上设置,当需要操作某一块元素时候,最好使其脱离文档流,这样就不会引起回流了,比如设置position:absolute或者fixed,或者display:none,等操作结束后在显示。

一、HTML

常用的meta头

通过你对标签语义化的理解来判断你能否写出更规范的HTML代码

HTML5新增的能力

HTML的渲染解析知识,比如为什么CSS放前面JS放后面,怎么理解并行加载串行执行

HTML书写规范

H5新增标签

HTML渲染过程

 

 

1、标签属性中titlealt的区别

:

title是设置鼠标移动到图片上时显示的内容,而alt是用于当图片没有正常显示时出现的提示文字,另外alt还用于在seo中针对图片的优化说明.

2、隐藏元素的几种方法

:

     1.display:none;

     2.visibility:hidden;

     3.opacity:0;

     4.position:absolute;

        left:-10000px;

26iOS苹果和微信中音频和视频实现自动播放的方法

:

?

1

2

3

4

5

//一般情况下,这样就可以自动播放了,但是一些奇葩iPhone机不可以

document.getElementById('audio').play();

//必须在微信Weixin JSAPI的WeixinJSBridgeReady才能生效

document.addEventListener("WeixinJSBridgeReady", function () {

 document.getElementById('audio').play();

 document.getElementById('video').play();

}, false);

29imagecanvas在处理图片的时候有什么区别?

:

image是通过对象的形式描述图片的。

canvas通过专门的API将图片绘制在画布上。

30、响应式布局的时候,轮播图使用两张不同的图片去适配大屏幕和超小屏幕,还是一张图片进行压缩适配不同终端,说明原因?

:

最好使用两张不同大小的图片去适配大屏幕和超小屏幕,这样可以针对不同设备的屏幕大小,来加载响应的图片,减少超小屏幕设备的网络流量消耗,加快响应速度,同时防止图片在大屏幕下分辨率不够导致失真的问题。

 

 

 

 

语义化

HTML标签的语义化是指:通过使用包含语义的标签(如h1-h6)恰当地表示文档结构

css命名的语义化是指:为html标签添加有意义的class

  • 为什么需要语义化:

去掉样式后页面呈现清晰的结构

盲人使用读屏器更好地阅读

搜索引擎更好地理解页面,有利于收录

便团队项目的可持续运作及维护

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

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

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

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

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

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

Doctype作用?标准模式与兼容模式各有什么区别?

<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现

标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作

HTML5 为什么只需要写

HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行)

而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型

行内元素有哪些?块级元素有哪些? (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>

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

link属于XHTML标签,除了加载CSS外,还能用于定义RSS,定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS

页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载

import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题

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

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

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

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

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

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

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

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

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

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

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

HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加

绘画 canvas

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

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

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

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

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

新的技术webworker, websocket, Geolocation

移除的元素:

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

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

支持HTML5新标签:

IE8/IE7/IE6支持通过document.createElement方法产生的标签

可以利用这一特性让这些浏览器支持HTML5新标签

浏览器支持新标签后,还需要添加标签默认的样式

当然也可以直接使用成熟的框架、比如html5shim

<!--[if lt IE 9]>

<script> src="http://html5shim.googlecode.com

/svn/trunk/html5.js"</script><![endif]-->

如何区分HTML5: DOCTYPE声明\新增的结构元素\功能元素

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

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

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

如何使用:

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

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

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

CACHE MANIFEST

    #v0.11

    CACHE:

    js/app.js

    css/style.css

    NETWORK:

    resourse/logo.png

    FALLBACK:

    / /offline.html

iframe有那些缺点?

iframe会阻塞主页面的Onload事件

搜索引擎的检索程序无法解读这种页面,不利于SEO

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

使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript动态给iframe添加src属性值,这样可以绕开以上两个问题

Label的作用是什么?是怎么用的?

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

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

区分用户是计算机还是人的公共全自动程序。可以防止恶意破解密码、刷票、论坛灌水

有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试

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

link 属于HTML标签,除了加载CSS外,还能用于定 RSS等;@import 只能用于加载CSS

页面加载的时,link 会同时被加载,而 @import 引用的 CSS 会等到页面被加载完再加载

@import 只在 IE5 以上才能被识别,而 link 是HTML标签,无兼容问题

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

浏览器内核主要分为两部分:渲染引擎(layout engineer 或 Rendering Engine) 和 JS引擎

渲染引擎负责取得网页的内容进行布局计和样式渲染,然后会输出至显示器或打印机

JS引擎则负责解析和执行JS脚本来实现网页的动态效果和用户交互

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

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

Blink内核:新版 Chrome、新版 Opera

Webkit内核:Safari、原Chrome

Gecko内核:FireFox、Netscape6及以上版本

Trident内核(又称MSHTML内核):IE、国产浏览器

Presto内核:原Opera7及以上

HTML5有哪些新特性?

新增选择器 document.querySelector、document.querySelectorAll

拖拽释放(Drag and drop) API

媒体播放的 video 和 audio

本地存储 localStorage 和 sessionStorage

离线应用 manifest

桌面通知 Notifications

语意化标签 article、footer、header、nav、section

增强表单控件 calendar、date、time、email、url、search

地理位置 Geolocation

多任务 webworker

全双工通信协议 websocket

历史管理 history

跨域资源共享(CORS) Access-Control-Allow-Origin

页面可见性改变事件 visibilitychange

跨窗口通信 PostMessage

Form Data 对象

绘画 canvas

HTML5移除了那些元素?

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

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

如何处理HTML5新标签的浏览器兼容问题?

通过 document.createElement 创建新标签

使用垫片 html5shiv.js

如何区分 HTML HTML5

DOCTYPE声明、新增的结构元素、功能元素

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

HTML5的离线储存原理:

用户在线时,保存更新用户机器上的缓存文件;当用户离线时,可以正常访离线储存问站点或应用内容

HTML5的离线储存使用:

在文档的 html 标签设置 manifest 属性,如 manifest="/offline.appcache"

在项目中新建 manifest 文件,manifest 文件的命名建议:xxx.appcache

在 web 服务器配置正确的 MIME-type,即 text/cache-manifest

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

在线的情况下,浏览器发现 html 标签有 manifest 属性,它会请求 manifest 文件

如果是第一次访问app,那么浏览器就会根据 manifest 文件的内容下载相应的资源并且进行离线存储

如果已经访问过app且资源已经离线存储了,浏览器会对比新的 manifest 文件与旧的 manifest 文件,如果文件没有发生改变,就不做任何操作。如果文件改变了,那么就会重新下载文件中的资源并进行离线存储

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

iframe 有那些优点和缺点?

  • 优点:

用来加载速度较慢的内容(如广告)

可以使脚本可以并行下载

可以实现跨子域通信

  • 缺点:

iframe 会阻塞主页面的 onload 事件

无法被一些搜索引擎索识别

会产生很多页面,不容易管理

label 的作用是什么?怎么使用的?

  • label标签来定义表单控件的关系:

当用户选择label标签时,浏览器会自动将焦点转到和label标签相关的表单控件上

  • 使用方法1

<label for="mobile">Number:</label>

<input type="text" id="mobile"/>

  • 使用方法2

<label>Date:<input type="text"/></label>

如何实现浏览器内多个标签页之间的通信?

iframe + contentWindow

postMessage

SharedWorker(Web Worker API)

storage 事件(localStorge API)

WebSocket

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

在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放

当用户浏览其他页面,暂停网站首页幻灯自动播放

完成登陆后,无刷新自动同步其他页面的登录状态

通过 visibilityState 的值检测页面当前是否可见,以及打开网页的时间等;

在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放

title h1 的区别、b strong 的区别、i em 的区别?

title 表示是整个页面标题,h1 则表示层次明确的标题,对页面信息的抓取有很大的影响

strong 标明重点内容,有语气加强的含义,使用阅读设备阅读网络时,strong 会重读,而 b

是展示强调内容

i 内容展示为斜体,em 表示强调的文本

自然样式标签:b, i, u, s, pre

语义样式标签:strong, em, ins, del, code

应该准确使用语义样式标签, 但不能滥用。如果不能确定时,首选使用自然样式标签

 

 

 

3.说说你对语义化的理解?

1:去掉或样式丢失的时候能让页面呈现清晰的结构:html本身是没有表现的,我们看到例如<h1>是粗体,字体大小2em,加粗;<strong>是加粗的,不要认为这是html的表现,这些其实html默认的css样式在起作用,所以去掉或样式丢失的时候能让页面呈现清晰的结构不是语义化的HTML结构的优点,但是浏览器都有有默认样式,默认样式的目的也是为了更好的表达html的语义,可以说浏览器的默认样式和语义化的HTML结构是不可分割的。

2.屏幕阅读器(如果访客有视障)会完全根据你的标记来“读”你的网页。

3.PDA、手机等设备可能无法像普通电脑的浏览器一样来渲染网页(通常是因为这些设备对CSS的支持较弱)。

4.有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重。

6.便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。

4.你如何对网站的文件和资源进行优化?

期待的解决方案包括:文件合并文件最小化/文件压缩使用CDN托管缓存的使用(多个域名来提供缓存)其他。

5.为什么利用多个域名来提供网站资源会更有效? 

1.CDN缓存更方便

2.突破浏览器并发限制(一般每个域名建立的链接不超过6个)

3.Cookieless,节省带宽,尤其是上行带宽一般比下行要慢

4.对于UGC的内容和主站隔离,防止不必要的安全问题(上传js窃取主站cookie之类的)。正是这个原因要求用户内容的域名必须不是自己主站的子域名,而是一个完全独立的第三方域名。

5.数据做了划分,甚至切到了不同的物理集群,通过子域名来分流比较省事。这个可能被用的不多。

PS:关于Cookie的问题,带宽是次要的,安全隔离才是主要的。关于多域名,也不是越多越好,虽然服务器端可以做泛解释,浏览器做dns解释也是耗时间的,而且太多域名,如果要走https的话,还有要多买证书和部署的问题。

6.请说出三种减少页面加载时间的方法。(加载时间指感知的时间或者实际加载时间)

1.优化图片

2.图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)

3.优化CSS(压缩合并css,如margin-top,margin-left...)

4.网址后加斜杠(如www.campr.com/目录,会判断这个“目录是什么文件类型,或者是目录。)

5.标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。)

6.减少http请求(合并文件,合并图片)。

12.什么是FOUC(无样式内容闪烁)?你如何来避免FOUC

FOUC(Flash Of Unstyled Content)--文档样式闪烁

<style type="text/css"media="all">@import"../fouc.css";</style>而引用CSS文件的@import就是造成这个问题的罪魁祸首。IE会先加载整个HTML文档的DOM,然后再去导入外部的CSS文件,因此,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速,电脑速度都有关系。解决方法简单的出奇,只要在<head>之间加入一个<link>或者<script>元素就可以了。

13.doctype(文档类型)的作用是什么?你知道多少种文档类型?

此标签可告知浏览器文档使用哪种HTML或XHTML规范。该标签可声明三种DTD类型,分别表示严格版本、过渡版本以及基于框架的HTML文档。

HTML 4.01规定了三种文档类型:Strict、Transitional以及Frameset。

XHTML 1.0规定了三种XML文档类型:Strict、Transitional以及Frameset。

Standards(标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而Quirks(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。

14.浏览器标准模式和怪异模式之间的区别是什么?

W3C标准推出以后,浏览器都开始采纳新标准,但存在一个问题就是如何保证旧的网页还能继续浏览,在标准出来以前,很多页面都是根据旧的渲染方法编写的,如果用的标准来渲染,将导致页面显示异常。为保持浏览器渲染的兼容性,使以前的页面能够正常浏览,浏览器都保留了旧的渲染方法(如:微软的IE)。这样浏览器渲染上就产生了Quircks mode和Standars mode,两种渲染方法共存在一个浏览器上。IE盒子模型和标准W3C盒子模型:ie的width包括:padding\border。标准的width不包括:padding\border

 在js中如何判断当前浏览器正在以何种方式解析?

 document对象有个属性compatMode,它有两个值:BackCompat对应quirks mode,CSS1Compat对应strict mode。

5)盒子模型

(1)普通盒子模型 boxsizing:content-box; (2)怪异盒子模型 boxsizing:border-box;

 

15.使用XHTML的局限有哪些?

XHTML 与HTML的区别为:

XHTML 元素必须被正确地嵌套。

XHTML 元素必须被关闭。

标签名必须用小写字母。

XHTML 文档必须拥有根元素。

局限:

所有的 XHTML 元素都必须被正确地嵌套,XHTML 必须拥有良好的结构,所有的标签必须小写,并且所有的 XHTML 元素必须被关闭。所有的 XHTML 文档必须拥有 DOCTYPE 声明,并且 html、head、title 和 body 元素必须存在。虽然代码更加的优雅,但缺少容错性,不利于快速开发。

17.data-属性的作用是什么?

data-* 属性用于存储页面或应用程序的私有自定义数据。data-* 属性赋予我们在所有 HTML 元素上嵌入自定义 data 属性的能力。存储的(自定义)数据能够被页面的 JavaScript 中利用,以创建更好的用户体验(不进行 Ajax 调用或服务器端数据库查询)。

data-* 属性包括两部分:

属性名不应该包含任何大写字母,并且在前缀 "data-" 之后必须有至少一个字符

属性值可以是任意字符串

18.如果把HTML5看作做一个开放平台,那它的构建模块有哪些?

<nav>,<header>,<section>,<footer>等。

1. HTML5相关

1.1 新特性、移除了那些元素

HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。

新特性(包括标签):

  • 绘画 canvas;
  • 用于媒介回放的 video 和 audio 元素;
  • 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
    sessionStorage 的数据在浏览器关闭后自动删除;
  • 语意化更好的内容元素,比如 article、footer、header、nav、section;
  • 表单控件,calendar、date、time、email、url、search;
  • 新的技术webworker, websocket, Geolocation;

移除的元素:

  • 纯表现的元素:basefont,big,center,font, s,strike,tt,u;
  • 对可用性产生负面影响的元素:frame,frameset,noframes;

1.2 处理HTML5新标签的浏览器兼容问题

支持HTML5新标签:
IE8/IE7/IE6支持通过document.createElement方法产生的标签,
可以利用这一特性让这些浏览器支持HTML5新标签,
浏览器支持新标签后,还需要添加标签默认的样式。

当然也可以直接使用成熟的框架、比如html5shim;

<!--[if lt IE 9]>
 <script>src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
<![endif]-->复制代码

1.3 区分 HTML 和 HTML5

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

1.5 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进行需求实现。

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

2. HTML标签相关

2.1 iframe有那些缺点?

  • iframe会阻塞主页面的Onload事件;
  • 搜索引擎的检索程序无法解读这种页面,不利于SEO;
  • iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。

使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript 动态给iframe添加src属性值,这样可以绕开以上两个问题。

2.2 Label的作用是什么

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

<label for="Name">Number:</label>
<input type=“text“name="Name" id="Name"/>
 
<label>Date:<input type="text" name="B"/></label>复制代码

2.3 如何实现浏览器内多个标签页之间的通信?

WebSocket、SharedWorker;
也可以调用localstorge、cookies等本地存储方式;

localstorge另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,
我们通过监听事件,控制它的值来进行页面信息通信;
注意quirks:Safari 在无痕模式下设置localstorge值时会抛出 QuotaExceededError 的异常;

2.4 webSocket如何兼容低浏览器?

Adobe Flash Socket 、
ActiveX HTMLFile (IE) 、
基于 multipart 编码发送 XHR 、
基于长轮询的 XHR

2.5 字体标签的区别

title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取也有很大的影响;

strong是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:<strong>会重读,而<b>是展示强调内容。

i内容展示为斜体,em表示强调的文本;

Physical Style Elements -- 自然样式标签
b, i, u, s, pre
Semantic Style Elements -- 语义样式标签
strong, em, ins, del, code
应该准确使用语义样式标签, 但不能滥用, 如果不能确定时首选使用自然样式标签。


相关知识点

web标准、 web语义化、 浏览器内核、 兼容性、 html5...

题目&答案

  • Doctype作用?严格模式与混杂模式如何区分?它们有何意义?
(1)<!DOCTYPE>声明位于HTML文档中的第一行,处于<html>标签之前,用于告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
(2)标准模式的排版和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。
 (3)如果HTML文档包含形式完整的DOCTYPE,那么他一般以标准模式呈现。对于HTML4.01文档,包含严格DTD的DOCTYPE常常导致页面已标准模式呈现。DOCTYPE不存在或者格式不正确会导致文档已混杂模式呈现。
  • 请描述一个网页从开始请求道最终显示的完整过程?
一个网页从请求到最终显示的完整过程一般可以分为如下7个步骤:
(1)在浏览器中输入网址;
(2)发送至DNS服务器并获得域名对应的WEB服务器IP地址;
(3)与WEB服务器建立TCP连接;
(4)浏览器向WEB服务器的IP地址发送相应的HTTP请求;
(5)WEB服务器响应请求并返回指定URL的数据,或错误信息,如果设定重定向,则重定向到新的URL地址;
(6)浏览器下载数据后解析HTML源文件,解析的过程中实现对页面的排版,解析完成后在浏览器中显示基础页面;
(7)分析页面中的超链接并显示在当前页面,重复以上过程直至无超链接需要发送,完成全部数据显示。
  • HTML5 为什么只需要写 <!DOCTYPE HTML>?
(1)HTML5不基于SGML,因此不需要对DTD进行引用,但是需要DOCTYPE来规范浏览器的行为(让浏览器按照它们应该的方式来运行);
(2)HTML4.01基于SGML,所以需要对DTD进行引用,才能让浏览器知道该文档所使用的文档类型。
  • 行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
***行内元素***:
a - 锚点,em - 强调,strong - 粗体强调,span - 定义文本内区块,i - 斜体,img - 图片,b - 粗体,label - 表格标签,select - 项目选择,textarea - 多行文本输入框,sub - 下标,
sup - 上标,q - 短引用;
***块元素***:
div - 常用块级,dl - 定义列表,dt,dd,ul- 非排序列表,li,ol-排序表单,p-段落,h1,h2,h3,h4,h5-标题,table-表格,fieldset - form控制组,form - 表单,
***空元素***:
br-换行,hr-水平分割线;
  • 介绍一下你对浏览器内核的理解?
浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“渲染引擎”,不过我们一般习惯将之称为“浏览器内核”。负责对网页语法的解释(如标准通用标记语言下的一个应用HTML、JavaScript)并渲染(显示)网页。 所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果的原因。
  • 常见的浏览器内核有哪些?
Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]
Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等。
Presto内核:Opera7及以上。      [Opera内核原为:Presto,现为:Blink;]
Webkit内核:Safari,Chrome等。   [ Chrome的:Blink(WebKit的分支)]
EdgeHTML内核:Microsoft Edge。  [此内核其实是从MSHTML fork而来,删掉了几乎所有的IE私有特性]

详细文章:浏览器内核的解析和对比——依水间

  • html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 ?
***新增了以下的几大类元素***
内容元素,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已形成了最终的标准,概括来讲,它主要是关于图像,位置,存储,多任务等功能的增加。
新增的元素有绘画 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。
***新的技术***
canvas,svg,webworker, websocket, Geolocation......
  • 简述一下你对HTML语义化的理解。
(1)HTML语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
(2)即使在没有样式CSS的情况下也能以一种文档格式显示,并且是容易阅读的;
(3)搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,有利于SEO;
(4)使阅读源代码的人更容易将网站分块,便于阅读、维护和理解。
  • HTML5的离线存储怎么使用?能否解释一下工作原理?
在用户没有连接英特网时,可以正常访问站点和应用;在用户连接英特网时,更新用户机器上的缓存文件。
`原理`:HTML5的离线存储是基于一个新建的 `.appcache` 文件的缓存机制(并非存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储下来。之后当网络处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。
使用方法:
(1) 在页面头部像下面一样加入一个 manifest 的属性;
(2) 在 cache.manifest 文件里编写离线存储资源;
     CACHE MANIFEST
     #v0.11
     CACHE
       js/app.js
       css/style.css
     NETWORK:
       resource/logo.png
     FALLBACK:
       / /offline.html
(3) 在离线状态时,操作 window.applicationCache 进行需求实现;

详细使用教程:有趣的HTML5:离线存储——segmentfault

  • 浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?
在线情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
离线情况下,浏览器就直接使用离线存储的资源。
  • 请描述一下 cookies,sessionStorage 和 localStorage 的区别?
Web Storage有两种形式:LocalStorage(本地存储)和sessionStorage(会话存储)。这两种方式都允许开发者使用js设置的键值对进行操作,在在重新加载不同的页面的时候读出它们。这一点与cookie类似。
1)与cookie不同的是:Web Storage数据完全存储在客户端,不需要通过浏览器的请求将数据传给服务器,因此x相比cookie来说能够存储更多的数据,大概5M左右。
2)LocalStorage和sessionStorage功能上是一样的,但是存储持久时间不一样。
LocalStorage:浏览器关闭了数据仍然可以保存下来,并可用于所有同源(相同的域名、协议和端口)窗口(或标签页);
sessionStorage:数据存储在窗口对象中,窗口关闭后对应的窗口对象消失,存储的数据也会丢失。
注意:sessionStorage 都可以用localStorage 来代替,但需要记住的是,在窗口或者标签页关闭时,使用sessionStorage 存储的数据会丢失。
3)使用 local storage和session storage主要通过在js中操作这两个对象来实现,分别为window.localStoragewindow.sessionStorage. 这两个对象均是Storage类的两个实例,自然也具有Storage类的属性和方法。
  • Label的作用是什么?如何使用?
label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
<label for="Name">Number:</label>
<input type="text" name="Name" id="Name" /><label>Date:<input type="text" name="B" /></label>
  • HTML5的form如何关闭自动完成功能?
给不想要提示的 form 或下面某个 input 设置为 `autocomplete = off`
  • 如何实现浏览器内多个标签页之间的通信?(阿里)
调用 localStorage、cookies 等本地存储方式
  • webSocket 如何兼容低浏览器?(阿里)
Adobe Flash Socket
ActiveX HTMLFile(IE)
基于 multipart 编码发送 XHR
基于长轮询的 XHR
  • 页面可见性(Page Visibility) API可以有哪些用途?
在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放。
  • 如何在页面上实现一个圆形的可点击区域?
(1) map + area 或者 svg
(2) border-radius
(3) 纯js实现,需要求一个点在不在圆上的简单算法、获取鼠标坐标等等
  • 实现 不使用 border 画出 1px 高的线,在不同浏览器的标准模式与怪异模式下都能保持一致的效果?
<div style="height:1px;overflow:hidden;background:#ccc"></div>
  • 网页验证码是干什么用的?是为了解决什么安全问题?
可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进



作者:sandisen
链接:https://www.jianshu.com/p/872f8fb425ce
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

$HTML, HTTP,web综合问题

  • 1、前端需要注意哪些SEO
  • 2、<img>titlealt有什么区别
  • 3、HTTP的几种请求方法用途
  • 4、从浏览器地址栏输入url到显示页面的步骤
  • 5、如何进行网站性能优化
  • 6、HTTP状态码及其含义
  • 7、语义化的理解
  • 8、介绍一下你对浏览器内核的理解
  • 9、html5有哪些新特性、移除了那些元素?
  • 10、HTML5的离线储存怎么使用,工作原理能不能解释一下?
  • 11、浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢
  • 12、请描述一下 cookiessessionStoragelocalStorage 的区别
  • 14、WEB标准以及W3C标准是什么?
  • 15、xhtmlhtml有什么区别?空(void)元素有那些?
  • 18、HTML全局属性(global attribute)有哪些
  • 19、CanvasSVG有什么区别?
  • 20、HTML5 为什么只需要写 <!DOCTYPE HTML>
  • 21、如何在页面上实现一个圆形的可点击区域?
  • 22、网页验证码是干嘛的,是为了解决什么安全问题

$CSS部分

  • 1、css sprite是什么,有什么优缺点
  • 2、display: none;visibility: hidden;的区别
  • 3、link@import的区别
  • 4、什么是FOUC?如何避免
  • 5、如何创建块级格式化上下文(block formatting context),BFC有什么用
  • 7、清除浮动的几种方式,各自的优缺点
  • 8、为什么要初始化CSS样式?
  • 9、css3有哪些新特性
  • 10、display有哪些值?说明他们的作用
  • 11、介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?
  • 12、CSS优先级算法如何计算?
  • 13、对BFC规范的理解?
  • 14、谈谈浮动和清除浮动
  • 15、position的值, relative和absolute`定位原点是
  • 16、display:inline-block 什么时候不会显示间隙?(携程)
  • 17、PNG,GIF,JPG的区别及如何选
  • 18、行内元素float:left后是否变为块级元素?
  • 19、在网页中的应该使用奇数还是偶数的字体?为什么呢?
  • 20、::before:after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用
  • 21、如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)
  • 22、CSS合并方法
  • 23、CSS不同选择器的权重(CSS层叠的规则)
  • 24、列出你所知道可以改变页面布局的属性
  • 25、CSS在性能优化方面的实践
  • 26、CSS3动画(简单动画的实现,如旋转等)
  • 27、base64的原理及优缺点
  • 28、几种常见的CSS布局
  • 29、stylus/sass/less区别
  • 30、postcss的作用



作者:poetries
链接:https://www.jianshu.com/p/feab89b88d6b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

1.viewport的常见设置有哪些

viewport常常使用在响应式开发以及移动web开发中,viewport顾名思义就是用来设置视口,主要是规定视口的宽度、视口的初始缩放值、 视口的最小缩放值、视口的最大缩放值、是否允许用户缩放等。一个常见的viewport设置如下:

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

其中同时设置width和initial-scale的目的是为了解决iphone、ipad、ie横竖屏不分的情况,因为这两个值同时存在时会取较大值。

参考:

A tale of two viewports — part one (译)

A tale of two viewports — part two (译)

Meta viewport

2.简要介绍HTML5的新特性

首先HTML5为了更好的实践Web语义化,增加了header、footer、nav、aside、article、section等语义化标签。 在表单方面,为了增强表单,为input增加color、email、date、range等类型,在存储方面提供了sessionStorage 、localStorage和离线存储,通过这些存储方式方便数据在客户端的存储和获取,在多媒体方面规定了音频和视频元素audio和vedio; 另外还有地理定位、canvas画布、拖放、多线程编程的web workers和websocket协议

3.HTML5的存储方案有哪些

HTML5提供了sessionStorage、localStorage和离线存储作为新的存储方案,其中sessionStorage和localStorage 都是采用键值对的形式存储,两者都是通过setItem、getItem、removeItem来实现增删查改,而sessionStorage是会话存储,也就是说 当浏览器关闭之后sessionStorage也自动清空了,而localStorage不会,它没有时间上的限制。离线存储也就是应用程序缓存,这个通常用来 确保web应用能够在离线情况下使用,通过在html标签中属性manifest来声明需要缓存的文件,这个属性的值是一个包含需要缓存的文件的文件名的文件, 这个manifest文件声明的缓存文件可在初次加载后缓存在客户端,可以通过更新这个manifest文件来达到更新缓存文件的目的。

4.块级元素和行内元素有哪些?

块级元素有表示布局类的div、section、header、footer、aside、nav、article等,列表类ul li、ol之类的,form、p、table、标题h1~h6 行内元素:a、span、button、input、select、textarea、i、em、strong

新增的元素

结构元素

  1. article元素,表示页面中的一块与上下文不相关的独立内容,比如博客中的一篇文章。
  2. aside元素,表示article内容之外的内容,辅助信息。
  3. header元素,表示页面中一个内容区块或整个页面的页眉。
  4. hgroup元素,用于对页面中一个区块或整个页面的标题进行组合。
  5. footer元素,表示页面中一个内容区块或整个页面的页脚。
  6. figure元素,表示媒介内容的分组,以及它们的标题。
  7. section元素,表示页面中一个内容区块,比如章节。
  8. nav元素,表示页面中的导航链接。

其他元素

  1. video元素,用来定义视频。
  2. audio元素,用来定义音频。
  3. canvas元素,用来展示图形,该元素本身没有行为,仅提供一块画布。
  4. embed元素,用来插入各种多媒体,格式可以是Midi、Wav、AIFF、AU、MP3等。
  5. mark元素,用来展示高亮的文字。
  6. progress元素,用来展示任何类型的任务的进度。
  7. meter元素,表示度量衡,定义预定义范围内的度量。
  8. time元素,用来展示日期或者时间。
  9. command元素,表示命令按钮。
  10. details元素,用来展示用户要求得到并且可以得到的细节信息。
  11. summary元素,用来为details元素定义可见的标题。
  12. datalist元素,用来展示可选的数据列表,与input元素配合使用,可以制作出输入值的下拉列表。
  13. datagrid元素,也用来展示可选的数据列表,以树形列表的形式来显示。
  14. keygen元素,表示生成密匙。
  15. output元素,表示不同类型的输出。
  16. source元素,为媒介元素定义媒介资源。
  17. menu元素,表示菜单列表。
  18. ruby元素,表示ruby注释, rt元素表示字符的解释或发音。 rp元素在ruby注释中使用,以定义不支持ruby元素的浏览器所显示的内容。
  19. wbr元素,表示软换行。与br元素的区别是:br元素表示此处必须换行,而wbr元素的意思是浏览器窗口或父级元素的宽度够宽时。不进行换行,而当宽度不够时,主动在此处进行换行。
  20. bdi元素,定义文本的文本方向,使其脱离其周围文本的方向设置。
  21. dialog元素,表示对话框或窗口。

废除的元素

html5中废除了一些纯表现的元素,只有部分浏览器支持的元素还有一些会对可用性产生负面影响的元素。

纯表现元素

纯表现的元素就是那些可以用css替代的元素。basefont、big、center、font、s、strike、tt、u这些元素,他们的功能都是纯粹为页面展示服务的,html5提倡把页面展示性功能放在css样式表中统一处理,所以将这些元素废除,用css样式进行替代。

对可用性产生负面影响的元素

对于frameset元素、frame元素与noframes元素,由于frame框架对网页可用性存在负面影响,在html5中已不支持frame框架,只支持iframe框架,html5中同时将frameset、frame和noframes这三个元素废除。

只有部分浏览器支持的元素

对于applet、bgsound、blink、marquee等元素,由于只有部分浏览器支持,特别是bgsound元素以及marquee元素,只被IE支持,所以在html5中被废除。其中applet元素可由embed元素或object元素替代,bgsound元素可由audio元素替代,marquee可以由javascript编程的方式替代。

新增的API

Canvas API

上文提到的canvas元素可以为页面提供一块画布来展示图形。结合Canvas API,就可以在这块画布上动态生成和展示各种图形、图表、图像以及动画了。Canvas本质上是位图画布,不可缩放,绘制出来的对象不属于页面DOM结构或者任何命名空间。不需要将每个图元当做对象存储,执行性能非常好。

利用Canvas API进行绘图,首先要获取canvas元素的上下文,然后用该上下文中封装的各种绘图功能进行绘图。

1

2

3

4

5

6

7

8

9

10

11

12

<canvas id="canvas">替代内容</canvas>

<script>

    var canvas = document.getElementById('canvas');

    var context =canvas.getContext("2d"); // 获取上下文

    //设置纯色

    context.fillStyle = "red";

    context.strokeStyle = "blue";

    // 实践表明在不设置fillStyle下的默认fillStyle为black

    context.fillRect(0, 0, 100, 100);

    // 实践表明在不设置strokeStyle下的默认strokeStyle为black

    context.strokeRect(120, 0, 100, 100);

</script>

SVG

SVG是html5的另一项图形功能,它是一种标准的矢量图形,是一种文件格式,有自己的API。html5引入了内联SVG,使得SVG元素可以直接出现在html标记中。

1

<svg height=100 width=100><circle cx=50 cy=50 r=50 /></svg>

音频和视频

audio和video元素的出现让html5的媒体应用多了新选择,开发人员不必使用插件就能播放音频和视频。对于这两个元素,html5规范提供了通用、完整、可脚本化控制的API。
html5规范出来之前,在页面中播放视频的典型方式是使用Flash、QuickTime或者Windows Media插件往html中嵌入音频视频,相对这种方式,使用html5的媒体标签有两大好处。

  1. 作为浏览器原生支持的功能,新的audio和video元素无需安装。
  2. 媒体元素想Web页面提供了通用、集成和可脚本化控制的API。

1

2

3

4

5

6

<video src="video.webm" controls>

    <object data="videoplayer.swf" type="application/x-shockwave-flash">

        <param name="movie" value="video.swf" />

    </object>

    Your browser does not support HTML5 video.

</video>

浏览器支持性检测

浏览器检测是否支持audio元素或者video元素最简单的方式是用脚本动态创建它,然后检测特定函数是否存在。

1

var hasVideo = !!(document.createElement('video').canPlayType);

Geolocation API

html5的Geolocation API(地理定位API),可以请求用户共享他们的位置。使用方法非常简单,如果用户同意,浏览器就会返回位置信息,该位置信息是通过支持html5地理定位功能的底层设备(如笔记本电脑或手机)提供给浏览器的。位置信息由纬度、经度坐标和一些其他元数据组成。

位置信息从何而来

Geolocation API不指定设备使用哪种底层技术来定位应用程序的用户。相反,它只是用于检索位置信息的API,而且通过该API检索到的数据只具有某种程度的准确性,并不能保证设备返回的位置是精确的。设备可以使用下列数据源:

  1. IP地址
  2. 三维坐标
    1. GPS
    2. 从RFID、WiFi和蓝牙到WiFi的MAC地址
    3. GSM或CDMA手机的ID
  3. 用户自定义数据

使用方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

// 一次更新

navigator.geolocation.getCurrentPosition(updateLocation, handleLocationEror);

function updateLocation(position) {

    var latitude = position.coords.latitude;     // 纬度

    var longitude = position.coords.longitude;   // 经度

    var accuracy = position.coords.accuracy;     // 准确度

    var timestamp = position.coords.timestamp;   // 时间戳

}

// 错误处理函数

function handleLocationEror(error) {

    ....

}

// 重复更新

navigator.geolocation.watchPosition(updateLocation, handleLocationEror);

// 不再接受位置更新

navigator.geolocation.clearWatch(watchId);

Communication API

跨文档消息传递

出于安全方面的考虑,运行在同一浏览器中的框架、标签页、窗口间的通信一直都受到了严格的限制。然而,现实中存在一些合理的让不同站点的内容能在浏览器内进行交互的需求。这种情形下,如果浏览器内部能提供直接的通信机制,就能更好地组织这些应用。
html5中引入了一种新功能,跨文档消息通信,可以确保iframe、标签页、窗口间安全地进行跨源通信。postMessage API为发送消息的标准方式,发送消息非常简单:

1

window.postMessage('Hello, world', 'http://www.example.com/');

接收消息时,仅需在页面中增加一个事件处理函数。当某个消息到达时,通过检查消息的来源来决定是否对这条消息进行处理。

1

2

3

4

5

6

7

8

9

10

11

12

window.addEventListener("message", messageHandler, true);

function messageHandler(e) {

    switch(e.origin) {

        case "friend.example.com":

        // 处理消息

        processMessage(e.data);

        break;

    default:

        // 消息来源无法识别

        // 消息被忽略

    }

}

消息事件是一个拥有data(数据)和origin(源)属性的DOM事件。data属性是发送方传递的实际消息,而origin属性是发送来源。

XMLHttpRequest Level2

XMLHttpRequest API使得Ajax技术成为可能,作为XMLHttpRequest的改进版,XMLHttpRequest Level2在功能上有了很大的改进。主要两个方面:

  1. 跨源XMLHttpRequest
  2. 进度事件

跨源XMLHttpRequest

过去,XMLHttpRequest仅限于同源通信,XMLHttpRequest Level2通过CORS实现了跨源XMLHttpRequest。跨源HTTP请求包含一个Origin头部,它为服务器提供HTTP请求的源信息。

WebSockets API

WebSockets是html5中最强大的通信功能,它定义了一个全双工通信信道,仅通过Web上的一个Socket即可进行通信。

WebSockets握手

为了建立WebSockets通信,客户端和服务器在初始握手时,将HTTP协议升级到WebSocket协议。一旦连接建立成功,就可以在全双工模式下在客户端和服务器之间来回传递WebSocket消息。

WebSockets接口

除了对WebSockets协议定义外,该规范还同时定义了用于JavaScript应用程序的WebSocket接口。WebSockets接口的使用很简单。要连接远程主机,只需要新建一个WebSocket实例,提供希望连接的对端URL。

Forms API

新表单元素

  1. tel元素,表示电话号码。
  2. email元素,表示电子邮件地址文本框。
  3. url元素,表示网页的url。
  4. search元素,用于搜索引擎,比如在站点顶部显示的搜索框。
  5. range元素,特定值范围内的数值选择器,典型的显示方式是滑动条。
  6. number元素,只包含数值的字段。

未来的表单元素

  1. color元素,颜色选择器,基于调色盘或者取色板进行选择。
  2. datetime元素,显示完整的日期和时间,包括时区。
  3. datetime-local,显示日期和时间。
  4. time元素,不含时区的时间选择器和指示器。
  5. date元素,日期选择器。
  6. week元素,某年中的周选择器。
  7. month元素,某年中的月选择器。

新的表单特性和函数

placeholder

当用户还没输入值的时候,输入型控件可以通过placeholder特性向用户显示描述性说明或者提示信息。

1

<input name="name" placeholder="First and last name">

autocomplete

浏览器通过autocomplete特性能够知晓是否应该保存输入值以备将来使用。

autofocus

通过autofocus特性可以指定某个表单元素获得输入焦点,每个页面上只允许出现一个autofocus特性,如果设置了多个,则相当于未指定此行为。

spellcheck

可对带有文本内容的输入控件和textarea空间控制spellcheck属性。设置完后,会询问浏览器是否应该给出拼写检查结果反馈。spellcheck属性需要赋值。

list特性和datalist元素

通过组合使用list特性和datalist元素,开发人员能够为某个输入型控件构造一张选值列表。

1

2

3

4

5

<datalist id="contactList">

    <option value="[email protected]"></option>

    <option value="[email protected]"></option>

</datalist>

<input type="email" id="contatcs" list="contactList">

min和max

通过设置min和max特性,可以将range输入框的数值输入范围限定在最低值和最高值之间。可以只设置一个,也可以两个都设置,也可以都不设置。

step

对于输入型控件,设置其step特性能够指定输入值递增或者递减的粒度。

required

一旦为某输入型控件设置了required特性,那么此项必填,否则无法提交表单。

拖放API

draggable属性

如果网页元素的draggable元素为true,这个元素就是可以拖动的。

1

<div draggable="true">Draggable Div</div>

拖放事件

拖动过程会触发很多事件,主要有下面这些:

  1. dragstart:网页元素开始拖动时触发。
  2. drag:被拖动的元素在拖动过程中持续触发。
  3. dragenter:被拖动的元素进入目标元素时触发,应在目标元素监听该事件。
  4. dragleave:被拖动的元素离开目标元素时触发,应在目标元素监听该事件。
  5. dragover:被拖动元素停留在目标元素之中时持续触发,应在目标元素监听该事件。
  6. drap:被拖动元素或从文件系统选中的文件,拖放落下时触发。
  7. dragend:网页元素拖动结束时触发。

1

2

3

draggableElement.addEventListener('dragstart', function(e) {

    console.log('拖动开始!');

});

dataTransfer对象

拖动过程中,回调函数接受的事件参数,有一个dataTransfer属性,指向一个对象,包含与拖动相关的各种信息。

1

2

3

draggableElement.addEventListener('dragstart', function(event) {

    event.dataTransfer.setData('text', 'Hello World!');

});

dataTransfer对象的属性有:

  1. dropEffect:拖放的操作类型,决定了浏览器如何显示鼠标形状,可能的值为copy、move、link和none。
  2. effectAllowed:指定所允许的操作,可能的值为copy、move、link、copyLink、copyMove、linkMove、all、none和uninitialized(默认值,等同于all,即允许一切操作)。
  3. files:包含一个FileList对象,表示拖放所涉及的文件,主要用于处理从文件系统拖入浏览器的文件。
  4. types:储存在DataTransfer对象的数据的类型。

dataTransfer对象的方法有:

  1. setData(format, data):在dataTransfer对象上储存数据。第一个参数format用来指定储存的数据类型,比如text、url、text/html等。
  2. getData(format):从dataTransfer对象取出数据。
  3. clearData(format):清除dataTransfer对象所储存的数据。如果指定了format参数,则只清除该格式的数据,否则清除所有数据。
  4. setDragImage(imgElement, x, y):指定拖动过程中显示的图像。默认情况下,许多浏览器显示一个被拖动元素的半透明版本。参数imgElement必须是一个图像元素,而不是指向图像的路径,参数x和y表示图像相对于鼠标的位置。

Web Workers API

Javascript是单线程的。因此,持续时间较长的计算,回阻塞UI线程,进而导致无法在文本框中填入文本,单击按钮等,并且在大多数浏览器中,除非控制权返回,否则无法打开新的标签页。该问题的解决方案是Web Workers,可以让Web应用程序具备后台处理能力,对多线程的支持性非常好。

但是在Web Workers中执行的脚本不能访问该页面的window对象,也就是Web Workers不能直接访问Web页面和DOM API。虽然Web Workers不会导致浏览器UI停止响应,但是仍然会消耗CPU周期,导致系统反应速度变慢。

Web Storage API

Web Storage是html5引入的一个非常重要的功能,可以在客户端本地存储数据,类似html4的cookie,但可实现功能要比cookie强大的多。

sessionStorage

sessionStorage将数据保存在session中,浏览器关闭数据就消失。

localStorage

localStorage则一直将数据保存在客户端本地,除非手动删除,否则一直保存。
不管是sessionStorage,还是localStorage,可使用的API相同,常用的有如下几个(以localStorage为例):

  1. 保存数据:localStorage.setItem(key,value);
  2. 读取数据:localStorage.getItem(key);
  3. 删除单个数据:localStorage.removeItem(key);
  4. 删除所有数据:localStorage.clear();
  5. 得到某个索引的key:localStorage.key(index);

 

 

猜你喜欢

转载自blog.csdn.net/weixin_42246997/article/details/82669312