DOCTYPE的作用以及常见的DOCTYPE类型

<!DOCTYPE>声明位于文档中的最前面的位置,处于 <html> 标签之前,用来告知浏览器页面目前的文件是用哪种版本的HTML(或XML)撰写。

常见类型

  • HTML 5
    <!DOCTYPE html>

  • HTML 4.01
    三种文档类型:StrictTransitionalFrameset

  • XHTML 1.0
    三种XML文档类型:StrictTransitionalFrameset

浏览器标准模式和怪异模式之间的区别

  • 标准模式:严格遵循W3C标准来呈现网页的渲染模式。

  • 怪异模式:兼容旧版本浏览器,不会严格遵循W3C标准的网页的一种渲染模式

每个HTML文档的首行都是一个文档声明,这种文档声明是用来表示后面的那些个页面标签遵循哪一个原则的,这是HTML5的文档类型声明:

<!DOCTYPE html>

这个是XHTML 1.0严格模式的文档类型声明:

<!DOCTYPE html PUBLIC "-//W3C//DTD *XHTML 1.0* Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

保留文档类型声明主要是历史原因,没有文档声明的话大多数浏览器都将会转换到为怪异模式(quirk mode),这种模式下浏览器会以老版本的浏览器使用的规则来渲染页面,并且不同浏览器的怪异模式还是不一样的,我们在平时码代码时应该尽量回避这种错误。

在添加了文档类型声明之后,浏览器使用的就是标准模式(standard mode),这种情况下浏览器会用W3C的标准来渲染网页。

附上两篇
Mozilla Quirks Mode Behavior
怪异模式(Quirks Mode)对 HTML 页面的影响

HTMLXHTML有什么区别?

  • XHTML中的标签都必须被正确地嵌套,HTML中的某些标签可以彼此不正确的嵌套。

  • XHTML中的所有标签必须要关闭。

  • XHTML中规范定义:标签名和属性对大小写敏感,所有XHTML标签名必须用小写字母。

  • XHTML文档必须拥有根元素。

  • XHTML中标签的属性值要使用双引号"

如果页面使用'application/xhtml+xml'会有什么问题吗?

使用xhtml,页面结构中必须包含head标签,并且每个标签结构都要关闭,包括空标签。所有标签都要小写。使用了'application/xhtml+xml'之后,部分老浏览器不会支持。

使用data-属性的好处是什么?

通过data-可以自定义属性,可以通过HTMLElement.dataset获取这些属性的值,data--后接自定义属性的名字,例如data-url。实际开发中可以利用这一点在生成DOM结构时把数据储存在自定义属性中,通过一系列交互操作,可以再获得这些数据,而不用再去ajax去后台取得数据。

cookiessessionStoragelocalStorage的区别。

sessionStoragelocalStorageweb storage的两种储存方式,其中sessionStorage是会话级别储存,在浏览器或页面关闭时数据就会销毁,而localStorage是持久化的本地储存,不刻意去删除数据,数据是不会销毁的。以上这两种方式只是客户端的储存,不会涉及到服务器储存。与之相比,每次发送HTTP请求时会将cookie添加到Cookie头字段,发送给服务器。

在储存量方面也有差异,单个cookie保存的数据不能超过4K,而localStoragesessionStorage一般有5-10M。

除此之外,每个域名下cookie的个数会有限制,依据浏览器不同会有不同,而localStorage数量是无限制的。

<script><script async><script defer>的区别

<script>加载js文件会阻塞页面的渲染和交互,而<script async><script defer>都是异步加载js文件,期间不会才生阻塞,区别在于<script async>是加载完之后自动执行,<script defer>需要等到页面加载之后再执行。

为什么通常将css<link>放置在<head></head>之间,而将js<script>放置在</body>之前?有哪些例外吗?

浏览器在处理HTML页面渲染和JavaScript脚本执行的时候是单一进程的,所以在当浏览器在渲染HTML遇到了<script>标签会先去执行标签内的代码(如果是使用src属性加载的外链文件,则先下载再执行),在这个过程中,页面渲染和交互都会被阻塞。所以将<script>放在</body>之前,当页面渲染完成再去执行<script>

一般希望DOM还没加载必须需要先加载的js会放置在<head>中,有些加了deferasync<script>也会放在<head>中。

渐进增强 (progressive enhancement) 和优雅降级 (graceful degradation) 的区别

  • 渐进增强: 先保证低版本浏览器的基本功能,再去兼容高版本浏览器效果和交互。

  • 优雅降级: 先保证高版本浏览器的效果和交互等,再去兼容低版本的浏览器。

白屏和FOUC (无样式内容闪烁)是什么?如何来避免?

白屏与无样式内容闪烁(FOUC)是因为不同浏览器加载与显示页面的机制不同而造成的。

当把css样式放在底部或者使用@import方式引入样式时

  • 一些浏览器例如chrome,他的加载和渲染机制是等css全部加载解析完后再渲染展示页面,而这个等待的时间就为白屏

  • 另一些浏览器例如Firefox,他会在css未加载前先展现页面,等css加载后再重绘一次,这就造成了FOUC (无样式内容闪烁)

所以为了避免这些问题,最好使用LINK标签将样式表放在文档的HEAD中。

相关问题以及资料从网络查阅,本文用于自己扎实前端基础,如有错误欢迎指出。

前端基础问题整理-HTML相关的更多相关文章

  1. 前端基础-CSS的属性相关设置

    一 字体属性 二 文本属性 三 背景属性 四 盒子模型 五 盒子模型各部分详解 一. 字体属性 1.font-weight:文字粗细(表格中*为重点) 取值 描述   normal 默认值,标准粗细 ...

  2. 前端基础(http协议相关篇)

    网络协议篇: 1.http请求过程 DNS解析——tcp三次握手——建立tcp连接后发起http请求——服务器响应http请求 ——浏览器得到资源——浏览器渲染 2.http报文 通用首部:可以出现在 ...

  3. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

  4. web前端面试知识点整理

    一.HTML5新特性 本地存储 webStorage websocket webworkers新增地理位置等API对css3的支持canvas多媒体标签新增表单元素类型结构标签:header nav ...

  5. web前端基础知识及快速入门指南

    web前端基础知识及快速入门指南 做前端开发有几个月了,虽然说是几个月,但是中间断断续续的上课.考试以及其它杂七杂八的事情,到现在居然一直感觉自己虽然很多前端的知识很眼熟,却也感觉自己貌似也知识在门口 ...

  6. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  7. 前端基础之DOM和BOM

    前端基础之DOM和BOM JavaScript分为 ECMAScript,DOM,BOM. BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏 ...

  8. tableview前端基础设计(初级版)

    tableView前端基础设计 实现的最终效果 操作目的:熟悉纯代码编辑TableView和常用的相关控件SearchBar.NavigationBar.TabBar等,以及布局和基本功能的实现. 一 ...

  9. Linux常用基础命令整理:关机命令、查看目录下文件命令等

    Linux常用基础命令整理:关机命令.查看目录下文件命令等 整理了一些Linux常用基础命令,欢迎指正. 首先记住四个热键,学会这四个键,收益一辈子. Tab按键---命令补齐功能Ctrl+c按键-- ...

随机推荐

  1. WPF优秀组件推荐之Stylet(二)

    上一篇文章介绍了Stylet的一些基本功能,本篇将介绍一些深入一点的功能. 依赖注入 在Bootstrapper 类中注入需要的对象: public class Bootstrapper : Boot ...

  2. 『现学现忘』Docker基础 — 12、通过RPM软件包方式安装Docker

    CentOS环境下的Docker官方推荐的三种安装方式 yum安装方式 本地RPM安装方式 脚本安装方式 目录 1.下载Docker的RPM安装包 2.安装Docker 3.通过RPM安装包安装Doc ...

  3. salesforce零基础学习(一百一十二)项目中的零碎知识点小总结(四)

    本篇参考: https://trailblazer.salesforce.com/issues_view?id=a1p4V0000003znDQAQ https://salesforce.stacke ...

  4. php session 的使用方法

    public function insert(Request $request){ $parm = $request->except('token'); $this->validate($ ...

  5. 如何创建一个 Cocoapods 插件

    原文链接 前言 我们在使用 Cocoapods 过程中,如果发现它未能满足我们的要求该怎么办呢? 最简单的粗暴的办法就是 fork 一份 Cocoapods 源码,然后自己公司内部或者个人直接针对源码 ...

  6. Django基础二静态文件和ORM

    Django基础二静态文件和ORM 目录 Django基础二静态文件和ORM 1. 静态文件 1.1 静态文件基本配置: 1.2 静态文件进阶配置 2. request参数 3. Django配置数据 ...

  7. DirectX11 With Windows SDK--37 延迟渲染:光源剔除

    前言 在上一章,我们主要介绍了如何使用延迟渲染,以及如何对G-Buffer进行一系列优化.而在这一章里,我们将从光源入手,讨论如何对大量的动态光源进行剔除,从而获得显著的性能提升. 在此之前假定读者已 ...

  8. 使用Spring Data ElasticSearch+Jsoup操作集群数据存储

    使用Spring Data ElasticSearch+Jsoup操作集群数据存储 1.使用Jsoup爬取京东商城的商品数据 1)获取商品名称.价格以及商品地址,并封装为一个Product对象,代码截 ...

  9. 如何解决代码中if/else 过多的问题

    前言 if...else 是所有高级编程语言都有的必备功能.但现实中的代码往往存在着过多的 if...else.虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性.可维护 ...

  10. 如何将docker 镜像上传到docker hub仓库

    如何将docker 镜像上传到docker hub仓库 目录 如何将docker 镜像上传到docker hub仓库 背景 1.注册docker hub账号 2.docker hub上创建仓库 3.d ...