美文网首页
HTML面试题整理

HTML面试题整理

作者: Territory_Cheng | 来源:发表于2020-10-15 10:50 被阅读0次

    doctype(⽂档类型)

    告知浏览器的解析器⽤什么⽂档标准解析这个⽂档<!DOCTYPE HTML>,不同的渲染模式会影响到浏览器对于 CSS 代码甚⾄ JavaScript 脚本的解析

    • 标准模式(standards mode):⻚⾯按照 HTML 与 CSS 的定义渲染
    • 怪异模式(quirks mode)模式: 会模拟更旧的浏览器的⾏为
    • 近乎标准(almost standards)模式:会实施了⼀种表单元格尺⼨的怪异⾏为(与IE7之前的单元格布局⽅式⼀致),除此之外符合标准定义

    HTML语义化

    语义化从html代码来展示页面的结构,语义化的优点:

    1. 标签语义化有助于搭建良好的HTML结构,有助于搜索引擎建立索引和爬取
    2. 有利于不同设备的解析,
    3. 有利于搭建清晰的代码结构,有助于团队开发维护
    H5新增标签
    • ==header== 头部、页眉
    • ==footer== 底部、页脚
    • ==hgroup==
    • ==nav== 导航区域
    • ==aside== 主要内容的附属信息部分
    • ==section== 文档中的“节”或“段”
    • ==article== 代表一个在文档,页面或者网站中自成一体的内容

    cookies,sessionStorage 和 localStorage 的区别

    sessionStorage 和 localStorage
    • 两者存储空间一般都在5M左右,sessionStorage在会话结束时会主动清除,localstorage则不会,需手动清除
    • 两者都有同源策略限制,跨域无法访问,sessionStorage有同标签页限制
    • 数据仅在客户端存储,不参与和服务器通信
    • 都是key value形式进行存储,value必须为字符串,如不是则自动转换成字符串,value如果是对象,需转换成JSON字符串
    • 操作方法一直,setItem(key, value)增/改、removeItem(key)删、getItem(key)查、xxxStorage.clear()清空
    cookies
    • 存储大小为4k,一个站点最多20个cookies
    • 会通过http请求参与服务端的通信
    • cookie可以设定会话时间,如不设置,则默认浏览器窗口关闭清除
    • Cookie设置中有个HttpOnly参数,前端浏览器使用document.cookie是读取不到HttpOnly类型的Cookie的
    项目经验
    • 小程序跳转到一个页面,保存之后goback,但无法传参,可以利用本地存储来处理

    DOM事件

    事件处理程序
    • HTML事件处理程序 - 通过HTML标签属性,如<p onclick='dosomethind()'></p>
    • DOM0事件处理程序 - 将事件处理放入js总,如document.getElementById("#btn").onclick = function(){...}
    • DOM1事件处理成 - 采用addEventListenter绑定事件,相同方法会覆盖
    事件流机制

    即元素从页面接收事件的顺序,也即事件在页面的传播顺序

    事件捕获和事件冒泡
    • addEventListener的第三个参数,当为true时,捕获,false时,冒泡
    • ==事件捕获==:捕获阶段事件是由上向下依次触发
    • ==冒泡阶段==:冒泡阶段事件是由下向上依次触发
    • 项目经验:上传组件上方的浮层,可以利用冒泡实现重新上传功能
    事件对象

    标准的Event对象主要有6个:

    1. bubbles 布尔值,表示事件是否是冒泡类型
    2. cancelable 布尔值,表示事件是否可以取消默认动作
    3. currentTarget 当前目标元素,即添加当前事件处理程序的元素
    4. target 实际目标元素,即实际触发事件的元素
    5. type 返回当前事件的名称
    6. eventPhase 事件传播的当前阶段,1表示捕获阶段
    currentTarget VS target
    • ==target==: 在事件的目标阶段,指向被单击的对象
    • ==currentTarget==: 在事件流捕获、目标及冒泡阶段,只有在目标阶段,两者相同,指向当前事件的活动对象(一般为父级)

    标准Event对象的方法主要有以下几个

    1. preventDefault 通知浏览器不要执行该事件的默认动作,如阻止默认跳转、表单提交等标签默认行为
      2.stopPropagation 冒泡阶段下,阻止事件继续向上冒泡
    事件委托

    事件委托其实就是利用冒泡事件机制,针对多子元素绑定事件的处理方式,采用父级绑定,利用target获取到子元素并响应事件

    优雅降级和渐进增强概述

    • ==优雅降级==是一开始针对高版本浏览器构建完整功能,然后针对低版本浏览器进行兼容
    • ==渐进增强==是一开始针对低版本浏览器构建,保证功能,然后在针对高级浏览器追加效果达到更好的用户体验

    SEO优化(搜索引擎优化)

    • 合理设置title、description、keywords
    • HTML语义化,如H1可以放置网站重点内容
    • meta:robots 标签,==<meta name="robots" content="index,follow,archive">==
    • canoncial 和 alternate 标签
      • <link rel="canoncial" href="www.shop.com/goods/xxxx" /> 提升完全相同或高度相似的网页的权重
      • <link rel="alternate" href="https://m.xxx.com" media="only screen and (max-width: 750px)"/> 针对750px的访问另一个网址,适用于移动端跳转
    • robots.txt
    • sitemap

    iframe有那些缺点

    1. iframe会阻塞主页面的onload事件
    2. 相同域iframe和主页面共享http连接池,多个相同域的iframe会阻塞加载
      • 解决方案:主页面加载完再去动态生成iframe
    3. iframe对seo不友好

    iframe跨域通信

    postMessage
    quoteWindow.postmessage(data, origin, [transfer])
    
    • quoteWindow 数据接收方,常用为父级主页面,window.parent
    • data 需要发送的数据,它将会被结构化克隆算法序列化
    • origin 表示哪些窗口可以接收,*表示不受限制,URL地址表示只有该URL地址能接收事件
    • transfer 可选参数,高级用法,是一串和message 同时传递的 Transferable 对象. 这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权
    接收方
    window.addEventListener('message',e=>{
        // 有三个重要属性
        // origin 表示发送消息的窗口源
        // data 表示发送消息的数据
        // source 表示对发送消息窗口的引用,可以用此来向发送消息的窗口返回数据
    })
    

    onload和domcontentloaded

    • onload 当页面 DOM 结构中的 js、css、图片,以及 js 异步加载的 js、css 、图片都加载完成之后,才会触发 load 事件
    • DOMContentLoaded 事件在 html文档加载完毕,并且 html 所引用的内联 js、以及外链 js 的同步代码都执行完毕后触发
      • 页面中引用的js 代码如果有异步加载的 js、css、图片,是会影响 load 事件触发的。
      • video、audio、flash 不会影响 load 事件触发

    HTML文档的加载与页面的首次渲染

    1. 浏览器首选下载该地址所对应的html页面
    2. 浏览器解析html页面的DOM结构
    3. 开启下载线程对文档中的所有资源按优先级排序下载
    4. 主线程继续解析文档,到达head节点,head里的外部资源无非是外链样式表和外链js
    5. 解析到body
    • 只有DOM元素
      • DOM数构建完,页面首次渲染
    • 有DOM元素、外链js
      • 当解析到外链js的时候,该js尚未下载到本地,则js之前的DOM会被渲染到页面上,同时js会阻止后面的DOM的构建,即后面的DOM节点并不会添加到文档的DOM树中,所以,js执行完之前,我们在页面上看不到该js后面的DOM元素
    • 有DOM元素、外链js
      • 外链css不会影响css后面的DOM构建,但是会阻碍渲染,简单点说,外链css加载完之前,页面还是白屏
    • 有DOM元素、外链js、外链css
      • 外链js和外链css的顺序会影响页面渲染,当body中js之前的外链css未加载完之前,页面是不会被渲染
      • 当body中js之前的外链css加载完之后,js之前的DOM树和css合并渲染树,页面渲染出该js之前的DOM结构
    1. 文档解析完毕,页面渲染,但是页面引用的所有js同步代码执行完毕,厨房DOMContentLoaded事件
    2. html文档中的图片资源、js代码中有的异步加载的css、js、图片资源都加载完毕之后,load事件触发

    src和href的区别

    • src 是指向外部资源的位置,指向的内容会嵌入到文档当前标签所在的位置,如css、js脚本、img等
    • href 是指向网络资源所在的位置(的超链接),如<a href='xxx'></a>

    img的srcset和sizes

    script标签中defer和async的区别

    • defer 浏览器指示脚本在文档被解析后执行,script被异步加载后并不会立即执行,而是等待文档被解析完毕后执行
      • <script type="text/javascript" src="x.min.js" defer="defer"></script>
      • defer只适用于外联脚本,如果script标签没有指定src属性,只是内联脚本,不要使用defer
      • 如果有多个声明了defer的脚本,则会按顺序下载和执行
      • defer脚本会在DOMContentLoaded和load事件之前执行
    • async 同样是异步加载脚本,区别是脚本加载完毕后立即执行,这导致async属性下的脚本是乱序的,对于script又先后依赖关系的情况,并不适用
      • <script type="text/javascript" src="x.min.js" async="async"></script>
      • 只适用于外联脚本,这一点和defer一致
      • 如果有多个声明了async的脚本,其下载和执行也是异步的,不能确保彼此的先后顺序
      • async会在load事件之前执行,但并不能确保与DOMContentLoaded的执行先后顺序

    data-属性

    HTML的数据属性,用于将数据存储在标准的HTML元素中作为额外信息,可以通过js访问,xxx.getAttribute("data-xxxx")

    meta标签

    name

    name属性主要用于描述网页,比如网页的关键词、叙述等,与之对应的属性值为content,content中的内容是对name填入类型的具体描述,便于搜索引擎抓取。

    <meta name="参数" content="具体的描述" >
    
    参数 描述
    keywords(关键词) 网页关键词,<meta name="keywords" content="Lxxyx,博客,文科生,前端">
    description(网站内容的描述) <meta name="description" content="文科生,热爱前端与编程。目前大二,这是我的前端博客">
    viewport(移动端的窗口) meta name="viewport" content="width=device-width, initial-scale=1">
    robots(定义搜索引擎爬虫的索引方式)) robots用来告诉爬虫哪些页面需要索引,哪些页面不需要索引。content的参数有all,none,index,noindex,follow,nofollow。默认是all。<meta name="robots" content="none">
    author(作者) <meta name="author" content="Lxxyx,80530@qq.com">
    copyright(版权) <meta name="copyright" content="Lxxyx">
    revisit-after(搜索引擎爬虫重访时间) 如果页面不是经常更新,为了减轻搜索引擎爬虫对服务器带来的压力,可以设置一个爬虫的重访时间。<meta name="revisit-after" content="7 days" >
    renderer(双核浏览器渲染方式) <meta name="renderer" content="webkit">//默认webkit内核 <meta name="renderer" content="ie-comp"> //默认IE兼容模式 <meta name="renderer" content="ie-stand"> //默认IE标准模式
    http-equiv

    <meta http-equiv="参数" content="具体的描述">

    • content-Type(设定网页字符集)
    <meta http-equiv="content-Type" content="text/html;charset=utf-8"> //旧的HTML,不推荐 
    <meta charset="utf-8"> //HTML5设定网页字符集的方式,推荐使用UTF-8```
    
    • X-UA-Compatible(浏览器采取何种版本渲染当前页面)
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> //指定IE和Chrome使用最新版本渲染当前页面
    
    • cache-control(指定请求和响应遵循的缓存机制)
      • 用法1
      • <meta http-equiv="cache-control" content="no-cache">
      • no-cache: 先发送请求,与服务器确认该资源是否被更改,如果未被更改,则使用缓存。
      • no-store: 不允许缓存,每次都要去服务器上,下载完整的响应。(安全措施)
      • public : 缓存所有响应,但并非必须。因为max-age也可以做到相同效果
      • private : 只为单个用户缓存,因此不允许任何中继进行缓存。(比如说CDN就不允许缓存private的响应)
      • maxage : 表示当前请求开始,该响应在多久内能被缓存和重用,而不去服务器重新请求。例如:max-age=60表示响应可以再缓存和重用 60 秒
      • 用法2
      • 用于禁止当前页面在移动端浏览时,被百度自动转码。虽然百度的本意是好的,但是转码效果很多时候却不尽人意。所以可以在head中加入例子中的那句话,就可以避免百度自动转码了
      • <meta http-equiv="Cache-Control" content="no-siteapp" />
    • expires(网页到期时间) 用于设定网页的到期时间,过期后网页必须到服务器上重新传输
    <meta http-equiv="expires" content="Sunday 26 October 2016 01:00 GMT" />
    
    • refresh(自动刷新并指向某页面) - 网页将在设定的时间内,自动刷新并调向设定的网址
    <meta http-equiv="refresh" content="2;URL=http://www.lxxyx.win/"> //意思是2秒后跳转向我的博客
    
    • Set-Cookie(cookie设定) - 如果网页过期。那么这个网页存在本地的cookies也会被自动删除
    <meta http-equiv="Set-Cookie" content="name, date"> //格式
    
    <meta http-equiv="Set-Cookie" content="User=Lxxyx; path=/; expires=Sunday, 10-Jan-16 10:00:00 GMT"> //具体范例
    

    img的srcset和sizes

    H5中img有2个新属性,srcset、sizes,主要作用:

    • 控制响应式图片,根据屏幕大小来选择显示不同图片
    • 根据屏幕的不同(视网膜屏还是普通屏),展示不同质量的图片,合理控制下载资源
    srcset
    • 格式一:图片源地址 空格 图片像素宽度[, 图片源地址 空格 图片像素宽度, ...],如
    srcset="1.jpg 580w, 2.png 618w"
    

    千万注意:描述图片的像素宽度是用'w'单位,且一定要是图片的真实像素宽度,如果私自改动,那么会影响浏览器对图片的选择!

    表示图片1.jpg的像素宽度为580px,图片2.png的像素宽度为618px,两个图片源之间用逗号隔开

    • 格式二:图片源地址 空格 屏幕像素密度[, 图片源地址 空格 屏幕像素密度, ...],如
    srcset="1.jpg 1x, 2.png 2x"
    

    表示图片1.jpg为DPR为1时下显示的图片;2.png为DPR为2时显示的图片,如果没有更大的DPR设置的图片源,那么当大于当前设置的DPR最高值时,会采用当前设置的最大DPR的图片源。如这里如果屏幕DPR为3,那么还是会用2.png。

    sizes

    只有当设置了srcset,且单位为w时,sizes的设置才会起效。

    srcset中设置的图片像素宽度('w'的值),组成了相应的半开半闭区间(a, b]。 图片的显示宽度(sizes规定的值)看落在哪个区间内,取区间中最大值对应的图片。若没有最大值(如∞),则取上个区间最大值。

    <img src="4.jpg" srcset="3.jpg 229w,2.png 618w,1.jpg 1000w", sizes="300px">
    

    上面设置图片要显示成300px(sizes里的值),在srcset里的几个临界值中形成了(0, 229px]、(229px, 618px]、(618px, 1000px]、(1000px, ∞]。300px落在了(229px, 618px]中,取最大值618,因此最终选择的图片就是2.png

    sizes的语法结构:

    [媒体查询 空格 ]图片显示宽度[, [媒体查询 空格 ]图片显示宽], ..., 其余条件宽度值]

    sizes="(max-width: 500px) 400px, (max-width: 900px) 700px, 1200px"
    

    在屏幕小于等于500px情况下,图片显示成400px宽;在屏幕小于等于900px情况下,图片显示成700px宽;其余情况显示成1200px宽。

    sizes里的媒体查询条件顺序是很重要的,只要满足了越靠前的某个条件,那么后面的条件会被忽略的

    如果sizes属性没有值,或者在有媒体条件下,其余条件宽度没有设值,那么默认是100vw

    DPR的影响
    <img src="4.jpg" srcset="3.jpg 229w,2.png 618w" sizes="(max-width: 600px) 114px">
    

    srcset里的'w'符号,是代表的是图像的宽度像素,是个物理像素;sizes里的114px是表示逻辑像素!在DPR不为1时,要转化一下像素值才能去区间里比较,套用上述规则,如在DPR=2时,把114px转化为物理像素,即114px * 2 = 228px,用228px去(0, 229px]、(229px, 618px]、(618px, ∞]里做比较,落在了(0, 229px]中,取229px对应的3.jpg

    哪⼀个标签能起到跟srcset相似作⽤

    <picture>元素通过包含零或多个<source>元素和⼀个<img>元素来为不同的显示/设备场景提供图像版本。浏览器会选择最匹配的⼦<source>元素,如果没有匹配的,就选择<img>元素的src属性中的URL。然后,所选图像呈现在<img>元素占据的空间中

    <picture>
        <source srcset="/media/examples/surfer-240-200.jpg" media="(min-width: 800px)">
        <img src="/media/examples/painted-hand-298-332.jpg" />
    </picture>
    

    html5和html4区别

    • 内容类型不变

      • HTML5的文件扩展符(html或.htm)与内容类型(text/html)保持不变。
    • DOCTYPE声明变化
      HTML4中需要指明是HTML的哪个版本,HTML5不需要,只使用<!DOCTYPE html>即可。

    • 指定字符编码变化

      • HTML4:<meta http-equiv=‶content-type″ content=‶text/html; charset=UTF-8″>
      • HTML5:<meta charset=‶UTF-8″>
    • 可以省略元素的标记

      • HTML5中很多元素标记可以省略
    • 具有boolean值的属性调整

      • 不指定属性值、属性名设定为属性值、字符串设为空时表示属性值为true
      • 不写该属性表示属性值为false
    • 新增的结构元素

      • section、artucle、aside、header、hgroup、footer、nav、figure
    • 新增的其他元素

      • video、audio、canvas
    • 新增的input元素的类型

      • email、url、number、range、DatePickers

    相关文章

      网友评论

          本文标题:HTML面试题整理

          本文链接:https://www.haomeiwen.com/subject/bfunpktx.html