TML,是Hyper Text Markup Language的缩写,即“超文本标记语言”的缩写。
介绍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第一次展示在大众的面前。
和我们常见的计算机编程语言,例如C语言、Java语言、Python语言相比,HTML本身只是一个标记语言,也就是说,HTML是一个带有HTML标记的文本文件,HTML标记告诉浏览器如何进行展示,文本则是展示的内容。
早在上个世纪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标准。
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 />
从我们软件开发者的角度来看,HTML4.01和XHTML是一份非常优秀的标准。但是,这两个标准发布后,直接被开发者和浏览器厂商无视。
根据统计,全球互联网500强的网站,只有不到8%的网站满足HTML4.01和XHTML标准。大厂网站尚且如此,普通网站就更加不用说了。
这个结果,无疑给W3C组织泼了一盆冷水,W3C再也没有兴趣对HTML制定新的标准。从此,HTML标准好像进入了一个黑暗的中世纪,下一个标准HTML5的推出,已经是14年零9个月之后的事了。
考虑到前面的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/css
和 text/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,我们一起飞!
以下是一个标准的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>
避免多个框架混合使用,在同一个工程里面要保持主框架的一致性,多框架同时使用会造成代码混乱,后期会变得越来越难维护。
1、全局样式禁止使用!important
2、避免使用导入式引入css样式文件;
css复制代码<style type="text/css">
@import url(./demo.css);
</style>
历史页面会有一些功能下线,在去除页面初始化的js语句的同时,也要将依赖的js文件删除,避免资源加载浪费
开启Gzip压缩功能, 可以使网站的css、js 、xml、html 文件在传输时进行压缩,提高访问速度
在开发过程中,发现无用字段占传输比例30%以上时,请进行返回数据的删减,加快数据请求速度
上传图片之前一定要做图片的无损压缩,节省网络流量,推荐网站tinypng
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 标签元素小写使用,自定义组件使用小驼峰命名(自定义标签避免和原生标签同名)
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 名称界定符 ,不要驼峰命名法和下划线;
避免选择器嵌套层级过多,尽量少于 3 级;
使用命名空间防止命名冲突,利于维护;
css复制代码/* 不推荐: 无意义 不易理解 */
#yee-1901 {}
#meunBtn {}
.login_input {}
/* 推荐: 明确详细 */
#gallery {}
#login {}
.login-input {}
.meun-btn {}
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/>标签守则
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童鞋
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')
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
*请认真填写需求信息,我们会在24小时内与您取得联系。