为了账号安全,请及时绑定邮箱和手机立即绑定

前端工程师面试指南——HTML篇

标签:
Html/CSS Html5

前言

由于近期内心有个大胆的想法,于是就为了这个想法作了一些准备,下面是一些我所整理的面试题,希望不对的地方大家能指出,同时也希望能“抛砖引玉”,有什么好的问题大家一起讨论讨论。

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

  • 声明位于HTML文档中的第一行,处于 `` 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
  • 标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

如果不放入<! DOCTYPE html> ,HTML5还会工作么

不会,浏览器将不能识别他是HTML文档,同时HTML5的标签将不能正常工作

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

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

meta标签是什么

meta是提供给页面的一些元信息(名称/值对),有助于SEO。有以下几个属性值

  • name: 名称/值对中的名称。author、description、keywords、generator、revised、others。 把 content 属性关联到一个名称。
  • http-equiv: 没有name时,会采用这个属性的值。content-type、expires、refresh、set-cookie。把content属性关联到http头部。
  • content : 名称/值对中的值, 可以是任何有效的字符串。 始终要和 name 属性或 http-equiv 属性一起使用。
  • scheme : 用于指定要用来翻译属性值的方案

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

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

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

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

  • 新特性: 绘画 canvas;用于媒介回放的 video 和 audio 元素;语意化更好的内容元素,比如 article、footer、header、nav、section;表单控件,calendar、date、time、email、url、search;
  • 新技术: webworker, websocket, Geolocation,本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失; sessionStorage 的数据在浏览器关闭后自动删除;
  • 移除的元素: basefont,big,center,font, s,strike,tt,u;frame,frameset,noframes;
  • 兼容问题解决: IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签,浏览器支持新标签后,还需要添加标签默认的样式。当然也可以直接使用成熟的框架、比如html5shim

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

  • 用正确的标签做正确的事情。
  • html语义化让页面的内容结构化,结构更清晰,便于对浏览器,搜索引擎解析;
  • 即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
  • 搜索引擎的爬虫也依赖于HTML标记确定上下文和各个关键字的权重,利于SEO;
  • 使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

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

  • 在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。
  • 原理: HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。

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

  • 存储位置: cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密),cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
  • 存储大小: cookie数据大小不能超过4k。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
  • 存储时间: localStorage存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;sessionStorage 数据在当前浏览器窗口关闭后自动删除;cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。

iframe有那些缺点

  • iframe会阻塞主页面的Onload事件;
  • 搜索引擎的检索程序无法解读这种页面,不利于SEO;
  • 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>

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

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

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

  • WebSocket、SharedWorker;
  • 调用localstorge、cookies等本地存储方式;

webSocket如何兼容低浏览器

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

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

  • 通过 visibilityState 的值检测页面当前是否可见,以及打开网页的时间等;
  • 在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放;

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

  • title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取也有很大的影响;
  • strong是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:<strong>会重读,而<b>是展示强调内容;
  • i内容展示为斜体,em表示强调的文本。

  • 共同点: 都是保存在浏览器端,且同源的。
  • 不同点: cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递;cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。
  • sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
  • 数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
  • 作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便。

HTML 5标签是否一定需要闭合?标签大小写是否敏感

不一定;不敏感,但是推荐要用小写标签

HTML 中的DOM树

HTML DOM定义访问和操作HTML文档的标准方法。DOM将HTML文档表达为树结构。
image
W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。W3C DOM 标准被分为 3 个不同的部分:

  • 核心DOM,针对任何结构化文档的标准模型;
  • XML DOM,针对XML文档的标准模型;
  • HTML DOM,针对HTML文档的标准模型,它是标准对象模型,是标准编程接口;

根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:整个文档是一个文档节点、每个HTML元素是元素节点、HTML元素内的文本是文本节点、每个HTML属性是属性节点、注释是注释节点。

XHTML和HTML有什么区别

  • HTML是一种基本的web网页设计语言,XHTML是一个基于XML的置标语言;
  • XHTML元素必须被正确的嵌套;
  • XHTML元素必须被关闭;
  • XHTML元素必须使用小写字母;
  • XHTML文档必须拥有根元素。

canvas和svg图形的区别是什么

image

常见的浏览器内核

  • Trident内核: IE,MaxThon,TT,The Word,360,搜狗浏览器等。
  • Gecko内核: Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等;
  • Presto内核: Opera7及以上。[现为:Blink]
  • Webkit内核: Safari,Chrome等。[Chrome的:Blink(Webkit的分支)]

简单介绍对浏览器内核的理解

浏览器内核主要分成两部分,渲染引擎和JavaScript引擎。最开始渲染引擎和JS引擎并没有区分得很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。下面是关于这两个引擎的一些介绍

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

html5哪些标签可以做SEO优化

title、meta、header、footer、nav、article、aside

src和href的区别

  • src是指向外部资源的位置,指向的内容会嵌入到文档中当前标签所在的位置,在请求src资源时会将其指向的资源下载并应用到文档内,如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,知道将该资源加载、编译、执行完毕,所以一般js脚本会放在底部而不是头部。
  • href是指网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。

渐进增强和优雅降级

  • 渐进增强: 针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能,达到更好的用户体验。
  • 优雅降级: 一开始就构建完整的功能,然后再针对低版本的浏览器进行兼容。

defer和async的区别

  • defer要等到整个页面在内存中正常渲染结束(DOM结构完全生成,以及其他脚本执行完成),才会执行。多个defer脚本会按照它们在页面出现的顺序加载,意思就是渲染完再执行。
  • async一旦下载完,渲染引擎就会中断渲染,执行这个脚本以后,再继续渲染。多个async脚本是不能保证加载顺序的,意思就是下载完就执行。

尾声

各位老铁踊跃发盐呐,后面还有几篇。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
114
获赞与收藏
415

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消