HTML之面试题(一)

1.什么是 DOCTYPE, 有何作用?

Doctype是HTML5的文档声明,通过它可以告诉浏览器,使用哪一个HTML版本标准解析文档。在浏览器发展的过程中,HTML出现过很多版本,不同的版本之间格式书写上略有差异。如果没有事先告诉浏览器,那么浏览器就不知道文档解析标准是什么?此时,大部分浏览器将开启最大兼容模式来解析网页,我们一般称为怪异模式,这不仅会降低解析效率,而且会在解析过程中产生一些难以预知的bug,所以文档声明是必须的。

2.说说对 html 语义化的理解

语义化是指根据内容的结构化(内容语义化),选择合适的标签(代码语义化) 。通俗来讲就是用正确的标签做正确的事情。

语义化的优点如下:

  • 对机器友好,带有语义的文字表现力丰富,更适合搜索引擎的爬虫爬取有效信息,有利于SEO。除此之外,语义类还支持读屏软件,根据文章可以自动生成目录;
  • 对开发者友好,使用语义类标签增强了可读性,结构更加清晰,开发者能清晰的看出网页的结构,便于团队的开发与维护。

常见的语义化标签:

<h1>~<h6> 标签:标题标签,h1等级最高,h6等级最低
<header></header>:用于定义页面的介绍展示区域,通常包括网站logo、主导航、全站链接以及搜索框
<nav></nav>:定义页面的导航链接部分区域
<main></main>:定义页面的主要内容,一个页面只能使用一次。
<article></article>:定义页面独立的内容,它可以有自己的header、footer、sections等
<section></section>:元素用于标记文档的各个部分,例如长表单文章的章节或主要部分
<aside></aside>:一般用于侧边栏
<footer></footer>:文档的底部信息
<small></small>:呈现小号字体效果
<strong></strong>:用于强调文本

3.前端页面有哪三层构成,分别是什么?

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

  1. 结构层(structural layer)

    结构层类似于盖房子需要打地基以及房子的悬梁框架,它是由HTML超文本标记语言来创建的,也就是页面中的各种标签,在结构层中保存了用户可以看到的所有内容,比如说:一段文字、一张图片、一段视频等等

  2. 表示层(presentation layer)

    表示层是由CSS负责创建,它的作用是如何显示有关内容,学名:层叠样式表,也就相当于装修房子,看你要什么风格的,田园的、中式的、地中海的,总之CSS都能办妥

  3. 行为层(behaviorlayer)

    行为层表示网页内容跟用户之间产生交互性,简单来说就是用户操作了网页,网页给用户一个反馈,这是JavaScriptDOM主宰的领域

4.什么是严格模式与混杂模式?

严格模式:是以浏览器支持的最高标准运行
混杂模式:页面以宽松向下兼容的方式显示,模拟老式浏览器的行为

5.说说你对 WEB 标准以及 W3C 的理解与认识

web 标准简单来说可以分为结构、表现和行为。其中结构主要是有 HTML 标签组成。或许通俗点说,在页面 body 里面我们写入的标签都是为了页面的结构。表现即指 css 样式表,通过 css 可以是页面的结构标签更具美感。

行为是指页面和用户具有一定的交互,同时页面结构或者表现发生变化,主要是由 js 组成。

web 标准一般是将该三部分独立分开,使其更具有模块化。但一般产生行为时,就会有结构或者表现的变化,也使这三者的界限并不那么清晰。

W3C 对 web 标准提出了规范化的要求,也就是在实际编程中的一些代码规范:包含如下几点

  • 对于结构要求:(标签规范可以提高搜索引擎对页面的抓取效率,对 SEO 很有帮助)

    1)标签字母要小写
    2)标签要闭合
    3)标签不允许随意嵌套

  • 对于 css 和 js 来说

    1)尽量使用外链 css 样式表和 js 脚本。是结构、表现和行为分为三块,符合规范。同时提高页面渲染速度,提高用户的体验。
    2)样式尽量少用行间样式表,使结构与表现分离,标签的 id 和 class 等属性命名要做到见文知义,标签越少,加载越快,用户体验提高,代码维护简单,便于改版
    3)不需要变动页面内容,便可提供打印版本而不需要复制内容,提高网站易用性。

6.行级元素和块级元素分别有哪些及怎么转换?

常见的块级元素:p、div、form、ul、li、ol、table、h1、h2、h3、h4、h5、h6、dl、dt、dd

常见的行级元素:span、a、img、button、input、select

常见的空元素:即没有内容的HTML元素。空元素是在开始标签中关闭的,也就是空元素没有闭合标签:

常见的有:<br><hr><img><input><link><meta>
鲜见的有:<area><base><col><colgroup><command><embed><keygen><param><source><track><wbr>

块级元素:

  • 总是在新行上开始,就是每个块级元素独占一行,默认从上到下排列
  • 宽度缺少时是它的容器的100%,除非设置一个宽度
  • 高度、行高以及外边距和内边距都是可以设置的
  • 块级元素可以容纳其它行级元素和块级元素

行内元素:

  • 和其它元素都会在一行显示
  • 高、行高以及外边距和内边距可以设置
  • 宽度就是文字或者图片的宽度,不能改变
  • 行级元素只能容纳文本或者其它行内元素

使用行内元素需要注意的是:

  • 行内元素设置宽度width无效
  • 行内元素设置height无效,但是可以通过line-height来设置
  • 设置margin只有左右有效,上下无效
  • 设置padding只有左右有效,上下无效

可以通过display属性对行内元素和块级元素进行切换(主要看第 2、3、4三个值):

7.H5有哪些新元素和新特性

HTML5主要是关于图像、位置、存储、多任务等功能的增加:

  • 语义化标签,如:article、footer、header、nav等
  • 视频video、音频audio
  • canvas(画布)、Geolocation(地理定位)、websocket(通信协议)
  • 表单类型属性,emailnumber时间控件color颜色拾取器placeholderautofocus自动获取焦点...
  • 本地离线存储,localStorage长期存储数据,浏览器关闭后数据不丢失,sessionStorage的数据在浏览器关闭后自动删除
  • 拖拽释放
  • input标签新增属性:placeholder、autocomplete、autofocus、required
  • history API:go、forward、back、pushstate

HTML5移除的元素有:

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

8.如何使用HTML5中的Canvas元素绘制图形?

Canvas元素允许在网页上使用JavaScript绘制图形和动画。以下是一个简单的绘制矩形的示例:

<canvas id="myCanvas" width="200" height="200"></canvas>
<script>
  var canvas = document.getElementById("myCanvas");
  var ctx = canvas.getContext("2d");
  ctx.fillStyle = "red";
  ctx.fillRect(50, 50, 100, 100);
</script>

在这个示例中,使用 document.getElementById() 方法获取 Canvas 元素,并通过 getContext(“2d”) 获取2D绘图上下文。 然后,使用 fillStyle 属性设置填充颜色,fillRect() 方法绘制一个矩形。

9.cookie、sessionStorage 和 localStorage 的区别

 cookielocalStoragesessionStorage
由谁初始化 客户端或服务器,服务器可以使用 Set-Cookie 请求头。 客户端 客户端
过期时间 手动设置 永不过期 当前页面关闭时
在当前浏览器会话(browser sessions)中是否保持不变 取决于是否设置了过期时间
是否随着每个 HTTP 请求发送给服务器 是,Cookies 会通过 Cookie 请求头,自动发送给服务器
容量(每个域名) 4kb 5MB 5MB
访问权限 任意窗口 任意窗口 当前页面窗口

10.script、script async 和 script defer 的区别

如果没有defer或async属性,浏览器会立即加载并执行相应的脚本。它不会等待后续加载的文档元素,读取到就会开始加载和执行,这样就阻塞了后续文档的加载。

下图可以直观的看出三者之间的区别:

其中蓝色代表js脚本网络加载时间,红色代表js脚本执行时间,绿色代表html解析。

  • <script> - HTML 解析中断,脚本被提取并立即执行。执行结束后,HTML 解析继续。
  • <script async> - 脚本的提取、执行的过程与 HTML 解析过程并行,脚本执行完毕可能在 HTML 解析完毕之前。当脚本与页面上其他脚本独立时,可以使用 async,比如用作页面统计分析。
  • <script defer> - 脚本仅提取过程与 HTML 解析过程并行,脚本的执行将在 HTML 解析完毕后进行。如果有多个含 defer 的脚本,脚本的执行顺序将按照在 document 中出现的位置,从上到下顺序执行。

defer 和 async属性都是去异步加载外部的JS脚本文件,它们都不会阻塞页面的解析,其区别如下:

  • 执行顺序: 多个带async属性的标签,不能保证加载的顺序;多个带defer属性的标签,按照加载顺序执行;

  • 脚本是否并行执行:
    async属性,
    表示后续文档的加载和执行与js脚本的加载和执行是并行进行的,即异步执行;

    defer属性,加载后续文档的过程和js脚本的加载(此时仅加载不执行)是并行进行的(异步),js脚本需要等到文档所有元素解析完成之后才执行,DOMContentLoaded事件触发执行之前。

⚠️注意:没有 src 属性的脚本,asyncdefer 属性会被忽略。

11. iframe的作用以及优缺点

iframe也称作嵌入式框架,嵌入式框架和框架网页类似,它可以把一个网页的框架和内容嵌入到现有的网页中。

优点

  • 可以用来处理加载缓慢的内容,比如:广告

缺点

  • iframe会阻塞主页面的Onload事件
  • iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。但是可以通过JS动态给ifame添加src属性值来解决这个问题,当然也可以解决iframe会阻塞主页面的Onload事件的问题
  • 会产生很多页面,不易管理
  • 浏览器的后退按钮没有作用
  • 无法被一些搜索引擎识别

12. Quirks(怪癖)模式是什么?它和Standards(标准)有什么区别?

页面如果写了DTD,就意味着这个页面采用对CSS支持更好的布局,而如果没有,则采用兼容之前的布局方式,这就是Quirks模式,有时候也叫怪癖模式、诡异模式、怪异模式。

区别:总体会有布局、样式解析、脚本执行三个方面区别,这里列举一些比较常见的区别

  • 盒模型:在W3C标准中,如果设置一个元素的宽度和高度,指的是元素内容的宽度和高度,然而在Quirks模式下,IE的宽度和高度还包含了padding和border
  • 设置行内元素的高宽:在Standards模式下,给行内元素设置width和height都不会生效,而在Quriks模式下会生效
  • 用margin:0 auto设置水平居中:在Standards模式下,设置margin:0 auto;可以使元素水平居中,但是在Quriks模式下失效
  • 设置百分比高度:在Standards模式下,元素的高度是由包含的内容决定的,如果父元素没有设置百分比的高度,子元素设置百分比的高度是无效的

13. meta viewport 是做什么用的,怎么写?

Viewport,适配移动端,可以控制视口的大小和比例:

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

其中,content 参数有以下几种:

  • width viewport :宽度(数值/device-width)
  • height viewport :高度(数值/device-height)
  • initial-scale :初始缩放比例
  • maximum-scale :最大缩放比例
  • minimum-scale :最小缩放比例
  • user-scalable :是否允许用户缩放(yes/no)

14. img上 title 与 alt

alt:全称alternate,切换的意思,如果无法显示图像,浏览器将显示alt指定的内容
title:当鼠标移动到元素上时显示title的内容

区别:

一般当鼠标滑动到元素身上的时候显示title,而alt是img标签特有的属性,是图片内容的等价描述,用于图片无法加载时显示,这样用户还能看到关于丢失了什么东西的一些信息,相对来说比较友好。

15. H5和HTML5区别

  • H5是一个产品名词,包含了最新的HTML5、CSS3、ES6等新技术来制作的应用
  • HTML5是一个技术名词,指的就是第五代HTML

16. label的作用是什么?是怎么用的?

label元素不会向用户呈现任何特殊效果,但是,它为鼠标用户改进了可用性,当我们在label元素内点击文本时就会触发此控件。也就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。最常用label的地方就是表单中的性别单选框了,当点击文字时也能够自动聚焦绑定的表单控件。

<form>
     <label for="male"></label>
     <input type="radio" name="sex" id="male">
     <label for="female"></label>
     <input type="radio" name="sex" id="female">
</form>

17. src和href的区别

srchref都是用来加载外部资源,区别如下

src和href都是HTML中特定元素的属性,都可以用来引入外部的资源。两者区别如下:

src:全称source,它通常用于img、video、audio、script元素,通过src指向请求外部资源的来源地址,指向的内容会嵌入到文档中当前标签所在位置,在请求src资源时,它会将资源下载并应用到文档内,比如说:js脚本、img图片、frame等元素。当浏览器解析到该元素时,会暂停其它资源下载,直到将该资源加载、编译、执行完毕。这也是为什么将js脚本放在底部而不是头部的原因。
href:全称hyper reference,意味着超链接,指向网络资源,当浏览器识别到它指向的⽂件时,就会并⾏下载资源,不会停⽌对当前⽂档的处理,通常用于a、link元素。

18. Canvas和SVG的区别

SVG: SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言XML描述的2D图形的语言,SVG基于XML就意味着SVG DOM中的每个元素都是可用的,可以为某个元素附加Javascript事件处理器。在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。

其特点如下:

  • 不依赖分辨率
  • 支持事件处理器
  • 最适合带有大型渲染区域的应用程序(比如谷歌地图)
  • 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
  • 不适合游戏应用

Canvas: Canvas是画布,通过Javascript来绘制2D图形,是逐像素进行渲染的。其位置发生改变,就会重新进行绘制。

其特点如下:

  • 依赖分辨率
  • 不支持事件处理器
  • 弱的文本渲染能力
  • 能够以 .png 或 .jpg 格式保存结果图像
  • 最适合图像密集型的游戏,其中的许多对象会被频繁重绘

19. 怎样添加、移除、移动、复制、创建和查找节点

  • 添加节点document.appendChild(dom)
  • 移除节点document.removeChild(dom)
  • 移动节点document.appendChild(targetDom)
  • 复制节点dom.cloneNode(true),参数true表示是否复制子节点
  • 创建节点document.createElement(dom)
  • 查找节点:
    document.getElementById("elementId")
    document.getElementsByClassName("className")
    document.getElementsByTagName("tagName")
    document.querySelector("selector")
    document.querySelectorAll("selector")

20. title 与 h1 的区别、b 与 strong 的区别、i 与 em 的区别?

title 属性表示网页的标题,h1 元素则表示层次明确的页面内容标题,对页面信息的抓取也有很大的影响

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

i 是italic(斜体)的简写,是早期的斜体元素,表示内容展示为斜体,而 em 是emphasize(强调)的简写,表示强调的文本

21. 对于Web标准以及W3C的理解

Web标准简单来说可以分为结构、表现、行为。其中结构是由HTML各种标签组成,简单来说就是body里面写入标签是为了页面的结构。表现指的是CSS层叠样式表,通过CSS可以让我们的页面结构标签更具美感。行为指的是页面和用户具有一定的交互,这部分主要由JS组成

W3C,全称:world wide web consortium是一个制定各种标准的非盈利性组织,也叫万维网联盟,标准包括HTML、CSS、ECMAScript等等,web标准的制定有很多好处,比如说:

  • 可以统一开发流程,统一使用标准化开发工具(VSCode、WebStorm、Sublime),方便多人协作
  • 学习成本降低,只需要学习标准就行,否则就要学习各个浏览器厂商标准
  • 跨平台,方便迁移都不同设备
  • 降低代码维护成本

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

所谓的微格式是建立在已有的、被广泛采用的标准基础之上的一组简单的、开放的数据格式。

具体表现是把语义嵌入到HTML中,以便有助于分离式开发,并通过制定一些简单的约定,来兼顾HTML文档的人机可读性,相当于对web网页进行语义注解。

采用微格式的web页面,在HTML文档中给一些标签增加一些属性,这些属性对信息的语义结构进行注解,有助于处理HTML文档的软件,更好的理解HTML文档。当爬取web内容时,能够更为准确地识别内容块的语义,微格式可以对网站进行SEO优化。

23. 怎么处理HTML5新标签兼容问题?

主要有两种方式:

  1. 实现标签被识别:通过document.createElement(tagName)方法可以让浏览器识别新的标签,浏览器支持新标签后。还可以为新标签添加CSS样式
  2. 用JavaScript解决:使用HTML5的shim框架,在head标签中调用以下代码:
<!--[if lt IE 9]>
    <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
<![endif]-->

24. 如何实现在一张图片上的某个区域做到点击事件

我们可以通过图片热区技术:

  1. 插入一张图片,并设置好图像的有关参数,在<img>标记中设置参数usemap="#Map",以表示对图像地图的引用。
  2. <map>标记设定图像地图的作用区域,并取名:Map;
  3. 分别用<area>标记针对相应位置互粉出多个矩形作用区域,并设定好链接参数href
<body>
 <img src="./image.jpg" alt="" usemap="#Map" />
   <map name="Map" id="Map">
     <area alt="" title="" href="#" shape="poly"
         coords="65,71,98,58,114,90,108,112,79,130,56,116,38,100,41,76,52,53,83,34,110,33,139,46,141,75,145,101,127,115,113,133,85,132,82,131,159,117" />
     <area alt="" title="" href="#" shape="poly" coords="28,22,57,20,36,39,27,61" />
 </map>
</body>

25. a元素除了用于导航外,还有什么作用?

href属性中的url可以是浏览器支持的任何协议,所以a标签可以用来手机拨号<a href="tel:110">110</a>,也可以用来发送短信<a href="sms:110">110</a>,还有邮件等等

当然,a元素最常见的就是用来做锚点下载文件

锚点可以在点击时快速定位到一个页面的某个位置,而下载的原理在于a标签所对应的资源浏览器无法解析,于是浏览器会选择将其下载下来。

26. 你知道SEO中的TDK吗?

在SEO中,TDK其实就是titledescriptionkeywords这三个标签,title表示标题标签,description是描述标签,keywords是关键词标签

27. img的srcset属性的作⽤?

响应式页面中经常用到根据屏幕密度设置不同的图片。这时就用到了 img 标签的srcset属性。

通过使用 img 标签的 srcset 属性,可定义一组额外的图片集合,让浏览器根据不同的屏幕状况选取合适的图片来显示。

28. 响应式图片处理优化: Picture 标签

考察点: 响应式图片处理

picture元素就像是图像和其源的容器。浏览器仍然需要img元素,用来表明需要加载的图片

<picture> 下可放置零个或多个<source>标签、以及一个<img>标签,为不同的屏幕设备和场景显示不同的图片。

如果source匹配到了, 就会优先用匹配到的, 如果没有匹配到会往下继续找

使用picture元素选择图像,不会有歧义。

浏览器的工作流程如下:

  • 浏览器会先根据当前的情况,去匹配和使用<source>提供的图片
  • 如果未匹配到合适的<source>,就使用<img>标签提供的图片
<picture>
  <source srcset="640.png" media="(min-width: 640px)">
  <source srcset="480.png" media="(min-width: 480px)">
  <img src="320.png" alt="">
</picture>

29. DOCTYPE(⽂档类型) 的作⽤是什么?

DOCTYPE是HTML5中一种标准通用标记语言的文档类型声明,它的目的是告诉浏览器(解析器)应该以什么样(html或xhtml)的文档类型定义来解析文档,不同的渲染模式会影响浏览器对 CSS 代码甚⾄ JavaScript 脚本的解析。它必须声明在HTML⽂档的第⼀⾏。

浏览器渲染页面的两种模式(可通过document.compatMode获取,比如,语雀官网的文档类型是CSS1Compat):

  • CSS1Compat:标准模式(Strick mode) ,默认模式,浏览器使用W3C的标准解析渲染页面。在标准模式中,浏览器以其支持的最高标准呈现页面。
  • BackCompat:怪异模式(混杂模式)(Quick mode) ,浏览器使用自己的怪异模式解析渲染页面。在怪异模式中,页面以一种比较宽松的向后兼容的方式显示。

30. 常⽤的meta标签有哪些

meta 标签由 namecontent 属性定义,用来描述网页文档的属性,比如网页的作者,网页描述,关键词等,除了HTTP标准固定了一些name作为大家使用的共识,开发者还可以自定义name。

常用的meta标签:

  • charset,用来描述HTML文档的编码类型:

    <meta charset="UTF-8" >
  • keywords,页面关键词:
    <meta name="keywords" content="关键词" />
  • description,页面描述:
    <meta name="description" content="页面描述内容" />
  • refresh,页面重定向和刷新:
    <meta http-equiv="refresh" content="0;url=" />
  • viewport,适配移动端,可以控制视口的大小和比例:
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

    viewport的content 参数有以下几种:

    width :宽度(数值/device-width)

    height :高度(数值/device-height)

    initial-scale :初始缩放比例

    maximum-scale :最大缩放比例

    minimum-scale :最小缩放比例

    user-scalable :是否允许用户缩放(yes/no)

  • robots,搜索引擎索引方式:
    <meta name="robots" content="index,follow" />

    robots的content 参数有以下几种:

    all:文件将被检索,且页面上的链接可以被查询;

    none:文件将不被检索,且页面上的链接不可以被查询;

    index:文件将被检索;

    follow:页面上的链接可以被查询;

    noindex:文件将不被检索;

    nofollow:页面上的链接不可以被查询。

31. 说一下 HTML5 drag(拖拽) API

dragstart:事件主体是被拖放元素,在开始拖放被拖放元素时触发。
darg:事件主体是被拖放元素,在正在拖放被拖放元素时触发。
dragenter:事件主体是目标元素,在被拖放元素进入某元素时触发。
dragover:事件主体是目标元素,在被拖放在某元素内移动时触发。
dragleave:事件主体是目标元素,在被拖放元素移出目标元素是触发。
drop:事件主体是目标元素,在目标元素完全接受被拖放元素时触发。
dragend:事件主体是被拖放元素,在整个拖放操作结束时触发。

32. 浏览器乱码的原因是什么?如何解决?

产生乱码的原因:

  • 网页源代码是gbk的编码,而内容中的中文字是utf-8编码的,这样浏览器打开即会出现html乱码,反之也会出现乱码;
  • html网页编码是gbk,而程序从数据库中调出呈现是utf-8编码的内容也会造成编码乱码;
  • 浏览器不能自动检测网页编码,造成网页乱码。

解决办法:

  • 使用软件编辑HTML网页内容;
  • 如果网页设置编码是gbk,而数据库储存数据编码格式是UTF-8,此时需要程序查询数据库数据显示数据前进程序转码;
  • 如果浏览器浏览时候出现网页乱码,在浏览器中找到转换编码的菜单进行转换。

32. 渐进增强和优雅降级之间的区别

渐进增强(progressive enhancement) :主要是针对低版本的浏览器进行页面重构,保证基本的功能情况下,再针对高级浏览器进行效果、交互等方面的改进和追加功能,以达到更好的用户体验。

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

两者区别:

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

33. HTML、XML、XHTML 之间有什么区别?

它们都属于标记语言。

语言中文名说明
HTML4 超文本标记语言 主要用于做界面呈现。HTML 是先有实现,后面才慢慢制定标准的,导致HTML⾮常混乱和松散,语法非常的不严谨。
XML 可扩展标记语言 主要⽤于存储数据和结构。语法严谨,可扩展性强。由于 JSON 也有类似作⽤但更轻量⾼效, XML 的市场变得越来越⼩。
XHTML 可扩展超文本标记语言 属于加强版 HTML,为解决 HTML 的混乱问题而生,在语法方面变得和 XML 一样严格。另外,XHTML 的出现也催生了 HTML 5,让HTML向规范化严谨化过渡。
HTML5 超文本标记语言 在HTML的基础上进行拓展,用于页面呈现 (目前标准)

XML的要求会比较严格:

1. 有且只能有一个根元素
2. 大小写敏感
3. 正确嵌套
4. 必须双引号
5. 必须闭合标签

34. 前缀为 data- 开头的元素属性是什么?

这是一种为 HTML 元素添加额外数据信息的方式,被称为 自定义属性

我们可以直接在元素标签上声明这样的数据属性:

<div id="mydiv" data-message="Hello,world" data-num="123"></div>

也可以使用 JavaScript 来操作元素的数据属性:

let mydiv = document.getElementById('mydiv')
// 读取
console.log(mydiv.dataset.message)
// 写入
mydiv.dataset.foo = "bar!!!"

注意:在各种现代前端框架出现后,这种原生的自定义属性已经变得不太常用了, 以前的使用频率非常高, 所以我们知道即可。

35. 说说img标签的onerror事件,图片加载失败的处理方法

在图片不存在或者网络状态不好的情况下,会存在图片加载不过来,用户体验很差

可以直接在img标签里添加onerror事件进行控制

<img src="" onerror="javascript:this.src='xxx.jpg';">
注意点

1.这里的图片要尽可能小,如果过大还会存在加载失败的可能;
2.当'xxx.jpg'图片不存在时还会出现加载失败;
3.当加载失败时会再次执行onerror,再失败再执行,会一直执行陷入循环之中。

所以可以写一个函数,让函数只执行一次(执行一次把它置为null即可),不让其进入循环之中

36. 为什么最好把 CSS 的 <link> 标签放在<head></head>之间?

把 <link> 标签放在 <head></head> 之间是规范要求的内容。这种做法可以让页面逐步呈现,提高了用户体验。如果将样式表放在文档底部附近,会使许多浏览器(包括 Internet Explorer)不能逐步呈现页面。

一些浏览器会阻止渲染,以避免在页面样式发生变化时,重新绘制页面中的元素。这种做法可以防止呈现给用户空白的页面或没有样式的内容 

37. 为什么最好把 JS 的 <script> 标签恰好放在 </body> 之前?

脚本在下载和执行期间会阻止 HTML 解析。把 <script> 标签放在底部,保证 HTML 首先完成解析,将页面尽早呈现给用户。

例外情况:

是当你的脚本里包含 document.write() 时。(但是现在 document.write() 不推荐使用)。同时你将 <script> 标签放在底部,意味着浏览器直到整个文档(document)被解析完成不能开始下载脚本。
也许,对此比较好的做法是, <script> 使用 defer 属性,放在 <head> 中。

posted on 2024-03-20 20:40  梁飞宇  阅读(29)  评论(0)    收藏  举报