重拾HTML

HTML作为页面的骨架,可能简单得不值一提,但是要清晰、透彻地写出一份HTML可能你需要了解更多

本文知识点如下:

  • HTML快速讲解
  • meta元信息
  • 语义化
  • 代码规范

HTML快速讲解

HTML叫超文本标记语言

如果你把“超文本标记语言”分开读,那就很好理解了:超文本(链接)标记

概念清楚了,我们再来看看可能只有一些老头子才会问的问题(你可以跳过这部分,现在已经可以不关注这个问题了,但有些老文章还会说起这个问题,所以稍微解答下):

XHTMLXML是什么鬼

简单说,我们现在的HTML,其实是HTML 4.01(这个东西也有版本的)。但是它并不严格,在HTML中即使你不按要求写上结束标签,浏览器打开可能一样好好的

为了不让你乱写,就有了XHTML,但是这东西杀伤力太大,对以前的HTML中的错误无法包容,很多程序员为了避免重新修改以前虽然错了但是还能正常显示的页面,实际采用XHTML的很少

然后,HTML5登场,HTML5作为新一代标准身份出来,与XHTML不同的是,HTML5引入了新特性,同时不破坏以前的代码

XHTML现在来看只是作为4和5作为中间的一个产物

最后来说说xml

xmlSGML(标准通用标记语言)的一个子集,而HTML也是SGML的子集,两个应用场景不同,xml更关注的是数据

顺便提一句,从HTML5起,HTML不再坚守SGML的语法。

来看代码吧

为了避免每次敲重复的内容以及保持代码规范,你可以自己写一个空模板,每次直接使用就行了。下边是我使用的模板:

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
    <head>
      <meta charset="utf-8" />
       <title>网站标题</title>
      <meta name="description" content="不超过150个字符">
      <!-- 使用最新的IE和chrome -->
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
      <!-- 禁止手机上缩放 -->
      <meta name ="viewport" content ="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
      <!-- 禁止百度转码 -->
      <meta http-equiv="Cache-Control" content="no-siteapp">
      
      <link rel="stylesheet" href="css/normalize.css">
      <link rel="stylesheet" href="css/main.css">
    </head>
    <body>

    </body>
</html>

meta 元信息

meta有两个作用(分别对应namehttp-equiv属性)

  1. 提供页面信息给计算机识别——name
    name属性对应网页内容,以便于搜索引擎机器人查找、分类,其中最常用的是description和keywords;还有就是浏览器厂商定义的meta值,譬如ios的诸多属性移动端页面必带的viewport。
  2. 模拟http响应报头——http-equiv
    http-equiv 举一个最常见例子
    <meta charset="utf-8">
    设置编码方式,其实它完整写法是这样的
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    除了设置编码,还有cookie,refresh等
    如果感兴趣,可以读读这篇文章
    更多的meta标签,可以参考常用的HTML头部标签

语义化

初学者需要避免的是,遇到块级元素都是<div>, 行内元素都是<span>。HTML5引入了更多的语义标签,比如:

  • <header>——页眉
  • <footer>——页脚
  • <article>——文章
  • <nav>——导航

html5语义化标签参考
语义化一方面是SEO,另外一方面,自己也更好组织代码;在后边实际给大家体会怎么写语义化的结构,现在先有个概念。
对于IE有些HTML5标签不支持,可以引入normalize.css。

代码规范

这部分内容来自mdo,你可以参看原文

语法

  • 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法。
  • 嵌套元素应当缩进一次(即两个空格)。
  • 对于属性的定义,确保全部使用双引号,绝不要使用单引号。
  • 不要在自闭合(self-closing)元素的尾部添加斜线 -- HTML5 规范中明确说明这是可选的。
  • 不要省略可选的结束标签(closing tag)(例如,</li> 或 </body>)。
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
  <head>
    <title>Page title</title>
  </head>
  <body>
    <img src="images/company-logo.png" alt="Company">
    <h1 class="hello-world">Hello, world!</h1>
  </body>
</html>

HTML5 doctype

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

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
  <head>
  </head>
</html>

语言属性

根据 HTML5 规范,强烈建议为 html 根元素指定 lang 属性,从而为文档设置正确的语言。这将有助于语音合成工具确定其所应该采用的发音,有助于翻译工具确定其翻译时所应遵守的规则等等。
更多关于 lang 属性的知识可以从 此规范 中了解。

这里列出了语言代码表

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
  <head>
  </head>
</html>

IE 兼容模式

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

阅读这篇 stack overflow 上的文章可以获得更多有用的信息。

字符编码

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

<head>
  <meta charset="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>
  /* ... */
</style>

<!-- JavaScript -->
<script src="code-guide.js"></script>

实用为王

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

属性顺序

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

  • class
  • id, name
  • data-*
  • src, for, type, href
  • title, alt
  • aria-*, role
    class 用于标识高度可复用组件,因此应该排在首位。id 用于标识具体组件,应当谨慎使用(例如,页面内的书签),因此排在第二位。
<a class="..." id="..." data-modal="toggle" href="#">
  Example link
</a>

<input class="form-control" type="text">

<img src="..." alt="...">

布尔(boolean)型属性

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

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

元素的布尔型属性如果有值,就是 true,如果没有值,就是 false。
如果一定要为其赋值的话,请参考 WhatWG 规范:

如果属性存在,其值必须是空字符串或 [...] 属性的规范名称,并且不要再收尾添加空白符。
简单来说,就是不用赋值。

<input type="text" disabled>

<input type="checkbox" value="1" checked>

<select>
  <option value="1" selected>1</option>
</select>

减少标签的数量

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

<!-- Not so great -->
<span class="avatar">
  <img src="...">
</span>
<!-- Better -->
<img class="avatar" src="...">
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 格式后期处理。 Jeremy Keith在 Fronteers 2010 上的主题演讲 今天我想跟大家谈一谈HTM...
    LordZhou阅读 1,118评论 0 17
  • HTML、XML、XHTML 有什么区别 1.HTML 是用来描述网页的一种语言,指的是超文本标记语言 (Hype...
    饥人谷_牛牛阅读 678评论 0 2
  • 1. 浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层、表示层、行为层分别是:HTML、CSS、Ja...
    程序猿人王小贱阅读 1,866评论 1 11
  • 1.HMML,XML,XHTML有什么区别 1、html即是超文本标记语言(Hyper Text Markup L...
    饥人谷_oathy阅读 611评论 0 1
  • HTML、XML、XHTML有什么区别? XMLXML是The Extensible Markup Languag...
    zx9426阅读 424评论 0 1