在牛客网答题总结的前端面试71道HTML+CSS常考题

1、浏览器页面有哪三层构成,分别是什么,作用是什么?

       构成:结构层、表示层、行为层

       分别是:HTML、CSS、JavaScript

       作用:HTML实现页面结构,CSS完成页面的表现与风格,JavaScript实现一些客户端的功能与业务。

2、HTML5的优点与缺点?

优点: 

       a、网络标准统一、HTML5本身是由W3C推荐出来的;

       b、多设备、跨平台;

       c、即时更新;

       d、提高可用性和改进用户的友好体验;

       e、有几个新的标签,这将有助于开发人员定义重要的内容;

       f、可以给站点带来更多的多媒体元素(视频和音频); 

       g、可以很好的替代Flash和Silverlight;

       h、涉及到网站的抓取和索引的时候,对于SEO很友好;

       i、被大量应用于移动应用程序和游戏。

缺点:

      a、安全:像之前Firefox4的web socket和透明代理的实现存在严重的安全问题,同时web storage、web socket 这样的功能很容易被黑客利用,来盗取用户的信息和资料。

      b、完善性:许多特性各浏览器的支持程度也不一样。

      c、技术门槛:HTML5简化开发者工作的同时代表了有许多新的属性和API需要开发者学习,像web worker、web socket、web storage 等新特性,后台甚至浏览器原理的知识,机遇的同时也是巨大的挑战

      d、性能:某些平台上的引擎问题导致HTML5性能低下。

      e、浏览器兼容性:最大缺点,IE9以下浏览器几乎全军覆没。

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

       Doctype声明指出阅读程序应该使用什么规则集来解释文档中的标记。在Web文档的情况下,“阅读程序”通常是浏览器或者校验器这样的一个程序,“规则”则是W3C所发布的一个文档类型定义(DTD)中包含的规则。

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

       (2)   所谓的标准模式是指,浏览器按 W3C 标准解析执行代码;怪异模式则是使用浏览器自己的方式解析执行代码,因为不同浏览器解析执行的方式不一样,所以我们称之为怪异模式。严格模式是浏览器根据web标准去解析页面,是一种要求严格的DTD,不允许使用任何表现层的语法,如严格模式的排版和JS 运作模式是以该浏览器支持的最高标准运行混杂模式则是一种向后兼容的解析方法,说的透明点就是可以实现IE5.5以下版本浏览器的渲染模式。

        (3)   浏览器解析时到底使用标准模式还是怪异模式,与你网页中的 DTD 声明直接相关, DTD 声明定义了标准文档的类型(标准模式解析)文档类型,会使浏览器使用相应的方式加载网页并显示,忽略 DTD 声明 ,将使网页进入怪异模式。

4、HTML5有哪些新特性、移除了哪些元素?

       Html5新增了 27 个元素,废弃了 16 个元素,根据现有的标准规范,把 HTML5 的元素按优先级定义为结构性属性、级块性元素、行内语义性元素和交互性元素4 大类。

结构性元素主要负责web上下文结构的定义

       section:在 web 页面应用中,该元素也可以用于区域的章节描述。

       header:页面主体上的头部, header 元素往往在一对 body 元素中。

       footer:页面的底部(页脚),通常会标出网站的相关信息。

       nav:专门用于菜单导航、链接导航的元素,是 navigator 的缩写。

       article:用于表现一篇文章的主体内容,一般为文字集中显示的区域。

级块性元素主要完成web页面区域的划分,确保内容的有效分割。

      aside:用于表达注记、贴士、侧栏、摘要、插入的引用等作为补充主体的内容。

      figure:是对多个元素进行组合并展示的元素,通常与 ficaption 联合使用。

      code:表示一段代码块。

      dialog:用于表达人与人之间的对话,该元素包含 dt 和 dd 这两个组合元素, dt 用于表示说话者,而 dd 用来表示说话内容。

      行内语义性元素主要完成web页面具体内容的引用和描述,是丰富内容展示的基础。

      meter:表示特定范围内的数值,可用于工资、数量、百分比等。

      time:表示时间值。

      progress:用来表示进度条,可通过对其 max、min、step 等属性进行控制,完成对进度的表示和监事。

      video:视频元素,用于支持和实现视频文件的直接播放,支持缓冲预载和多种视频媒体格式。

       audio:音频元素,用于支持和实现音频文件的直接播放,支持缓冲预载和多种音频媒体格式。

交互性元素主要用于功能性的内容表达,会有一定的内容和数据的关联,是各种事件的基础。

       details:用来表示一段具体的内容,但是内容默认可能不显示,通过某种手段(如单击)与 legend 交互才会显示出来。

       datagrid:用来控制客户端数据与显示,可以由动态脚本及时更新。

       menu:主要用于交互菜单(曾被废弃又被重新启用的元素)。

       command:用来处理命令按钮。

 移除的元素:

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

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

5、你做的网页在哪些浏览器测试过,这些浏览器的内核分别是什么?

        IE:trident内核

        Firefox:gecko内核

        Safari:webkit内核

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

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

6、说说你对HTML5的认识,是什么?为什么?

       是什么:HTML5指的是包括 HTML 、 CSS 和 JavaScript 在内的一套技术组合。它希望能够减少网页浏览器对于需要插件的丰富性网络应用服务(Plug-in-Based Rich Internet Application ,RIA ),例如: AdobeFlash 、 Microsoft Silverlight 与 Oracle JavaFX 的需求,并且提供更多能有效加强网络应用的标准集。 HTML5 是 HTML 最新版本, 2014 年 10 月由万维网联盟( W3C )完成标准制定。目标是替换1999 年所制定的 HTML4.01 和 XHTML 1.0 标准,以期能在互联网应用迅速发展的时候,使网络标准达到匹配当代的网络需求。

       为什么:HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网。为了增强浏览器功能Flash 被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电、触摸、不开放)。HTML5增强了浏览器的原生功能,符合HTML5 规范的浏览器功能将更加强大,减少了 Web 应用对插件的依赖,让用户体验更好,让开发更加方便,另外 W3C 从推出 HTML4.0 到 5.0 之间共经历了 17 年, HTML 的变化很小,这并不符合一个好产品的演进规则。

7、对WEB标准以及W3C的理解与认识?

(1)WEB标准

        什么是WEB标准:一系列标准的集合,包括结构化标准语言(html等)、表现标准语言(css)、行为标准语言(ECMAScript等)。这些标准大部分是由万维网联盟起草和发布。

          为什么使用web标准:为了解决因浏览器版本不同、软硬件设备不同导致的需多版本开发的问题。

(2)W3C(World WideWeb Consortium)

          万维网联盟,是一个web开发的国际性联盟,是Web技术领域最权威和影响力的国际中立性技术标准机构。

8、HTML5行内元素有哪些?块级元素有哪些?空元素有哪些?

(1)行内元素:

         a - 锚点

        * abbr - 缩写

        * acronym- 首字

* b - 粗体 ( 不推荐 )

* bdo -bidi override

* big - 大字体

* br - 换行

* cite - 引用

* code - 计算机代码 ( 在引用源码的时候需要 )

* dfn - 定义字段

* em - 强调

* font - 字体设定 ( 不推荐 )

* i - 斜体

* img - 图片

* input -输入框

* kbd - 定义键盘文本

* label -表格标签

* q - 短引用

* s - 中划线 ( 不推荐 )

* samp - 定义范例计算机代码

* select- 项目选择

* small -小字体文本

* span - 常用内联容器,定义文本内区块

* strike- 中划线

* strong- 粗体强调

* sub - 下标

* sup - 上标

* textarea - 多行文本输入框

* tt - 电传文本

* u - 下划线

* var - 定义变量

   (2)块元素(block element)

*address - 地址

* blockquote - 块引用

* center - 居中对齐块

* dir - 目录列表

* div - 常用块级容易,也是 css layout 的主要标签

* dl - 定义列表

* fieldset - form控制组

* form - 交互表单

* h1 - 大标题

* h2 - 副标题

* h3 - 3级标题

* h4 - 4级标题

* h5 - 5级标题

* h6 - 6级标题

* hr - 水平分隔线

* isindex - input prompt

* menu - 菜单列表

* noframes - frames可选内容,(对于不支持 frame 的浏览器显示此区块内容

* noscript - )可选脚本内容(对于不支持 script 的浏览器显示此内容)

* ol - 排序表单

* p - 段落

* pre - 格式化文本

* table - 表格

* ul - 非排序列表

可变元素:可变元素为根据上下文语境决定该元素为块元素或者内联元素。

* applet - java applet

* button - 按钮

* del - 删除文本

* iframe - inline frame

* ins - 插入的文本

* map - 图片区块 (map)

* object - object对象

* script - 客户端脚本

(3)空元素(在HTML[1]元素中,没有内容的HTML元素被称为空元素)


//换行


//分割线

//文本框等

//图片

9、什么是WebGL,它有什么优点?

       WebGL(全写 WebGraphics Library )是一种 3D 绘图标准,这种绘图技术标准允许把 JavaScript 和 OpenGL ES 2.0 结合在一起,通过增加 OpenGL ES 2.0 的一个 JavaScript 绑定, WebGL 可以为 HTML5 Canvas 提供硬件 3D 加速渲染,这样 Web 开发人员就可以借助系统显卡来在浏览器里更流畅地展示 3D 场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL 技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂 3D 结构的网站页面,甚至可以用来设计 3D 网页游戏等等。

        WebGL完美地解决了现有的 Web 交互式三维动画的两个问题:

第一,它通过HTML脚本本身实现 Web 交互式三维动画的制作,无需任何浏览器插件支持 ;

第二,它利用底层的图形硬件加速功能进行的图形渲染,是通过统一的、标准的、跨平台的OpenGL接口实现的。

       通俗说WebGL中 canvas 绘图中的 3D 版本。因为原生的 WebGL 很复杂,我们经常会使用一些三方的库,如 three.js 等,这些库多数用于 HTML5 游戏开发。

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

       (1)cookies:一小段文本信息,伴随着用户请求和页面在服务器和浏览器之间传递。因为HTTP协议是无状态,对于一个浏览器发出的多次请求,web服务器无法区分是否来自同一个浏览器,此时需要额外的数据用于维持会话。
       (2)sessionStorage:用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问,会话结束数据随之销毁,它并非持久化的本地存储。

        (3)localStorage:用于持久化的本地存储,除非主动删除数据,否则数据永远都不会过期。

       sessionStorage 和 localStorage 是 HTML5 Web Storage API 提供的,可以方便的在 web 请求之间保存数据。有了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递。

        sessionStorage、 localStorage 、 cookie 都是在浏览器端存储的数据,其中 sessionStorage 的概念很特别,引入了一个“浏览器窗口”的概念。sessionStorage 是在同源的同窗口(或 tab)中,始终存在的数据。也就是说只要这个浏览器窗口没有关闭,即使刷新页面或进入同源另一页面,数据仍然存在。关闭窗口后, sessionStorage 即被销毁。同时“独立”打开的不同窗口,即使是同一页面, sessionStorage 对象也是不同的。cookies会发送到服务器端。其余两个不会。

       Microsoft 指出 Internet Explorer 8 增加 cookie 限制为每个域名 50 个,但 IE7 似乎也允许每个域名 50 个 cookie 。 Firefox 每个域名 cookie 限制为 50 个。 Opera 每个域名 cookie 限制为 30 个。 Firefox 和 Safari 允许 cookie 多达 4097 个字节,包括名( name )、值( value )和等号。 Opera 许 cookie 多达 4096 个字节,包括:名( name )、值( value )和等号。 Internet Explorer 允许 cookie 多达 4095 个字节,包括:名( name )、值( value )和等号。

区别:

Cookie

l  每个域名存储量比较小(各浏览器不同,大致4k)

l  所有域名的存储量有限制(各浏览器不同,大致4k)

l  有个数限制(各浏览器不同)

l  会随请求发送到服务器

LocalStorage

l  永久存储

l  单个域名的存储量有限制(推荐5MB,各浏览器不同)

l  总体数量无限制

SessionStorage

l  只在Session内有效

l  存储量更大(推荐没有限制,但是实际上各浏览器也不同)

11、对HTML语义化的理解?

什么是HTML语义化?

       (基本都是围绕着几个主要的标签,像标题(H1~H6)、列表(li)、强调(strong em)等等)根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。

为什么要语义化?

       为了在没有CSS的情况下,页面也能呈现出很好地内容结构、代码结构;

       用户体验:例如title、alt用于解释名词或解释图片信息、label标签的活用;

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

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

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

语义化标签

SM:用来在页面找那个表示一套结构完整且独立的内容部分。

       

SM:主题的附属信息(用途很广,主要就是一个附属内容),如果article里面为一篇文章的话,那么文章的作者以及信息内容就是这篇文章的附属内容了。

         SM:媒体元素,比如一些视频,图片等等。

         SM:选项列表,与input元素配合使用,来定义input可能的值。

         

SM:用于描述文档或者文档某个部分的细节,默认属性为open,配合summary一起使用。

12、link和@import的区别?

XML/HTML代码

XML/HTML代码


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

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

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

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

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

13、对SVG的理解?

       SVG可缩放矢量图形(ScalableVector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。 SVG 是 W3C('World Wide Web ConSortium' 即“国际互联网标准组织”)在2000年 8 月制定的一种新的二维矢量图形格式,也是规范中的网络矢量图形标准。SVG 严格遵从 XML 语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。SVG 于 2003 年 1 月 14 日成为 W3C 推荐标准。

特点:

(1)   任意缩放

            用户可以任意缩放图像显示,而不会破坏图像的清晰度、细节等。

(2)   文本独立

           SVG图像中的文字独立于图像,文字保留可编辑和可搜寻的状态。也不会再有字体的限制,用户系统即使没有安装某一字体,也会看到和他们制作时完全相同的画面。

(3)   较小文件

           总体来讲,SVG文件比那些 GIF 和 JPEG 格式的文件要小很多,因而下载也很快。

(4)  超强显示结果

          SVG图像在屏幕上总是边缘清晰,它的清晰度适合任何屏幕分辨率和打印分辨率。

(5)  超级颜色控制

           SVG图像提供一个1600万种颜色的调色板,支持ICC颜色描述文件标准、RGB、线X填充、渐变和蒙版。

(6) 交互X和智能化

         SVG面临的主要问题一个是如何和已经占有重要市场份额的矢量图形格式Flash竞争的问题,另一个问题就是SVG的本地运行环境下的厂家支持程度。

浏览器支持:

InternetExplorer9, 火狐,谷歌Chrome,Opera和Safari都支持SVG。

IE8和早期版本都需要一个插件,如Adobe SVG浏览器,这是免费提供的。

14、HTML全局属性有哪些?

accesskey 规定激活元素的快捷键;

class 规定元素的一个或多个类名(引用样式表中的类);

contenteditable 规定元素内容是否可编辑;

contextmenu 规定元素的上下文菜单。上下文菜单在用户点击元素时显示。

data-* 用于存储页面或应用程序的私有定制数据。

dir 规定元素中内容的文本方向。

draggable 规定元素是否可拖动。

dropzone 规定在拖动被拖动数据时是否进行复制、移动或链接。

hidden  样式上会导致元素不显示,但是不能用这个属性实现样式。

id 规定元素的唯一 id。

lang 规定元素内容的语言。

spellcheck 规定是否对元素进行拼写和语法检查。

style 规定元素的CSS行内元素。

tabindex 规定元素的tab键次序。

title 规定有关元素的额外信息。

translate 规定是否应该翻译元素内容。

15、超链接target属性的取值和作用?

它的参数值主要有:

_blank:浏览器总在一个新打开、未命名的窗口中载入目标文档。

       _parent:这个目标使得文档载入父窗口或者包含来超链接引用的框架的框架集。如果这个引用是在窗口或者在顶级框架中,那么它与目标_self等效。

        _self:这个目标的值对所有没有指定目标标签是默认目标,它使得目标文档载入并显示在相同的框架或者窗口中作为源文档。这个目标是多余且不必要的,除非和文档标题标签中的target属性一起使用。

       _top:这个目标使得文档载入包含这个超链接的窗口,用_top目标将会清除所有被包含的框架并将文档载入整个浏览器窗口。

16、‘data-’属性的作用是什么?

    ‘data-’为H5新增的为前端开发者提供自定义属性,这些属性集可以通过对象的‘dataset’属性获取,不支持该属性的浏览器可以通过’getAttribute’方法获取:

       需要注意的是:“data-”之后的以连字符分割的多个单词组成的属性,获取的时候使用驼峰风格。所有主流浏览器都支持data-*属性。即:当没有合适的属性和元素时,自定义的data属性是能够存储页面或App的私有的自定义数据。

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

       主要分成两部分:渲染引擎(layoutengineer或RenderingEngine)和JS引擎。

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

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

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

18、常见的浏览器内核是什么?

viewsourceprint?

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

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

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

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

19、iframe有哪些缺点?

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

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

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

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

20、Label的作用是什么,是怎么用的?

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

Number:

注意:label的for属性值要与后面对应的input标签id属性值相同

Number:

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

        数据存储有本地和服务器存储两种方式,这里主要讲解用本地存储方式解决。即调用localStorage、Cookie等本地存储方式。

第一种——调用localStorage

      在一个标签页里面使用localStorage.setItem(key,value)添加(修改、删除)内容;在另一个标签页里面监听storage 事件。即可得到 localstorge 存储的值,实现不同标签页之间的通信。

第二种——调用cookie+setInterval()

       将要传递的信息存储在cookie中,每个一定时间读取cookie消息,即可随时获取要传递的信息。

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

 方法一:通过usemap映射到的circle形

 方法二:设置div的border-radius:50%

方法三:JS实现,获取鼠标点击位置坐标,判断其到原点的距离是否不大于圆的半径,来判断点击位置是否在圆内。

23、title与h3的区别、b与strong的区别、i与em的区别?

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

        Strong是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:会重度,而是表示强调内容。I内容展示为斜体,em表示强调的文本。

Physical Style Elements—自然样式标签: b,i, u, s, pre

Semantic Style Elements -- 语义样式标签: strong,em, ins, del, code

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

24、实现不使用border画出1px高的线,在不同浏览器的标准模式与怪异模式下都能保持一致的效果?

25、HTML5标签的作用?

(1)使web页面的内容更加有序和规范

(2)使搜索引擎更加容易按照HTML5规则识别出有效的内容

(3)使web页面更接近于一种数据字段和表

26、简述一下src与href的区别?

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

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

         

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

       href是 HypertextReference 的缩写,指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,如果我们在文档中添加那么浏览器会识别该文档为css文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么建议使用 link方式来加载 css ,而不是使用 @import 方式。

27、谈谈你对canvas的理解?

      HTML5的canvas元素使用JavaScript在网页上绘制图像。画布是一个矩形区域,您可以控制其每一像素。Canvas拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。canvas可以完成动画、游戏、图标、图像处理等原来需要Flash完成的一些功能。

28、WebSocket与消息推送?

 B/S架构的系统多使用HTTP协议

        HTTP协议的特点:(1)无状态协议(2)用于通过Internet发送请求消息和响应消息(3)使用端口接收和发送消息,默认为80端口,底层通信还是使用Socket完成。

        HTTP协议决定了服务器与客户端之间的连接方式,无法直接实现消息推送(F5已坏),一些变相的解决办法:

双向通信与消息推送

轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。

优点:后端程序编写比较容易。

缺点:请求中有大半是无用,浪费带宽和服务器资源。

实例:适于小型应用。

        长轮询:客户端向服务器发送Ajax请求,服务器接到请求后 hold 住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。

优点:在无消息的情况下不会频繁的请求,耗费资小。

缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。 Comet 异步的 ashx ,

实例:WebQQ、Hi 网页版、FacebookIM 。

        长连接:在页面里嵌入一个隐蔵iframe,将这个隐蔵 iframe 的 src 属性设为对一个长连接的请求或是采用 xhr 请求,服务器端就能源源不断地往客户端输入数据。

优点:消息即时到达,不发无用请求;管理起来也相对便。

缺点:服务器维护一个长连接会增加开销。

实例:Gmail聊天

        Flash Socket:在页面中内嵌入一个使用了Socket 类的 Flash 程序 JavaScript 通过调用此 Flash 程序提供的 Socket 接口与服务器端的 Socket 接口进行通信, JavaScript 在收到服务器端传送的信息后控制页面的显示。

优点:实现真正的即时通信,而不是伪即时。

缺点:客户端必须安装Flash插件;非 HTTP 协议,无法自动穿越防火墙。

实例:网络互动游戏。 

        Websocket:

        WebSocket是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信。

特点:

a、事件驱动

b、异步

c、使用 ws 或者 wss 协议的客户端 socket

d、能够实现真正意义上的推送功能

缺点:少部分浏览器不支持,浏览器支持的程度与方式有区别。

29、img的title和alt有什么区别?

Alt用于图片无法加载时显示,Title为该属性提供信息,通常当鼠标滑动到元素上的时候显示。

30、表单的基本组成部分有哪些,表单的主要用途是什么?

组成:表单标签、表单域、表单按钮

a、表单标签:这里面包含了处理表单数据所用 CGI 程序的 URL, 以及数据提交到服务器的方法。

b、表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框、和文件上传框等。

        c、表单按钮:包括提交按钮,复位按钮和一般按钮;用于将数据传送到服务器上的 CGI 脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

        主要用途:表单在网页中主要负责数据采集的功能,和向服务器传送数据。

31、表单提交中get和post方式的区别?

(1)get是从服务器上获取数据,post是向服务器传送数据。

        (2)get 是把参数数据队列加到提交表单的 ACTION 属性所指的 URL 中,值和表单内各个字段一一对应,在 URL 中可以看到。post 是通过 HTTP post 机制,将表单内各个字段与其内容放置在 HTML HEADER 内一起传送到ACTION 属性所指的 URL 地址,用户看不到这个过程。

        (3)对于 get 方式,服务器端用 Request.QueryString 获取变量的值,对于 post 方式,服务器端用 Request.Form 获取提交的数据。

        (4)get 传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4 中最大量为 80KB,IIS5 中为 100KB 。

        (5)get 安全性低,post 安全性较高。

32、HTML5有哪些新增的表单元素?

新增表单元素:

email:提交表单的时候验证输入值是否满足email格式

url:提交表单的时候验证输入值是否满足url的格式:

         number:根据你的设置提供选择数字的功能,其中min为最小值,max为最大值,value为默认值,step为点击箭头时数字的变化量,max,min,step,value均可不写,目前某些浏览器还不支持。

         range:会以一个滑块的形式表现包含一定范围内数字值的输入域,max为最大值,min为最小值,value为默认值,如果没有设置max和min,默认值是1-100。

date:选取日、月、年

month:选取月、年

week:选取周、年

time:选取小时、分钟

datetime:选取时间、日、月、年(UTC时间)

datetime-local:选取时间、日、月、年(本地时间)

 

search:用于搜索域,若加上result=“s”属性,则会在搜索框前面加一个搜索图标

tel:验证输入的是否是电话号码的格式

       color:color类型会提供颜色拾取器,供用户选择颜色,并将用户选择的颜色填充到此元素中

33、HTML5废弃了哪些HTML4标签?

         frame frameset noframe appletbig center basefront

34、HTML5提供的应用程序API主要有:

     Media API、Text TrackAPI、Application Cache API、UserInteraction、Data Transfer API、CommandAPI、Constraint Validation API、HistoryAPI

35、HTML5存储类型有什么区别?

HTML5能够本地存储数据,在之前都是使用cookies使用的。HTML5提供了下面两种本地存储方案:

localStorage:用于持久化的本地存储,数据永远不会过期,关闭浏览器也不会丢失。

        sessionStorage:同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。

36、应用程序缓存和浏览器缓存有什么区别?

       应用程序缓存是HTML5的重要特性之一,提供了离线使用的功能,让应用程序可以获取本地的网站内容,例如HTML、CSS、图片以及JavaScript。这个特性可以提高网站性能,它的实现借助于manifest文件,如下:

…..

        与传统浏览器缓存相比,它不强制用户访问的网站内容被缓存。

37、HTML5 Canvas元素有什么用?

         Canvas元素用于在网页上绘制图形,该元素标签的强大之处在于可以直接在HTML上进行图形操作

38、除了audio和video,HTML5还有哪些媒体标签?

HTML5对于多媒体提供了强有力的支持,除了 audio 和 video 标签外,还支持以下标签:

标签定义嵌入的内容,比如插件。

对于定义多个数据源很有用。

    

    

        标签为诸如 video 元素之类的媒介规定外部文本轨道。 用于规定字幕文件或其他包含文本的文件,当媒介播放时,这些文件是可见的。

    

    

    

    

        据源很有用。标签为诸如 video 元素之类的媒介规定外部文本轨道。 用于规定字幕文件或其他包含文本的文件,当媒介播放时,这些文件是可见的。

39、HTML5中如何嵌入视频?

和音频类似,HTML5支持MP4、WebM和Ogg格式的视频,下面是简单示例:

40、HTML5中如何嵌入音频?

HTML5支持 MP3 、 Wav 和 Ogg 格式的音频,下面是在网页中嵌入音频的简单示例:

41、新的HTML5文档类型和字符集是?

HTML5文档类型很简单:

HTML5使用UTF-8编码示例:

42、解释一下CSS的盒子模型?

标准的盒模型:width = content

IE盒模型:width = content+padding-Left+padding-right+border-left+ border-right

43、请你说说CSS选择器的类型有哪些,并举几个例子说明其用法?

CSS选择器有以下:

1.元素选择器(又称为类型选择器)

html{color:black;}

h1{color:blue;}

h2{color:silver;}

2.类选择器

Thisheading is very important.

3.ID选择器

This is a paragraph of introduction.

4.属性选择器

a[href]{color:red;}

5.后代选择器(又称为包含选择器)

h1em {color:red;}

6.子元素选择器

h1> strong {color:red;}

7.相邻兄弟选择器

h1+ p {margin-top:50px;}

44、CSS有什么特殊性?(优先级、计算特殊值)

一般情况下,优先级如下:

       (外部样式)External style sheet <(内部样式)Internalstyle sheet <(内联样式)Inline style有个例外的情况,就是如果外部样式放在内部样式的后面,则外部样式将覆盖内部样式。

内联样式表的权值最高1000;

ID 选择器的权值为 100

Class 类选择器的权值为 10

HTML 标签选择器的权值为 1

45、要动态改变层中内容可以使用的方法?

innerHTML,innerText

46、常见浏览器兼容性问题与解决方案

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

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

碰到频率:100%

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

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

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

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

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

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

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

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

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

碰到频率:60%

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

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

(4)浏览器兼容问题四:行内属性标签,设置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。

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

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

碰到几率:20%

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

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

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

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

碰到几率:5%

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

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

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

        一般在ie中用的是filter:alpha(opacity=0);这个属性来设置div或者是块级元素的透明度,而在firefox中,一般就是直接使用opacity:0,对于兼容的,一般的做法就是在书写css样式的将2个都写上就行,就能实现兼容

47、列出display的值并说明它们的作用?

      display: none | inline | block |list-item | inline-block | table | inline-table | table-caption | table-cell |table-row | table-row-group | table-column | table-column-group |table-footer-group | table-header-group | run-in | box | inline-box | flexbox |inline-flexbox | flex | inline-flex

默认值:inline

none: 隐藏对象。与visibility属性的hidden值不同,其不为被隐藏的对象保留其物理空间

inline: 指定对象为内联元素。

block: 指定对象为块元素。

list-item: 指定对象为列表项目。

inline-block: 指定对象为内联块元素。(CSS2)

table: 指定对象作为块元素级的表格。类同于html标签

(CSS2)

inline-table: 指定对象作为内联元素级的表格。类同于html标签

(CSS2)

table-caption: 指定对象作为表格标题。类同于html标签

(CSS2)

table-row-group: 指定对象作为表格行组。类同于html标签

(CSS2)

table-column: 指定对象作为表格列。类同于html标签

(CSS2)

table-column-group: 指定对象作为表格列组显示。类同于html标签

(CSS2)

table-header-group: 指定对象作为表格标题组。类同于html标签

(CSS2)

table-footer-group: 指定对象作为表格脚注组。类同于html标签

(CSS2)

run-in: 根据上下文决定对象是内联对象还是块级对象。(CSS3)

box: 将对象作为弹性伸缩盒显示。(伸缩盒最老版本)(CSS3)

inline-box: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒最老版本)(CSS3)

flexbox: 将对象作为弹性伸缩盒显示。(伸缩盒过渡版本)(CSS3)

inline-flexbox: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒过渡版本)(CSS3)

flex: 将对象作为弹性伸缩盒显示。(伸缩盒最新版本)(CSS3)

inline-flex: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒最新版本)(CSS3)

48、如何居中div,如何居中一个浮动元素?

(1)非浮动元素居中:可以设置margin:0 auto另其居中,定位,父级元素text-align:center等等

(2)浮动元素居中:

方法一:设置当前div的宽度,然后设置margin-left:50%;position:relative;left:-250px;其中的left是宽度的一半。

方法二:父元素和子元素同时左浮动,然后父元素相对左移动50%,再然后子元素相对左移动-50%。

方法三:position定位等等。

49、CSS中link和@import的区别是?

(1)link属于HTML标签,而@import是CSS提供的;

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

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

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

50、请列举几种清除浮动的方法(至少两种)?

(1)父级div定义 height

原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。

优点:简单、代码少、容易掌握

缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题

建议:不推荐使用,只建议高度固定的布局时使用

(2)结尾处加空div标签 clear:both

原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度

优点:简单、代码少、浏览器支持好、不容易出现怪问题

缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好

建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法

(3)父级div定义 伪类:after 和zoom

原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题

优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)

缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持。

建议:推荐使用,建议定义公共类,以减少CSS代码。

(4)父级div定义 overflow:hidden

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度

优点:简单、代码少、浏览器支持好

缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。

建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用。

(5)父级div定义 overflow:auto

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度

优点:简单、代码少、浏览器支持好

缺点:内部宽高超过父级div时,会出现滚动条。

建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。

51、block, inline和inline-block细节对比?

display:block:

a、block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。

b、block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。

c、block元素可以设置margin和padding属性。

display:inline

        a、inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。

b、inline元素设置width,height属性无效。

        c、inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;但竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。

display:inline-block

        a、 简单来说就是将对象呈现为inline对象,但是对象的内容作为block对象呈现。之后的内联对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性。

        补充说明:

        a、一般我们会用display:block,display:inline或者display:inline-block来调整元素的布局级别,其实display的参数远远不止这三种,仅仅是比较常用而已。

        b、IE(低版本IE)本来是不支持inline-block的,所以在IE中对内联元素使用display:inline-block,理论上IE是不识别的,但使用display:inline-block在IE下会触发layout,从而使内联元素拥有了display:inline-block属性的表象。

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

       优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效。

       渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥作用。

53、说说浮动元素会引起的问题和你的解决办法?

问题:

(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 */

清除浮动的几种方法:

       (1)额外标签法,

(缺点:不过这个办法会增加额外的标签使HTML结构看起来不够简洁。)

       (2)使用after伪类

#parent:after{

  content:" ";

  height:0;

  visibility:hidden;

  display:block;

  clear:both;}

(3)浮动外部元素

(4)设置overflow为hidden或者auto

54、有哪些性能优化的方法?

        (1)减少http请求次数:CSSSprites,JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存,图片服务器。

        (2)前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数

(3)用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。

(4)当需要设置的样式很多时设置className而不是直接操作style。

(5)少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。

(6) 避免使用CSS Expression(css表达式)又称Dynamicproperties(动态属性)。

(7)图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。

         回答二: (1)、减少HTTP请求次数 (2)、使用CDN (3)、避免空的src和href (4)、为文件头指定Expires (5)、使用gzip压缩内容 (6)、把CSS放到顶部 (7)、把JS放到底部 (8)、避免使用CSS表达式  (9)、将CSS和JS放到外部文件中 (10)、避免跳转  (11)、可缓存的AJAX (12)、使用GET来完成AJAX请求

55、为什么要初始化CSS样式?

        因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。*最简单的初始化方法就是: * {padding: 0; margin: 0;} (不建议)

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

浮动是用来做网页布局的, 主要用在块级元素的横向布局上.

1.浮动的值只有左浮动(left)和右浮动(right)

2.设置了浮动的元素,大小与元素的大小由内容撑出.

3.设置了浮动的元素可以设置宽高.

4.设置了浮动的元素,水平浮动,直到遇到父级的边框或者另外一个浮动元素停止浮动.

5.设置了浮动的元素,脱离文档流,会影响到它后面的元素.(如果后面元素里有图片或者文字,图片或者文字不受影响)

6.设置了浮动的元素,自动margin失效.

Clear:

1.  left

2.  right

3.  both

     ***clear样式,谁受影响加给谁!!! -->

当父级没有设置高度时,其高度由它里面的内容撑出。此时如果父级里的元素浮动,此时父级会发生“内容塌陷”。

解决办法:

1、 人为设置父级高度;

2、 在浮动元素的最后添加一个空标签,并设置clear:both解决;

3、 给父级添加overflow:hidden样式解决

57、CSS样式表根据所在网页的位置,可分为哪几种样式表?

外部样式表:

        当样式需要被应用到很多页面的时候,外部样式表将是理想的选择。使用外部样式表,你就可以通过更改一个文件来改变整个站点的外观。

内部样式表:

       当单个文件需要特别样式时,就可以使用内部样式表,可以在head部分通过

(CSS2)

table-cell: 指定对象作为表格单元格。类同于html标签

(CSS2)

table-row: 指定对象作为表格行。类同于html标签