《HTML5权威指南》

HTML(超文本标记语言——HyperText Markup Language)是一种标记语言,它定义了网页内容的含义和结构,其中“超文本”(hypertext)是指连接单个网站内或多个网站间的网页的链接。

知识点

1.元素名不区分大小写,<sectION><SECTION><Section>都被视为section元素。

2.有些HTML元素会对呈现形式产生影响,浏览器遇到这种元素时,会改变向用户呈现内容的方式,如code、strong、i等等。这种做法如今受到大多数人的反对。

3.空元素:没有内容的元素


1
<p></p>

可简写为

1
<p/>

4.虚元素(void element):有些元素只能使用一个标签表示,在其中放置任何内容都不会符合HTML规范。如<br/>

虚元素有两种表示法:

  • 只用开始标签:<br>
  • 开始标签加上一个斜杠符号:<br/>

5.有些元素属性属于布尔属性,这种属性不需要设定一个值,只需将属性名添加到元素中即可:

1
<input disabled>

为布尔值属性指定一个空字符串(””)或属性名称字符串作为其值也有相同的效果:

1
2
<input disabled="">
<input disabled="disabled">

6.自定义属性data-,可以避免与HTML的未来版本中可能增加的属性名冲突。

7.用于处理HTML文档的各种软件有一个共同的名称,叫做用户代理(user agent),浏览器是最流行的用户代理,但不是唯一的。

8.XHTML是HTML的XML序列化形式。

9.DOCTYPE元素用于声明文档类型,让浏览器明白其处理的是HTML文档。

要建立符合标准的网页,DOCTYPE声明是必不可少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS都不会生效,也就是说如果没有这个DOCTYPE声明将会导致CSS失效-css无效,特别是没有声明或声明不正确将在标准浏览器下更是不能正常显示。

10.元数据:HTML文档的元数据部分可以用来向浏览器提供文档的一些信息。如title、meta元素。元数据包含在head元素内部。

<head>

元素head 里面的内容不会在浏览器中显示,它的作用是包含一些页面的元数据

11.HTML5规范将元素分为三大类:

  • 元数据元素(metadata element):用来构建HTML文档的基本结构,以及就如何处理文档向浏览器提供信息和指示。
  • 短语元素(phrasing element)
  • 流元素(flow element):是短语元素的超集。
    有些元素无法归入上述三种类型,这些元素要么没有什么特别的含义,要么只能用在一些非常有限的情况下,如li元素

12.HTML实体:

显示结果 描述 实体名称 实体编号
空格    
< 小于号 < <
> 大于号 > >
& 和号 & &
引号 " "
撇号 ' (IE不支持) '
分(cent) ¢ ¢
£ 镑(pound) £ £
¥ 元(yen) ¥ ¥
欧元(euro)
§ 小节 § §
© 版权(copyright) © ©
® 注册商标 ® ®
商标
× 乘号 × ×
÷ 除号 ÷ ÷

13.局部属性(local attribute):每种元素都能规定自己的属性。

14全局属性(global attribute):用来配置所有元素共有的行为。全局属性可以用在任何一个元素身上,不过不一定会带来有意义或有用的行为改变。

全局属性有:accesskey、class、contenteditable、contextmenu、dir、draggable、dropzone、hidden、id、lang、spellcheck、style、tabindex、title。

15.css中的样式继承,如果浏览器子啊直接相关的样式中找不到某个属性的值,就会求助于继承机制,使用父元素的这个样式属性值。

并非所有css属性均可继承,与元素外观(文字严肃、字体等)相关的样式会被继承;与元素在页面上的布局相关的样式不会被继承。
inherit:在样式中使用inherit可以强行实施继承。

16.js中in表达式可以判断对象是否具有某个属性,如

1
2
3
4
5
6
7
var obj = {
a: 1,
b: 2
};

console.log("a" in obj);
console.log("c" in obj);

17.<base>元素可以用来设置一个基准URL,让HTML文档中的相对链接在此基础上进行解析。如果不用base元素,或者不用其href属性设置一个基准URL,那么浏览器会将当前URL认定为所有相对URL的解析基准。

18.UTF-8编码能以最少的字节数表示所有Unicode字符。

19.script defer属性:浏览器在遇到带有defer属性的script元素时,会将脚本的加载和执行推迟到HTML文档中所有元素都已得到解析之后。

20.script async属性:浏览器在遇到带有async属性的script元素时,会在继续解析HTML文档中其他元素(包括script元素)的同时异步加载和执行脚本。

21.HTML5规范明确指出:使用元素应该完全从元素的语义出发。

22.生成到其他文档的超链接:使用a元素,将其href属性值设置为绝对或相对URL。

不含href值的a元素作为超链接的占位符使用。<br/>
如果引用一个电子邮箱地址,那可以使用mailto协议,如`<a href="mailto:michealwayne@163.com">mail</a>`。<br/>
超链接也可以用来将同一文档中的另一个元素移入视野,`#<id>`,如`<a href="#part1">to part1</a>`。如果浏览器找不到具有指定id属性值的元素,那么它会再进行一次查找,试图找到一个name属性值与其匹配的元素。<br/>
target属性的用途是告诉浏览器希望将所链接的资源显示在哪里。其值如下:`_blank`/`_parent`/`_self`/`_top`/`<frame>`。

23.b元素可以用来标记一段文字,但并不表示特别的强调或重要性。通常是文章提要中的关键词和产品评论中的产品名称。

24.em元素表示对一段文字的强调,通常用来向读者提供关于句子段落含义的一种语境。

em元素的习惯样式是斜体字。

25.i元素一段文字与周围内容有本质区别。通常用外文词语、科技术语甚至是某人的想法。

i元素的习惯样式是斜体字。

26.s元素用来表示一段文字不再正确或准确。

s元素的习惯样式是文字上显示一条删除线。

27.strong元素表示一段重要文字。

28.u元素让一段文字从周围内容中凸显出来,但并不表示强调或其重要性有所增加,不推荐使用该标签

u元素的习惯样式是为文字添加下划线。

29.small元素表示小号字体内容,常用于免责声明和澄清声明。

30.sub和sup元素表示下标和上标。

sub元素的默认样式:`vertical-align: sub`; sup元素的默认样式:`vertical-align: super`;

31.br和wbr元素会控制内容换行。

其中wbr元素为html5新增,用来表示长度超过当前浏览器窗口的内容在此换行。

32.表示计算机输入和输出:code、var、samp和kbd元素。

33.abbr元素用来表示缩写,其title属性表示的是该缩写代表的完整词语。

34.dfn元素表示定义中的术语,也即在用来解释一个词(或短语)的含义的句子中的词或短语,如果要为dfn元素设置title属性,那么必须将其设置为所定义的术语。如果dfn元素包含一个abbr元素,那么该缩写词就是要定义的术语。

35.q元素表示引自他处的内容,q元素的cite属性可以用来指定来源文章的URL。

q元素的默认样式使用css中的`:before`和`:after`这两个伪元素选择器在引文前后生成引号。

36.cite元素表示所有引用作品(如图书、文章、电影和诗歌)的标题。

37.注音符号(ruby character)是用来帮助读者掌握表意语言文字正确发音的符号,位于这些文字的上方或右方。html5新增,ruby元素需要与rt元素和rp元素搭配使用。rt元素用来标记注音符号,rp元素则用来标记供不支持注音符号特性的浏览器显示在注音符号前后的括号,如

1
<ruby>魑<rp>(</rp<rt>chi</rt><rp>)</rp></ruby>

38.bdi元素可以用来撇开默认的文字方向设置,明确地指定其内容中文字的方向,使用bdo元素必须加上dir属性,该属性的值:rtl从右到左,ltr从左到右。

39.bdi元素表示一段出于文字方向考虑而与其他内容隔离出来的文字。html5新增

40.span元素本身没有任何含义,它可以用来把一些全局属性应用到一段内容上。

41.mark元素用来表示因为与某段上下文相关而被突出显示的一段文字,html5新增

42.ins元素和del元素可以分别用来表示文档中添加和删除的文字。

ins元素和del元素定义了相同的属性,cite属性用来指定解释添加或删除相关文字原因的文档的URL,datatime属性则用来设置修改时间,如
1
2
<del>I can <mark>see</mark></del>
<ins>I can <mark>see</mark></ins>

43.time元素可以用来表示时间或日期。html5新增,如果布尔属性pubdate存在,那么time元素表示的是整个HTML文档或离该元素最近的article元素的发布日期,datetime属性以RFC3399规定的格式指定日期或时间。

44.HTML要求浏览器将连在一起的几个空白字符这算为一个空格。

45.p元素代表段落。

46.div元素没有具体的含义。(标签尽量语义化,div跟span作备胎)

47.pre元素可以改变浏览器处理内容的方式,阻止合并空白字符,让源文档中的格式得以保留。常与code元素搭配。

48.blockquote元素表示引用自他处的一片内容。该元素的cite属性可以用来指定所引用的内容的来源。

49.hr元素代表段落级别的主题分隔,它在HTML5中的习惯样式是一条横贯页面的直线。

50.ol元素表示有序列表。

start属性设定的是列表首项的编号值,默认为编号`1`。<br/>
type属性用来设定显示在各列表项旁的编号的类型,其值:`1`/`a`/`A`/`i`/`I`。<br/>
如果使用了reversed属性,则使用降序,**该属性兼容不好**。

51.ul元素表示无序列表。

52.li元素表示列表中的项目,它可以与ul、ol和menu元素搭配使用。其value属性可以用来生成不连续的有序列表。

53.说明列表包含一系列术语/说明组合:dl/dt/dd。一个dt元素可以搭配多个dd元素。

54.HTML5是这样定义插图(figure)的:一个独立的内容单元,可带标题。

55.alt属性,也被称为alt text, 是当图片无法加载时显示的替代文本。alt属性对于盲人或视觉损伤的用户理解一幅图片中所描绘的内容非常重要,搜索引擎也会搜索alt属性。简而言之,每一张图片都应该有一个alt属性!

56.a标签href属性发短信:

  • ios:sms:电话号码&body=短信内容
  • android: sms:电话号码?body=短信内容

如:

1
<a href="sms:123456&body=helloworld">sms</a>

57.mete标签小计

The tag provides metadata about the HTML document. Metadata will not be displayed on the page, but will be machine parsable.
meta标签有下面的作用:

  • 1.搜索引擎优化(SEO)
  • 2.定义页面使用语言
  • 3.自动刷新并指向新的页面
  • 4.实现网页转换时的动态效果
  • 5.控制页面缓冲
  • 6.网页定级评价
  • 7.控制网页显示的窗口

meta标签共有两个属性,分别是http-equiv属性和name属性。

name属性

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

1
<meta name="参数" content="具体的描述">

其中name属性共有以下几种参数

  • A. keywords(关键字):用于告诉搜索引擎,你网页的关键字。

    1
    <meta name="keywords" content="博客,cool,前端">
  • B. description(网站内容的描述):用于告诉搜索引擎,你网站的主要内容。

    1
    <meta name="description" content="热爱前端与编程。这是我的前端博客">
  • C. viewport(移动端的窗口):常用于设计移动端网页。

    1
    <meta name="viewport" content="width=device-width, initial-scale=1">
  • D. robots(定义搜索引擎爬虫的索引方式):robots用来告诉爬虫哪些页面需要索引,哪些页面不需要索引。content的参数有all(搜索引擎将索引此网页与继续通过此网页的链接索引),none(搜索引擎将忽略此网页),index(搜索引擎索引此网页),noindex(搜索引擎不索引此网页),follow(搜索引擎继续通过此网页的链接索引搜索其它的网页),nofollow(搜索引擎不继续通过此网页的链接索引搜索其它的网页)。默认是all。

    1
    <meta name="robots" content="none">
  • E. author(作者):用于标注网页作者

    1
    <meta name="author" content="MichealWayne">
  • F. generator(网页制作软件):用于标明网页是什么软件做的

    1
    <meta name="generator" content="Sublime Text3">
  • G. copyright(版权):用于标注版权信息

    1
    <meta name="copyright" content="Lxxyx"> //代表该网站为Lxxyx个人版权所有。
  • H. revisit-after(搜索引擎爬虫重访时间):如果页面不是经常更新,为了减轻搜索引擎爬虫对服务器带来的压力,可以设置一个爬虫的重访时间。如果重访时间过短,爬虫将按它们定义的默认时间来访问。

    1
    <meta name="revisit-after" content="7 days" >
  • I. renderer(双核浏览器渲染方式):renderer是为双核浏览器准备的,用于指定双核浏览器默认以何种方式渲染页面。比如说360浏览器。

    1
    2
    3
    <meta name="renderer" content="webkit"> //默认webkit内核
    <meta name="renderer" content="ie-comp"> //默认IE兼容模式
    <meta name="renderer" content="ie-stand"> //默认IE标准模式

http-equiv属性

http-equiv顾名思义,相当于http的文件头作用。meta标签中http-equiv属性语法格式是:

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

其中http-equiv属性主要有以下几种参数:

  • A. content-Type(设定网页字符集)(推荐使用HTML5的方式):用于设定网页字符集,便于浏览器解析与渲染页面

    1
    2
    3
    <meta http-equiv="content-Type" content="text/html;charset=utf-8">  

    <meta charset="utf-8"> <! -- HTML5设定网页字符集的方式,推荐使用UTF-8 -->
  • B. X-UA-Compatible(浏览器采取何种版本渲染当前页面):用于告知浏览器以何种版本来渲染页面。(一般都设置为最新模式,在各大框架中这个设置也很常见。)

    1
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> <!-- 指定IE和Chrome使用最新版本渲染当前页面 -->
  • C. 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 秒。

用于禁止当前页面在移动端浏览时,被百度自动转码。虽然百度的本意是好的,但是转码效果很多时候却不尽人意。所以可以在head中加入例子中的那句话,就可以避免百度自动转码了。

1
<meta http-equiv="Cache-Control" content="no-siteapp" />

  • D. expires(网页到期时间):用于设定网页的到期时间,过期后网页必须到服务器上重新传输。

    1
    <meta http-equiv="expires" content="Sunday 26 October 2016 01:00 GMT" />
  • E. refresh(自动刷新并指向某页面):网页将在设定的时间内,自动刷新并调向设定的网址。

    1
    <meta http-equiv="refresh" content="2;URL=http://blog.michealwayne.cn/">
  • F. Set-Cookie(cookie设定):如果网页过期。那么这个网页存在本地的cookies也会被自动删除。

    1
    2
    3
    <meta http-equiv="Set-Cookie" content="name, date"> <!-- 格式 -- >

    <meta http-equiv="Set-Cookie" content="User=Wayne; path=/; expires=Sunday, 10-Jan-16 10:00:00 GMT">

58.站点图标

通常浏览器(如chrome)会访问站点域名根目录下的favicon.ico来确定站点的图标,当然我们可以自定义图标:

  • 第一步:将其保存在与网站的索引页面相同的目录中,以.ico格式保存(大多数浏览器将支持更通用的格式,如.gif或.png,但使用ICO格式将确保它能在如Internet Explorer 6一样久远的浏览器显示)
  • 第二步:将以下行添加到HTML 中以引用它:
    1
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">

59.lang属性

通过全局属性lang可以给站点设定语言,一般都是直接设置在根元素上:

1
<html lang="en-US">

标记lang属性能使搜索引擎更有效地索引,对于那些使用屏幕阅读器的视障人士也很有用(比如, 法语和英语中都有“six”这个单词,但是发音却完全不同)

你还可以将文档的分段设置为不同的语言。例如,我们可以把日语部分设置为日语,如下所示:

1
<p>Japanese example: <span lang="jp">ご飯が熱い。</span>.</p>

60.为什么链接地址建议使用相对地址的一个原因

易维护这种先不管,当页面像相对链接那样移动时,它们不会中断。但是,当链接到同一网站的其他位置时,你应该使用相对链接(当链接到另一个网站时,你需要使用绝对链接):当使用绝对URL时,浏览器首先通过DNS(见万维网是如何工作的)查找服务器的真实位置,然后再转到该服务器并查找所请求的文件。另一方面,相对URL,浏览器只在同一服务器上查找被请求的文件。因此,如果你使用绝对URL而不是相对URL,你就会不断地让你的浏览器做额外的工作,这意味着它的效率会降低。

61.有大量的HTML元素可以来标记计算机代码:

  • <code>: 用于标记计算机通用代码。
  • <pre>: 对保留的空格(通常是代码块)——如果您在文本中使用缩进或多余的空白,浏览器将忽略它,您将不会在呈现的页面上看到它。但是,如果您将文本包含在
    标签中,那么空白将会以与你在文本编辑器中看到的相同的方式渲染出来。
  • <var>: 用于标记具体变量名。
  • <kbd>: 用于标记输入电脑的键盘(或其他类型)输入。
  • <samp>: 用于标记计算机程序的输出。

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<pre><code>const para = document.querySelector('p');

para.onclick = function() {
alert('噢,噢,噢,别点我了。');
}</code></pre>

<p>请不要使用 <code>&lt;font&gt;</code><code>&lt;center&gt;</code> 等表象元素。</p>

<p>在上述的 JavaScript 示例中,<var>para</var> 表示一个段落元素。</p>


<p><kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>A</kbd> 选择全部内容。</p>

<pre>$ <kbd>ping mozilla.org</kbd>
<samp>PING mozilla.org (63.245.215.20): 56 data bytes
64 bytes from 63.245.215.20: icmp_seq=0 ttl=40 time=158.233 ms</samp></pre>

62.HTML验证地址

由 W3C(制定 HTML、CSS 和其他网络技术标准的组织) 创立并维护的标记验证服务。把一个 HTML 文档加载至本网页并运行 ,网页会返回一个错误报告。

63.响应式图片

  • srcset定义了我们允许浏览器选择的图像集,以及每个图像的大小。在每个逗号之前,我们写:
    • 一个文件名 (elva-fairy-480w.jpg.)
    • 一个空格
    • 图像的固有宽度(以像素为单位)(480w)——注意到这里使用w单位,而不是你预计的px。这是图像的真实大小,可以通过检查你电脑上的图片文件找到(例如,在Mac上,你可以在Finder上选择这个图像,然后按 Cmd + I 来显示信息)。
  • sizes定义了一组媒体条件(例如屏幕宽度)并且指明当某些媒体条件为真时,什么样的图片尺寸是最佳选择—我们在之前已经讨论了一些提示。在这种情况下,在每个逗号之前,我们写:
    • 一个媒体条件((max-width:480px))——你会在 CSS topic中学到更多的。但是现在我们仅仅讨论的是媒体条件描述了屏幕可能处于的状态。在这里,我们说“当可视窗口的宽度是480像素或更少”。
    • 一个空格
    • 当媒体条件为真时,图像将填充的槽的宽度(440px)


1
2
3
4
5
6
7
<img srcset="elva-fairy-320w.jpg 320w,
elva-fairy-480w.jpg 480w,
elva-fairy-800w.jpg 800w"
sizes="(max-width: 320px) 280px,
(max-width: 480px) 440px,
800px"
src="elva-fairy-800w.jpg" alt="Elva dressed as a fairy">

移动屏幕分辨率的区分

1
2
3
4
<img srcset="elva-fairy-320w.jpg,
elva-fairy-480w.jpg 1.5x,
elva-fairy-640w.jpg 2x"
src="elva-fairy-640w.jpg" alt="Elva dressed as a fairy">

区分来源的

1
2
3
4
5
<picture>
<source media="(max-width: 799px)" srcset="elva-480w-close-portrait.jpg">
<source media="(min-width: 800px)" srcset="elva-800w.jpg">
<img src="elva-800w.jpg" alt="Chris standing up holding his daughter Elva">
</picture>

因为把一段内嵌脚本放在引用外链样式表的<link>标签之后会导致页面阻塞去等待样式表的下载,浏览器这样做是为了确保内嵌脚本在执行时能获得最精准的样式信息。

65.可替换元素(replaced element)

可替换元素(replaced element)的展现效果不是由 CSS 来控制的。这些元素是一种外部对象,它们外观的渲染,是独立于 CSS 的。

简单来说,它们的内容不受当前文档的样式的影响。CSS 可以影响可替换元素的位置,但不会影响到可替换元素自身的内容。某些可替换元素,例如 <iframe> 元素,可能具有自己的样式表,但它们不会继承父文档的样式。

CSS 能对可替换元素产生的唯一影响在于,部分属性支持控制元素内容在其框中的位置或定位方式。有关详细信息,请参阅本文下面的控制内容框中的对象位置。

典型的可替换元素有:

  • <iframe>
  • <video>
  • <embed>
  • <img>

有些元素仅在特定情况下被作为可替换元素处理,例如:

  • <option>
  • <audio>
  • <canvas>
  • <object>
  • <applet>
    HTML 规范也说了 <input> 元素可替换,因为 “image” 类型的 <input> 元素就像<img>一样被替换。但是其他形式的控制元素,包括其他类型的 <input> 元素,被明确地列为非可替换元素(non-replaced elements)。该规范用术语小挂件(Widgets)来描述它们默认的限定平台的渲染行为。

用 CSS content 属性插入的对象是匿名的可替换元素。它们并不存在于 HTML 标记中,因此是“匿名的”。

尝试

多个html标签浏览器会如何解析

1
2
3
4
5
6
7
8
9
<!doctype html>

<html>
<body>html1</body>
</html>

<html>
<body>html2</body>
</html>

实际情况:
p-1.png

可见浏览器忽略了第二个html标签,但保留了里面内容

多个title标签

1
2
3
4
5
6
7
8
9
<!doctype html>

<html>
<head>
<title>tit 1</title>
<title>tit 2</title>
</head>
<body>html1</body>
</html>

实际情况:
p-2.png

可见浏览器保留了两个title标签,但是title取值仍然为第一个title标签的内容(感觉是否是因为解析HTML的时候遇到第一个title的时候就开始赋值了)

按照mdn的解释是这样:一个 元素只能包含一个 元素

多个head标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!doctype html>

<html>
<head>
<style>
body { color: yellow }
</style>
</head>
<head>
<style>
body { background: red }
</style>
</head>
<body>html1</body>
</html>

实际情况:
p-3.png
p-4.png

可见多个head标签的情况下,浏览器会合并到一个head标签内。