### 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
- 空元素:
  - 常见: br hr img input link meta
  - 不常见: area base col command embed keygen param source track wbr

不同浏览器(版本)、HTML4(5)、CSS2 等实际略有差异
参考: http://stackoverflow.com/questions/6867254/browsers-default-css-for-html-elements

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

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

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

主要分成两部分:渲染引擎(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 的分支)]

详细文章:[浏览器内核的解析和对比](http://www.cnblogs.com/fullhouse/archive/2011/12/19/2293455.html)

### 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;

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

- 如何区分 HTML5: DOCTYPE 声明\新增的结构元素\功能元素
    ```html
    - 新增的结构元素:
    (1)section
    表示页面中的一个内容区块,比如章节,页眉,页脚或页面中的其他部分。它可以与h1,h2,h3,h4,h5,h6等元素结合起来使用,标示文档结构。
    (2)article
    表示页面中的一块与上下文不相关的独立内容,譬如博客中的一篇文章或报纸中的一篇文章。
    (3)aside
    表示article元素的内容之外的,与article元素的内容相关的辅助信息。
    (4)header
    表示页面中一个内容区块或整个页面的标题。
    (5)hgroup
    用于对整个页面或页面中一个内容区块的标题进行组合。
    (6)footer
    表示整个页面或页面中一个内容区块的脚注。一般来说,它会包含创作者的姓名,创作日期以及创作者联系信息。
    (7)nav
    表示页面中导航链接的部分。
    (8)figure
    表示一段独立的流内容,一般表示文档主体流内容的一个独立单元。使用figcaption元素为figure元素组添加标题。
    ```
    ```html
    - 新增的功能元素:
    hgroup元素:用于对整个页面或页面中一个内容区块的标题进行组合。
    figure元素:表示一段独立的流内容,一般表示文档主题流内容中的一个独立单元。
    video元素:定义视频,比如电影片段或其他视频流。
    audio元素:定义音频,比如音乐或其他音频流。
    embed元素:用来插入各种多媒体,格式可以是MIDI、WAV、AIFF、AU、MP3等。
    mark元素:主要用来在视觉上向用户呈现需要突出显示或高亮显示的文字。
    time元素:表示日期或时间,也可以同时表示两者。
    canvas元素:表示图形,如图表和其他图像。
    output元素:表示不同类型的输出,比如脚本的输出。
    source元素:为媒介元素定义媒介资源。
    menu元素:表示菜单列表。当希望列出表单控制时使用该标签。
    ruby元素:表示ruby注释。
    rt元素:表示字符的解释或发音。
    rp元素:在ruby解释中使用,以定义不支持ruby元素的浏览器所显示的内容。
    wbr元素:表示软换行。
    command元素:表示命令按钮,如单选按钮、复选框或按钮。
    details元素:表示用户要求得到并且可以得到的细节信息,可与summary 元素配合使用。
    datalist元素:可选数据的列表,与input元素配合使用,可以制作出输入值的下拉列表。
    datagrid元素:表示可选数据的列表,它以树形列表的形式来显示。
    keygen元素:表示生成密钥。
    progress元素:表示运行中的进程,可以使用progress来显示JavaScript中耗费时间的函数的进程。
    email:表示必须输入E-mail地址的文本输入框。
    url:表示必须输入URL地址的文本输入框。
    number:表示必须输入数值的文本输入框。
    range:表示必须输入一定范围内数字值的文本输入框。
    Date Pickers:HTML5拥有多个可供选取日期和时间的新型输入文本框。
    ```
### 简述一下你对 HTML 语义化的理解?

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

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

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

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

如何使用:

1. 页面头部像下面一样加入一个 manifest 的属性;
2. 在 cache.manifest 文件的编写离线存储的资源

```
CACHE MANIFEST
#v1.0

CACHE:
js/app.js
css/style.css

NETWORK:
assets/logo.png

FALLBACK:
/html5/ /404.html
```

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

参考链接:[HTML5 离线缓存-manifest 简介](https://yanhaijing.com/html/2014/12/28/html5-manifest/)

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

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

动态给 iframe 添加 src 属性值,这样可以绕开以上两个问题。

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

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

```html
  <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 的值检测页面当前是否可见,以及打开网页的时间等;
- 在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放;

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

- map+area 或者 svg
- border-radius
- 纯 js 实现 需要求一个点在不在圆上简单算法、获取鼠标坐标等等

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

```html
 <div style="height:1px;overflow:hidden;background:red"></div>
```

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

- 区分用户是计算机还是人的公共全自动程序。可以防止恶意破解密码、刷票、论坛灌水;
- 有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。

### 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

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

### html 中 title 属性和 alt 属性的区别?

```html
<img src="#" alt="alt信息" />
```

当图片不输出信息的时候,会显示 alt 信息 鼠标放上去没有信息,当图片正常读取,不会出现 alt 信息。

```html
<img src="#" alt="alt信息" title="title信息" />
```

当图片不输出信息的时候,会显示 alt 信息 鼠标放上去会出现 title 信息;
当图片正常输出的时候,不会出现 alt 信息,鼠标放上去会出现 title 信息。

### 另外还有一些关于 title 属性的知识:

- title 属性可以用在除了 base,basefont,head,html,meta,param,script 和 title 之外的所有标签。
- title 属性的功能是提示。额外的说明信息和非本质的信息请使用 title 属性。title 属性值可以比 alt 属性值设置的更长。
- title 属性有一个很好的用途,即为链接添加描述性文字,特别是当连接本身并不是十分清楚的表达了链接的目的。

有关HTML的小众面试题相关推荐

  1. 【产品面试】经典的一些面试题回顾

    转自:https://www.cnblogs.com/lianghong/p/9339594.html 产品经理面试习题大汇总(一) 1.介绍一下你自己. 介绍一下自己的姓名,年龄.毕业院校,工作经历 ...

  2. 字节面试官推荐的一份 Java 基础面试题!太顶了

    Java 基础篇 Java 有哪些特点 并发性的: 你可以在其中执行许多语句,而不必一次执行它 面向对象的:基于类和面向对象的编程语言. 独立性的: 支持一次编写,到处运行的独立编程语言,即编译后的代 ...

  3. BAT 大厂Java 面试题集锦之核心篇附参考答案

    核心篇 数据结构与算法 网路:TCP/IP, HTTP 操作系统, 文件, shell, CPU, IO, epoll, 非阻塞IO, 进程/线程/协程,锁 HashMap, ConcurrentHa ...

  4. 2022最新200道软件测试面试题

    2022最新200道软件测试面试题 一.自我介绍 二.项目 三.测试基础 四,接口自动化测试 四,数据库方面 五.python自动化:代码熟悉程度 六,测试用例 一.自我介绍 二.项目 一般都是问最近 ...

  5. 个人总结:机器学习与算法工程师方向面试题及答案(持续更新)

    机器学习与算法工程师方向面试题及答案 1.快速排序 2.列表中是否有这个数--二分查找 3.拉格朗日对偶性 4.k-means原理及复杂度 5.逻辑回归和SVM区别 6.过拟合问题怎么解决 7.PCA ...

  6. 网络安全-常见面试题(Web、渗透测试、密码学、Linux等)

    目录 WEB安全 OWASP Top 10(2017) Injection - 注入攻击 Broken Authentication-失效的身份认证 Sensitive Data Exposure-敏 ...

  7. 面试前必读【面经+(BAT面试题)】

    转载自[奥特曼超人]的博客: http://blog.csdn.net/djy1992/article/details/76087532 0. 写在之前 首先呢我的面试经历和一些面霸和收割机的大神相比 ...

  8. RocketMQ面试题及答案

    RocketMQ面试题及答案 1. RocketMQ是什么? RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 A ...

  9. 精尽 Spring 面试题

    以下面试题,基于网络整理,和自己编辑.具体参考的文章,会在文末给出所有的链接. 如果胖友有自己的疑问,欢迎在星球提问,我们一起整理吊吊的 Spring 面试题的大保健. 而题目的难度,艿艿尽量按照从容 ...

  10. mysql关于时间的面试题,mysql时间设置默认值MySQL常见面试题

    1.limit(选出10 到20 条) select * from students order by id limit 9,10; 2.MySQL 会使用索引的操作符号 =,>,=,betwe ...

最新文章

  1. c++扔鸡蛋问题egg dropping puzzle(附完整源码)
  2. Stream流中的常用方法_count
  3. echart移上去显示内容_echarts如何移动到柱状图上显示自己想显示的提示信息
  4. [PAT乙级]1010 一元多项式求导
  5. Java面试题:IO流中read()方法为什么返回值是int
  6. windows 搭建kms服务器激活_windows下搭建MQTT服务器
  7. 2021-2025年中国车轮运动防护产品行业市场供需与战略研究报告
  8. 【BlackHat】亚马逊和谷歌修复DNS即平台中的严重漏洞
  9. MongoDb In Action
  10. 读EasyPR开发详解实践感想1
  11. HTTP1.1之后的长连接和WebSocket的长连接之间的区别
  12. perl操作postsql
  13. 什么是ctfmon.exe,为什么运行?
  14. 抓取青果教务系统信息
  15. Python实现网络爬虫
  16. android获取安卓版本,Android获取手机系统版本等信息的方法
  17. UDP头部结构,UDP校验和计算
  18. pug在vue中的序列写法
  19. 中国人民大学计算机专硕好考吗,干货:中国人民大学考研复试成功经验分享,值得收藏!...
  20. 福利分享:1024程序员节,给大家推荐一个极简win10

热门文章

  1. mysql怎么改gm_MySQL修改密码的几种方式
  2. Matlab动态PID仿真及PID知识梳理
  3. CM108AH和DP108/DP108T的区别
  4. SDN相关组织之ODL(opendaylight)
  5. 能否用一种语言来培养编程思维以及养成世界观
  6. ps修改图片上文字的几种方法 图+文
  7. 云计算教程:小型云计算平台怎么搭建?
  8. Adobe又逆天!不用机器学习,用13.5M软件把《长安十二时辰》变成水墨动画
  9. php 知乎源代码,PHP最新仿知乎问答社区源码下载带行业打赏问答支持文章、话题、第三方登录、文章和问题打赏...
  10. Linux解压zip格式压缩包