整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

HTML简史

HTML简史

TML,是Hyper Text Markup Language的缩写,即“超文本标记语言”的缩写。

1、HTML的面世

介绍HTML之前,先介绍一下SGML。

SGML,是Standard Generalized Markup Language的缩写,中文一般译为“标准通用标记语言”,SGML是一个标准,定义了如何对文档进行注释的规范,让我们了解文档的指定片段的含义。

HTML由CERN(欧洲粒子物理研究所)的科学家Tim Berners-Lee(中文一般直译为“提姆.伯纳斯李”)和他的同事根据SGML创建,HTML可以说是SGML的一个应用。

1991年,Tim Berners-Lee开发出了万维网(World Wide Web),开发出了简单的浏览器,用于展示HTML(浏览软件),这是HTML第一次展示在大众的面前。

2、HTML与常见的计算机编程语言的差别

和我们常见的计算机编程语言,例如C语言、Java语言、Python语言相比,HTML本身只是一个标记语言,也就是说,HTML是一个带有HTML标记的文本文件,HTML标记告诉浏览器如何进行展示,文本则是展示的内容。

3、HTML1.0、HTML2.0、HTML3.2、HTML4.0标准

早在上个世纪60年代末,互联网的雏形APARNET就已经出现。互联网出现后,出现了大量的应用,例如文件服务器、远程登录、电子邮件、新闻组,但互联网的使用者仅限于大学的计算机专业学生和专业技术人员,普通的使用者基本上是望而却步。

但万维网和HTML的横空出世,使得互联网的使用界面焕然一新,让普通的电脑使用者可以轻松使用互联网,互联网用户开始急剧增长。

HTML出现后,各种浏览器软件不断出现,为了规范各种浏览器软件对HTML的支持,IETF(互联网工程工作组)和W3C(万维网联盟)开始制定HTML规范:

1993年6月,IETF发布HTML草案,该草案被称为HTML1.0规范;

1995年11月,IETF发布HTML的RFC,编号为RFC1866,该RFC被称为HTML2.0规范;

1996年1月,W3C发布HTML3.2标准,该标准被各浏览器厂商广泛支持;

1997年12月,W3C发布HTML4.0标准。

4、HTML4.01和XHTML标准推出

HTML出现后,受到了大量非计算机专业开发者的欢迎,为了迎合广大HTML开发者,浏览器对开发者提供的HTML文档非常宽容,以至于我们很难写出一个“错误的HTML文档”。

例如,我们编写了一个没有任何HTML标签的文档:

This is my html.

There is no tag.

我们将这个文档保存为welcome.html文件,鼠标双击这个文件,浏览器可以显示该文件:

对HTML开发者的迎合,导致HTML开发者越来越随意,由此出现了两个严重的问题:

(1)HTML的发展越来越混乱;

(2)各浏览器软件的兼容性越来越差。

为了让开发者编写更严格的HTML代码,W3C在1999年12月份发布了HTML4.01规范,接着在2000年1月份发布XHTML规范,这两者差别不大。

XHTML,即可扩展HTML。XHTML这个名词,是XML和HTML的混合体,表示制定HTML规范时,参考XML标准:

(1)一个HTML文档有且仅有一个根元素,即<html>元素;

(2)每个元素都有开始标签和结束标签;

(3)标签之间可以嵌套,但是不能出现交叉的情况,即不能出现如下的嵌套关系:

<p>
<div>
hello, everyone.
</p>
</div>

(4)元素的属性必须有属性值,而且属性值要求用引号括起来。例如下面的属性值是不可接受的:

<input type="checkbox" checked />

5、HTML4.01和XHTML标准的尴尬

从我们软件开发者的角度来看,HTML4.01和XHTML是一份非常优秀的标准。但是,这两个标准发布后,直接被开发者和浏览器厂商无视。

根据统计,全球互联网500强的网站,只有不到8%的网站满足HTML4.01和XHTML标准。大厂网站尚且如此,普通网站就更加不用说了。

这个结果,无疑给W3C组织泼了一盆冷水,W3C再也没有兴趣对HTML制定新的标准。从此,HTML标准好像进入了一个黑暗的中世纪,下一个标准HTML5的推出,已经是14年零9个月之后的事了。

6、HTML5的发布

考虑到前面的HTML系列标准推出后,无论是对浏览器厂商,还是对HTML开发者,影响都不大。于是,一个叫WHATWG的组织,也就是Web Hypertext Application Technology Working Group(Web超文本应用技术工作组)开始制定一种新的规范,认为现存的HTML网页都是合法的。

WHATWG的努力,得到了广大开发者和浏览器厂商的支持,W3C最终认可了WHATWG的努力,并根据这个理念推出了HTML5标准。

HTML5标准推出后,大部分浏览器厂商第一时间宣布支持,广大前端开发者也专门花时间学习HTML5标准,如此热烈的支持,对于HTML系列标准来说,是前所未有的事情!

浏览器占有率第一的微软IE,略显傲慢,没有支持HTML5,竟然被大量前端开发者抛弃,面对市场份额的急剧下滑,微软公司连忙宣布,新的浏览器Edge将会支持HTML5。

  • 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法。

  • 嵌套元素应当缩进一次(即两个空格)。

  • 对于属性的定义,确保全部使用双引号,绝不要使用单引号。

  • 不要在自闭合(self-closing)元素的尾部添加斜线 -- HTML5 规范中明确说明这是可选的。

  • 不要省略可选的结束标签(closing tag)(例如,</li></body>)。

实例:

<!DOCTYPE html><html>

HTML5 doctype

为每个 HTML 页面的第一行添加标准模式(standard mode)的声明,这样能够确保在每个浏览器中拥有一致的展现。

实例:

<!DOCTYPE html><html>

语言属性

根据 HTML5 规范:

强烈建议为 html 根元素指定 lang 属性,从而为文档设置正确的语言。这将有助于语音合成工具确定其所应该采用的发音,有助于翻译工具确定其翻译时所应遵守的规则等等。

lang 属性的知识可以从 此规范 中了解。

这里列出了语言代码表。

<html lang="zh-CN">

IE 兼容模式

IE 支持通过特定的 <meta> 标签来确定绘制当前页面所应该采用的 IE 版本。除非有强烈的特殊需求,否则最好是设置为 edge mode,从而通知 IE 采用其所支持的最新的模式。

<meta http-equiv="X-UA-Compatible" content="IE=Edge">

字符编码

通过明确声明字符编码,能够确保浏览器快速并容易的判断页面内容的渲染方式。这样做的好处是,可以避免在 HTML 中使用字符实体标记(character entity),从而全部与文档编码一致(一般采用 UTF-8 编码)。

<head>

引入 CSS 和 JavaScript 文件

根据 HTML5 规范,在引入 CSS 和 JavaScript 文件时一般不需要指定 type 属性,因为 text/csstext/javascript 分别是它们的默认值。

HTML5 spec links

  • Using link

  • Using style

  • Using script

<!-- External CSS --><link rel="stylesheet" href="code-guide.css"><!-- In-document CSS --><style>

实用为王

尽量遵循 HTML 标准和语义,但是不要以牺牲实用性为代价。任何时候都要尽量使用最少的标签并保持最小的复杂度。

属性顺序

HTML 属性应当按照以下给出的顺序依次排列,确保代码的易读性。

  • class

  • id, name

  • data-*

  • src, for, type, href

  • title, alt

  • aria-*, role

class 用于标识高度可复用组件,因此应该排在首位。id 用于标识具体组件,应当谨慎使用(例如,页面内的书签),因此排在第二位。

<a class="..." id="..." data-modal="toggle" href="#">

布尔(boolean)型属性

布尔型属性可以在声明时不赋值。XHTML 规范要求为其赋值,但是 HTML5 规范不需要。

更多信息请参考 WhatWG section on boolean attributes:

元素的布尔型属性如果有值,就是 true,如果没有值,就是 false。

如果一定要为其赋值的话,请参考 WhatWG 规范:

如果属性存在,其值必须是空字符串或 [...] 属性的规范名称,并且不要在首尾添加空白符。

简单来说,就是不用赋值。

<input type="text" disabled><input type="checkbox" value="1" checked><select>

减少标签的数量

编写 HTML 代码时,尽量避免多余的父元素。很多时候,这需要迭代和重构来实现。请看下面的案例:

<!-- Not so great --><span class="avatar">

JavaScript 生成的标签

通过 JavaScript 生成的标签让内容变得不易查找、编辑,并且降低性能。能避免时尽量避免。

如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!

TML配置

  • 文件应以“”首行顶格开始,推荐使用“”。
  • 必须申明文档的编码charset,并且使用UTF-8编码。
  • 移动端必须使用 viewport 适配
  • 页面title是极为重要的不可缺少的一项。

以下是一个标准的html结构

html复制代码<!DOCTYPE html>
<html>
  <head>
    <!-- 必须声明 utf-8 编码格式 -->
    <meta charset="utf-8">
    <!-- 页面标题不能为空 -->
    <title>京东商城:商家后台</title>
    <!-- 移动端必须使用 viewport 适配需要, PC 看场景需要使用 -->
    <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
     
    <!-- 样式文件 以外链形式在此处引入 -->
    <link href="//static.360buyimg.com/bus/test/shop1_3/UI2.0update.css" rel="stylesheet">
  </head>
  <body>
    <!-- 页面主体 -->
    <div class="warp">
      <header>顶部内容区域,比如:菜单头</header>
      <div class="content">主内容区域</div>
      <footer>顶部页尾区域,比如:备案号</footer>
    </div>
     
    <!-- js文件 在此处引入 -->
    <script type="text/javascript" src="//wl.jd.com/joya.js"></script>
  </body>
</html>

主框架(jQuery,vue,react,angular等) 避免混合使用

避免多个框架混合使用,在同一个工程里面要保持主框架的一致性,多框架同时使用会造成代码混乱,后期会变得越来越难维护。

Css开发规范

1、全局样式禁止使用!important

2、避免使用导入式引入css样式文件;

css复制代码<style type="text/css">
  @import url(./demo.css);
</style>

未使用的js/css禁止引用

历史页面会有一些功能下线,在去除页面初始化的js语句的同时,也要将依赖的js文件删除,避免资源加载浪费

文件必须使用gzip压缩

开启Gzip压缩功能, 可以使网站的css、js 、xml、html 文件在传输时进行压缩,提高访问速度

api接口中,无用字段占传输比例30%以上时,删除无用字段

在开发过程中,发现无用字段占传输比例30%以上时,请进行返回数据的删减,加快数据请求速度

关于图片压缩

上传图片之前一定要做图片的无损压缩,节省网络流量,推荐网站tinypng

HTML的标准结构

html复制代码<!DOCTYPE html>
<html>
  <head>
    <!-- 必须声明 utf-8 编码格式 -->
    <meta charset="utf-8">
    <!-- keywords 关键词 和 Description 页面描述 便于搜索引擎检索,不强制使用 -->
    <meta name="Keywords" Content=”关键词1,关键词2,关键词3,关键词4″>
    <meta name="Description" Content=”页面描述″>
    <!-- 移动端必须使用 viewport 适配需要, PC 看场景需要使用 -->
    <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
    <!-- 推荐手动引入指定路径 favicon  -->
    <link rel="shortcut icon" href="path/to/favicon.ico">
    <!-- 样式文件必须以外链形式在此处引入 -->
    <link href="//static.360buyimg.com/bus/test/shop1_3/UI2.0update.css" rel="stylesheet">
    <!-- 内联样式 -->
    <style type="text/css">
      .warp {
        margin: 0;
        padding: 0;
      }
    </style> -->
    <!-- 页面标题不能为空 -->
    <title>页面标题</title>
  </head>
  <body>
  <!-- 页面主体 -->
    <div class="warp">
    <header>顶部内容区域,比如:菜单头</header>
    <div class="content">主内容区域</div>
    <footer>顶部页尾区域,比如:备案号</footer>
    </div>
 
    <!-- JavaScript 文件在此处引入 -->
    <script type="text/javascript" src="//wl.jd.com/joya.js"></script>
  </body>
</html>
  • 不同模块区域可使用简要备注标识模块内容
  • HTML 标签语义化使结构清晰,比如:
  • CSS 外链引入必须放在 中
  • JS 外链引入必须放在中
  • 省略图像、媒体文件、样式表和脚本等嵌入式资源 URL 协议头部声明 ( http:// , https:// ),用//代替。
  • favicon 在未指定 favicon 时,大多数浏览器会请求 Web Server 根目录下的 favicon.ico 。为了保证 favicon 可访问,避免404,必须遵循以下两种方法之一:1。在 Web Server 根目录放置 favicon.ico 文件,2。使用 link 指定 favicon

HTML标签使用守则

标签小写

原生 HTML 标签元素小写使用,自定义组件使用小驼峰命名(自定义标签避免和原生标签同名)

html复制代码<!-- 错误 ? -->
<DIV></DIV>
<SPAN></SPAN>  
 
<!-- 正确 ? -->
<div></div>  
<p></p> 
 
<!-- 自定义组件 -->
<shareDialog><shareDialog/>

套用规则

禁止在行内元素中嵌套块级元素??

html复制代码<!-- 错误的嵌套 ? -->
<span><div></div></span>  
<i><p></p></i>     
 
<!-- 正确的嵌套 ? -->
<div><span></span></div>  
<p><i></i></p>   

更多标签使用规则介绍请查看尾部附录

属性定义

定义属性赋值时,使用双引号,禁止单双引号混用

html复制代码<!-- 错误的定义 ? -->
<input id="formTitle" type='text' placeholder="请输入标题">   
 
<!-- 正确的定义 ? -->
<input id="formTitle" type="text" placeholder="请输入标题" data="formTitle">   

正确闭合

除自闭合标签外,所有标签都需正确的编写闭合标签

常用自闭合标签: <br />、<col />、<img />、<input />、<link />、<meta />、<keygen />

ID、Class 命名使用规范

ID 和 Class 取通用且有意义的名字;

使用连字符 - 作为 ID、Class 名称界定符 ,不要驼峰命名法和下划线;

避免选择器嵌套层级过多,尽量少于 3 级;

使用命名空间防止命名冲突,利于维护;

css复制代码/* 不推荐: 无意义 不易理解 */
#yee-1901 {}
#meunBtn {}
.login_input {}
 
/* 推荐: 明确详细 */
#gallery {}
#login {}
.login-input {}
.meun-btn {}
  • 避免选择器和 Class、ID 叠加使用
  • 声明顺序,相关属性应为一组,建议遵循: 定位布局属性 -> 盒模型属性 -> 文本属性 -> 视觉属性 -> 其他属性
  • 对于 JS 操作相关选择器 前面需加上 特殊应用标识前缀
css复制代码/* 标准的声明顺序 */
.declaration-order {
  /* 布局属性 */
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 100;
 
  /* 盒模型属性 */
  display: block;
  box-sizing: border-box;
  width: 100px;
  height: 100px;
  padding: 10px;
  border: 1px solid #e5e5e5;
  border-radius: 3px;
  margin: 10px;
  float: right;
  overflow: hidden;
 
  /* 文本属性 */
  font: normal 13px "Helvetica Neue", sans-serif;
  line-height: 1.5;
  text-align: center;
 
  /* 视觉属性 */
  background-color: #f5f5f5;
  color: #fff;
  opacity: .8;
 
  /* 其他属性 */
  cursor: pointer;
}

图片相关使用规范

<img/>标签守则

  • src 属性不能为空,需添加默认值(托底图片路径)
  • 为重要图片添加 alt 属性,当无法显示图像时,浏览器将显示替代文本,便于 SEO 及用户阅读
  • 为图片标签 增加 width 和 height 属性,避免图片加载从无到有,导致页面抖动
  • 大量图片流资源,使用懒加载技术按需加载
html复制代码<!-- 禁止 src 取值为空 -->
<img src="" />
 
<!-- 推荐 -->
<img src="xxxx" alt="xxx" style="width:100px;height:100px;" />

图片资源守则

大小

尺寸 小于 50 ×?50 的请使用 字体图标(iconfont)或者 将多个图标合成一张大图使用(雪碧图) 尺寸大于 50 ×?50 的图片,引入前先使用 在线压缩 对其进行压缩 ,图片大小尽量控制在 300kb 以内

倍率

PC端、移动端 推荐使用 2倍图 (@2x),避免设备分辨率过高,图片显示失真模糊 如有兼容 iPad 场景等特殊场景,可使用 3倍图(@3x)

html复制代码<img src="//logo@200x200.jpg" alt="xx" style="width:100px;height:100px;"/>

2倍图: 图片展示区域大小 : 图片实际尺寸=1 :2

无论使用几倍图,图片大小都需遵守上条限制

如遇图片倍图问题,可咨询 @UI童鞋

性能守则

  • 避免不必要的 DOM 操作浏览器遍历 DOM 元素的代价是昂贵的。最简单优化 DOM 树查询的方案是,当一个元素出现多次时,将它保存在一个变量中,来避免多次查询 DOM 树。
js复制代码/* 推荐用变量保存频繁使用的 DOM 元素*/
var ul=document.getElementsByTagName('ul')[0],
  lis=document.getElementsByTagName('ul')[0].getElementsByTagName('p')
   
/* 推荐用变量保存频繁使用的 DOM 元素*/
var ul=document.getElementsByTagName('ul')[0],
  lis=ul.getElementsByTagName('li')
  • 异步加载第三方内容 当你无法保证嵌入第三方内容 比如 埋点、调研等资源正常工作的时候,你需要考虑用异步加载这些代码,避免阻塞整个页面加载。
  • 减少标签的数量 编写 HTML 代码时,尽量避免多余的标签嵌套,避免 DOM树的冗余
  • 控制静态资源数量

1个页面中建议CSS文件不要超过3个(1个组件库样式文件、1个项目公共样式、1个页面样式); JS文件不要超过5个(1个框架文件、1个组件库文件、1个项目公共库文件、1个页面脚本文件、1个埋点文件)。

编码建议

缩进使用 2个空格 样式建议引入 CSS reset 重置各浏览器自带样式差异 github.com/necolas/nor… JS 中字符串定义 使用 '' 单引号

其他建议

保持一定的代码洁癖,尤其在大型项目中

  • 代码逻辑应当直截了当,清晰易读,保持与业务逻辑与代码一一对应关系,减少逻辑错误的可能性,降低二次开发成本;
  • 删除过期无用代码,减少代码过大,造成不必要的维护成本
  • 代码尽量复用,拥有组件化思想
  • 代码命名合理化,即使不写注释情况下,也可以让其他开发人员一眼明白意思
  • 性能调至最优,降低耦合度,避免别人做不合理的优化时而造成的混乱
  • 整洁的模块边界,明确的划分模块之间的逻辑边界,尽量保证职责单一,避免功能交叉混杂
  • 让代码没有改进的余地,在开发时把各种情况都想到了,如果有人企图改进它,总是会回到原点

性能检测工具 - Lighthouse简介 Lighthouse是一个Google开源的自动化工具,主要用于改进网络应用的质量。Lighthouse会对各个测试项的结果打分,并给出优化建议,这些打分标准和优化建议可以视为Google的网页最佳实践。

Chrome拓展程序 谷歌商店安装lighthouse后,在右上角或者菜单里点击图中图标,Options可以配置测试项目,点击Generate report即可测试。

命令行

js复制代码<!-- 安装 lighthouse 组件(Node.js V5.0 或以上版本) -->
npm install -g lighthouse
<!-- 启动测试 (测试过程中会自动打开 Chrome 完成后会在当前目录生成一个静态HTML文件) -->
lighthouse https://www.baidu.com/ --view
<!-- 帮助-->
lighthouse --help

检测结果

【附录】常用的标签规范

标签

语义

嵌套常见错误

常用属性

<a></a>

超链接/锚

a不可嵌套a

href,name,title,rel,target

<div></div>

块级容器



<p></p>

段落

不能嵌套块级元素


<span></span>

内联容器(行内元素)

不可嵌套块级容器


<form></form>

表单


action,target,method,name

<input />

输入框

不可嵌套元素

type,name,value,checked,disabled,maxlength,readonly,accesskey

<textarea></textarea>

多行文本输入控件


name,accesskey,disabled,readonly,rows,cols

<img />

图像

不可嵌套元素

alt,src,width,height

<label></label>

标签(常用input元素定义标注)

不可嵌套块级容器

for

<table></table>

表格

只可嵌套表格子元素

width,align,background,cellpadding,cellspacing,summary,border

<tbody></tbody>

表格主体

只能嵌套在table内


<thead></thead>

表头

只能嵌套在table内


<tr></tr>

表格行

嵌套于table或thead、tbody、tfoot


<td></td>

表格中的单元格

只用于tr

colspan,rowspan

<th></th>

表格中的标题单元格

只用于tr

colspan,rowspan

<tfoot></tfoot>

表格表尾

只用于table


<button></button>

按钮

不可嵌套表单、表格等块级元素

type,disabled

<select></select>

列表框或下拉框

只能嵌套option或optgroup

name,disabled,multiple

<option></option>

select中的一个选项

只能嵌套在select内

value,selected,disabled

<ol></ol>

有序列表

只能嵌套li


<ul></ul>

无序列表

只能嵌套li


<li></li>

无序列表项

只能嵌套在 ul 或 ol 内


<iframe></iframe>

内嵌一个网页


frameborder,width,height,src,scrolling,name

<br />

换行



<link />

引用样式或icon

不可嵌套任何元素

type,rel,href

<meta />

文档信息

只用于head内

content,http-equiv,name

<script></script>

引用脚本

不可嵌套任何元素

type,src

<style></style>

引用样式

不可嵌套任何元素

type,media

<title></title>

文档标题

只用于head内


点赞收藏支持、手留余香、与有荣焉,动动你发财的小手哟,感谢各位大佬能留下您的足迹。


作者:StriveToY
链接:https://juejin.cn/post/7262378982255394873