Biaofun竟然没想到你是这样的HTML

前言

还记得招聘JD上web语义化吗?

HTML5介绍和对比

紧接上篇,我们聊一聊我们今天的主角HTML5。我们知道在HTML1.0--HTML4.0版本HTML都是SGML的一个应用,所以都有DTD。而HTML5再也不是SGML的一个应用了,所以HTML5也没有DTD了。而且XHTML5的名称也变成了"以XML序列化的HTML5", 还记得我们上篇写的HTML4.0的文档声明吗?HTML4.0的声明如下

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

HTML5的声明就简单多了,只需如下声明就行

<!DOCTYPE html>

那么具体HTML5与HTML4.0有啥不同呢?有以下几个方面

文档类型声明,html5只有一型即<!DOCTYPE html>

新的解析顺序:不再基于SGML

新的元素:section, video,nav,aside等

input元素的新类型:data, email, url等

新的属性:ping(用于a和area), charset(用于meta), async(用于script)

全局属性: id, tabindex, repeat

新的全局属性:contenteditable, contextmenu, draggable, dropzone, hidden, spellcheck。

移除元素:acronym, applet, basefont, big, center, dir, font, frame, frameset, isindex, noframes, strike, tt

HTML5文档结构

html5的文档结构,我们可以先打开任何一个网站,再打开浏览器的开发者工具查看Elements选项卡,就可以看到我们的文档结构了。如下所示:

<!DOCTYPE html>

<html>

<head>

<title>hello</title>

</head>

<body>

</body>

</html>

看完这个文档结构我们再来看看html5的语法, 大家可以参考whatwg里面的HTML语法:

元素: <tagname>...</tagname>

开始标签 <tagname>

结束标签</tagname>

自闭合标签<tagname/>

文本:

text:普通文本节点,有两种字符必须被转义<和&。比如<p>text</p>

<![CDATA[text]]>: 不用考虑大多数的转义情况,只用考虑]]>的转义。这个在html5中只能用于svg和MathML了

注释:<!--comments-->

文档类型<!DOCTYPE HTML>

以上就是HMTL的部分语法,有些不建议使用,比如可以省略掉一些标签,这个一旦这么用了我觉得可能会有人说你不讲码德,这样做会造成整个文档的可读性变差。

看完语法我们再来看一下HTML的元素:

图片

点击图片查看大图

一般我们的html标签都是写在body里,那么你知道head里面能写哪些标签吗?首先head元素是规定文档相关的配置信息(元数据),也就是一个存放配置信息的一个容器。head标签里能写以下几种标签

title标签,表示文档的标题,一般显示在浏览器的选项卡上。

base标签,页面基准的URL

meta标签:元信息通用标签

charset属性的meta:例如<meta charset="UTF-8">

http-equiv属性的meta: 例如<meta http-equiv="content-type" content="text/html, charset="utf-8">

viewport属性的meta, 这个在移动端上用的比较多。例如<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no"/>

其他的预定义标签

style标签

script标签

link标签

HTML5语义化

回到我们开头说的问题,为啥要做语义化呢?div+span不是也行吗?这里我先说一下div+span这种结构,div和span属于语义中立的标签,这种搭配不存在语义的问题,如果没有语义化的要求这种方案是不错的方案,宁愿不用也不能滥用。再说一下语义化,语义类标签对开发者更友好,增强了可读性,能够更清晰的看出网页的结构方便开发和维护。同时也方便机器的阅读,搜索引擎可以评估HTML文档中的文本片段的重要性,方便读屏软件自动生成目录等等。

根据图片上的HMTL标签的含义,我来语义化的举个例子,先看代码

<code>

<pre>

<ol>

世界人口最多的国家排名

<li>中国</li>

<li>印度</li>

</ol>

</pre>

</code>

<!-- 输出内容 -->

<samp>

<pre>

世界人口最多的国家排名

1. 中国

2. 印度

</pre>

</samp>

以上代码我没有加文档结构,当用浏览器打开html文件的时候,浏览器会自动给加上。我们来看一下这个例子代码所代表的含义。

我们先来看code标签里的内容,代码是有格式的,所以我们使用pre标签保留代码格式,而它又是HTML代码,所以我们使用code标签表示它是一段代码,然后我们使用的转义字符<将<转义了,防止浏览器解析。

我们再看一下samp标签里的内容,这个是上面一段代码产生的结果,所以我们使用samp标签,而上面一段代码输出的内容是有格式的,我们应该保留其内容格式,所以使用pre标签。

大家可以用以下代码验证上面的结果:

<ol>

世界人口最多的国家排名

<li>中国</li>

<li>印度</li>

</ol>

总结

在使用语义化时, 需要大家使用的时候对照图片中的标签含义进行斟酌,还是那句宁愿不用也不要滥用。

文章编辑:标梵互动(https://www.biaofun.com/)

(0)

相关推荐