1. 前言
本文讲解前端面试的 HTML 的内容。
复习前端面试的知识,是为了巩固前端的基础知识,最重要的还是平时的积累!
注意
:文章的题与题之间用下划线分隔开,答案仅供参考。
笔者技术博客首发地址 GitHub,欢迎关注。
2. HTML
为什么利用多个域名来存储网站资源会更有效?
确保用户在不同地区能用最快的速度打开网站,其中某个域名崩溃用户也能通过其他域名访问网站。
window 常用属性与方法有哪些?
window 对象的常用属性
- window.self 返回当前窗口的引用
- window.parent 返回当前窗体的父窗体对象
- window.top 返回当前窗体最顶层的父窗体的引用
- window.outerwidth 返回当前窗口的外部宽
- window.outerheight 返回当前窗口的外部高
- window.innerwidth 返回当前窗口的可显示区域宽
- window.innerheight 返回当前窗口的可显示区域高
提示:通过直接在 Chrome 控制台中输入 console.log(window) 可以查看到其所有的被当前浏览器支持的属性及值。
window 对象的常用方法
- window.prompt() 弹出一个输入提示框,若用户点击了“取消”则返回 null
- window.alert() 弹出一个警告框
- window.confirm() 弹出一个确认框
- window.close() 关闭当前浏览器窗口。有些浏览器对此方法有限制。
- window.open(uri, [name], [features]) 打开一个浏览器窗口,显示指定的网页。name 属性值可以是“_blank”、“_self”、“_parent”、“_top”、任意指定的一个窗口名。
- window.blur() 指定当前窗口失去焦点
- window.focus() 指定当前窗口获得焦点
- window.showModalDialog(uri, [dataFromParent]) 打开一个“模态窗口”(打开的子窗口只要不关闭,其父窗口即无法获得焦点;且父子窗口间可以传递数据)
document 常用属性与方法有哪些?
document 常见的属性
- body 提供对 <body> 元素的直接访问。对于定义了框架集的文档,该属性引用最外层的 <frameset>。
- cookie 设置或返回与当前文档有关的所有 cookie。
- domain 返回当前文档的域名。
- lastModified 返回文档被最后修改的日期和时间。
- referrer 返回载入当前文档的文档的 URL。
- title 返回当前文档的标题。
- URL 返回当前文档的 URL。
document 常见的方法
- write():动态向页面写入内容
- createElement(Tag):创建一个 HTML 标签对象
- getElementById(ID):获得指定 id 的对象
- getElementsByName(Name):获得之前 Name 的对象
- body.appendChild(oTag):向 HTML 中插入元素对象
简述一下 src 与 href 的区别
- href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。
- src 是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;
- 在请求 src 资源时会将其指向的资源下载并应用到文档内,例如 js 脚本,img 图片和 frame 等元素。
当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将 js 脚本放在底部而不是头部。
写一个 div + css 布局,左边图片,右边文字,文字环绕图片,外面容器固定宽度,文字不固定。
直接就一个 img,它 float:left,加文字加 p 标签就好了。
html 中 title 属性和 alt 属性的区别?
- alt
<img src="#" alt="alt 信息" />
当图片不输出信息的时候,会显示 alt 信息,鼠标放上去没有信息。
当图片正常读取,不会出现 alt 信息。
- title
<img src="#" alt="alt 信息" title="title 信息" />
当图片不输出信息的时候,会显示 alt 信息,鼠标放上去会出现 title 信息。
当图片正常输出的时候,不会出现 alt 信息,鼠标放上去会出现 title 信息。—
讲述你对 reflow 和 repaint 的理解。
repaint 就是重绘,reflow 就是回流。
严重性:在性能优先的前提下,性能消耗 reflow 大于 repaint。
体现:repaint 是某个 DOM 元素进行重绘;reflow 是整个页面进行重排,也就是页面所有 DOM 元素渲染。
如何触发:style 变动造成 repaint 和 reflow。
- 不涉及任何 DOM 元素的排版问题的变动为 repaint,例如元素的 color/text-align/text-decoration 等等属性的变动。
- 除上面所提到的 DOM 元素 style 的修改基本为 reflow。例如元素的任何涉及 长、宽、行高、边框、display 等 style 的修改。
常见触发场景
触发 repaint:
- color 的修改,如 color=#ddd;
- text-align 的修改,如 text-align=center;
- a:hover 也会造成重绘。
- :hover 引起的颜色等不导致页面回流的 style 变动。
触发 reflow:
- width/height/border/margin/padding 的修改,如 width=778px;
- 动画,:hover 等伪类引起的元素表现改动,display=none 等造成页面回流;
- appendChild 等 DOM 元素操作;
- font 类 style 的修改;
- background 的修改,注意着字面上可能以为是重绘,但是浏览器确实回流了,经过浏览器厂家的优化,部分 background 的修改只触发 repaint,当然 IE 不用考虑;
- scroll 页面,这个不可避免;
- resize 页面,桌面版本的进行浏览器大小的缩放,移动端的话,还没玩过能拖动程序,resize 程序窗口大小的多窗口操作系统。
- 读取元素的属性(这个无法理解,但是技术达人是这么说的,那就把它当做定理吧):读取元素的某些属性(offsetLeft、offsetTop、offsetHeight、offsetWidth、scrollTop/Left/Width/Height、clientTop/Left/Width/Height、getComputedStyle()、currentStyle(in IE));
如何避免:
- 尽可能在 DOM 末梢通过改变 class 来修改元素的 style 属性:尽可能的减少受影响的 DOM 元素。
- 避免设置多项内联样式:使用常用的 class 的方式进行设置样式,以避免设置样式时访问 DOM 的低效率。
- 设置动画元素 position 属性为 fixed 或者 absolute:由于当前元素从 DOM 流中独立出来,因此受影响的只有当前元素,元素 repaint。
- 牺牲平滑度满足性能:动画精度太强,会造成更多次的 repaint/reflow,牺牲精度,能满足性能的损耗,获取性能和平滑度的平衡。
- 避免使用 table 进行布局:table 的每个元素的大小以及内容的改动,都会导致整个 table 进行重新计算,造成大幅度的 repaint 或者 reflow。改用 div 则可以进行针对性的 repaint 和避免不必要的 reflow。
- 避免在 CSS 中使用运算式:学习 CSS 的时候就知道,这个应该避免,不应该加深到这一层再去了解,因为这个的后果确实非常严重,一旦存在动画性的 repaint/reflow,那么每一帧动画都会进行计算,性能消耗不容小觑。
Doctype 作用?标准模式与兼容模式各有什么区别 ?
- <!DOCTYPE> 声明位于位于 HTML 文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE 不存在或格式不正确会导致文档以兼容模式呈现。
- 标准模式的排版和 JS 运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。
HTML5 为什么只需要写 < !DOCTYPE HTML>?
HTML5 不基于 SGML(标准通用标记语言(以下简称“通用标言”),因此不需要对 DTD 进行引用,但是需要 doctype 来规范浏览器的行为(让浏览器按照它们应该的方式来运行);
而 HTML4.01 基于 SGML,所以需要对 DTD 进行引用,才能告知浏览器文档所使用的文档类型。
行内元素有哪些?块级元素有哪些?空 (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
- 常见的空元素:img input link meta br hr,鲜为人知的是:area base col command embed keygen param source track wbr
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]-->
简述一下你对 HTML 语义化的理解?
- 1、用正确的标签做正确的事情。
- 2、html 语义化让页面的内容结构化,结构更清晰,
- 3、便于对浏览器、搜索引擎解析;
- 4、即使在没有样式 CSS 情况下也以一种文档格式显示,并且是容易阅读的;
- 5、搜索引擎的爬虫也依赖于 HTML 标记来确定上下文和各个关键字的权重,利于 SEO;
- 6、使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
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 文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
离线的情况下,浏览器就直接使用离线存储的资源。
请描述一下 cookies,sessionStorage 和 localStorage 的区别?
- cookie 是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
- cookie 数据始终在同源的 http 请求中携带(即使不需要),也会在浏览器和服务器间来回传递。
- sessionStorage 和 localStorage 不会自动把数据发给服务器,仅在本地保存。
存储大小
- cookie 数据大小不能超过 4k。
- sessionStorage 和 localStorage 虽然也有存储大小的限制,但比 cookie 大得多,可以达到 5M 或更大。
有期时间
- localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
- sessionStorage 数据在当前浏览器窗口关闭后自动删除。
- cookie 设置的 cookie 过期时间之前一直有效,即使窗口或浏览器关闭。
iframe 内嵌框架有那些缺点?
内联框架 iframe 一般用来包含别的页面,例如 我们可以在我们自己的网站页面加载别人网站的内容,为了更好的效果,可能需要使 iframe 透明效果;
- iframe 会阻塞主页面的 onload 事件;
- 搜索引擎的检索程序无法解读这种页面,不利于 SEO 搜索引擎优化(Search Engine Optimization)
- 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 等本地存储方式;
- localstorge 在另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,我们通过监听事件,控制它的值来进行页面信息通信;
注意 quirks:Safari 在无痕模式下设置 localstorge 值时会抛出 QuotaExceededError 的异常;
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 表示强调的文本;
- Physical Style Elements — 自然样式标签:b, i, u, s, pre
- Semantic Style Elements — 语义样式标签:strong, em, ins, del, code
- 应该准确使用语义样式标签, 但不能滥用, 如果不能确定时,首选使用自然样式标签。
谈谈以前端的角度出发,做好 SEO,需要考虑什么?
- 了解搜索引擎如何抓取网页和如何索引网页
你需要知道一些搜索引擎的基本工作原理,各个搜索引擎之间的区别,搜索机器人(SE robot 或叫 web cra 何进行工作,搜索引擎如何对搜索结果进行排序等等。
- Meta 标签优化
主要包括主题(Title),网站描述(Description),和关键词(Keywords)。还有一些其它的隐藏文字比如 Au 者),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(“冲浪”)。其它网站到你的网站的链接越多,你也就会获得更多的访问量。更重你的网站的外部链接数越多,会被搜索引擎认为它的重要性越大,从而给你更高的排名。
- 标签的合理使用
前端页面有哪三层构成,分别是什么?作用是什么?
网页分成三个层次,即:结构层、表示层、行为层。
- 网页的结构层(structurallayer)由 HTML 或 XHTML 之类的标记语言负责创建。
标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出这些标签不包含任何关于如何显示有关内容的信息。例如,P 标签表达了这样一种语义:“这是一个文本段。”
- 网页的表示层(presentationlayer)由 CSS 负责创建。CSS 对“如何显示有关内容”的问题做出了回答。
- 网页的行为层(behaviorlayer)负责回答“内容应该如何对事件做出反应”这一问题。
这是 Javascript 语言和 DOM 主宰的领域。
有这么一段 HTML,请挑毛病
<P> 哥写的不是 HTML,是寂寞。< br>< br> 我说:< br> 不要迷恋哥,哥只是一个传说
答案:缺少 p 标记的结束标记。
最后
前端硬核面试专题的完整版在此:前端硬核面试专题,包含:HTML + CSS + JS + ES6 + Webpack + Vue + React + Node + HTTPS + 数据结构与算法 + Git。
如果觉得本文还不错,记得给个 star,你的 star 是我持续更新的动力!。