上一篇简单了解了Web发展的简要历史,本篇简单介绍前端开发的基本三要素:HTML、CSS、JavaScript中的HTML以及一些在开发、学习过程中易被忽视的知识点。

HTML

HTML全称是超文本标记语言 (Hyper Text Markup Language),是一种包含多种标签的标记语言,用来描述网页。浏览器读取HTML文档,并以网页的形式显示它们,浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容。因此,一个网页可以简单的理解为HTML标签和纯文本的集合,通常,我们把一个HTML文档称为一个网页。

HTML是一种标记语言,有一套标记标签,几乎每一种标签都有一个开始标签(start tag)和结束标签(end tag)。通过开始标签和结束标签定义HTML元素。因此,在绝大多数情况下(空元素以开始标签结束而结束),HTML元素以开始标签起始,以结束标签终止,开始标签与结束标签之间的内容为HTML元素的内容。大多数HTML元素允许嵌套,正是因为HTML元素的嵌套,才构成了HTML文档。

上面简单介绍了一下HTML语言以及基本的语法,想要了解更多HTML元素、属性等相关内容,请参考W3CSchool,那里有详细的说明和示例。

下面我们说一说在开发过程中易被忽视的,但又非常重要的几个知识点。对于没有说到的,后续再做补充。

1. 文档类型 <!DOCTYPE>

声明帮助浏览器正确地显示网页。

注意,<!DOCTYPE>声明不是HTML标签,它的作用是为浏览器提供一项信息,即这个HTML文档是用什么版本编写的。由于HTML存在多个版本,只有知道了HTML文档的确切版本,浏览器才能正确的显示HTML文档。

下面列举几个常用的DOCTYPE声明。

HTML 5

<!DOCTYPE html>

HTML 4.01 Strict

该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。

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

HTML 4.01 Transitional

该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。

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

HTML 4.01 Frameset

该 DTD 等同于 HTML 4.01 Transitional,但允许框架集内容。

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

在HTML 4.01版本中,我们看到每种DOCTYPE声明中都含有一个DTD,那什么是DTD呢?DTD就是文档类型定义(Document Type Definition),是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。它是标准通用标记语言(SGML)规格的一部分,文档可根据某种DTD语法规则验证格式是否符合此规则。文档类型定义也可用做保证标准通用标记语言文档格式的合法性,可通过比较文档和文档类型定义文件来检查文档是否符合规范,元素和标签使用是否正确。一言以蔽之,DTD就是定义了这个文档中允许有什么,不允许有什么,用的对不对等内容(详情请参考)。

那为什么HTML5中不需要引用DTD呢?上一篇中我们知道,HTML4基于SGML,DTD是SGML的一部分,所以HTML4需要引用DTD,而HTML5是基于XML(SGML的一个子集),因此不需要对 DTD 进行引用,但是需要!DOCTYPE来规范浏览器的行为(让浏览器按照它们应该的方式来运行)。

关于SGML、HTML和XML的关系,可以参考这篇文章

2. META元素

标签始终位于head元素中,提供关于 HTML 文档的元数据。元数据不会显示在页面上,但是对于机器是可读的。典型的情况是,meta 元素被用于规定页面的描述、关键词、文档的作者、最后修改时间以及其他元数据。meta元素不包含任何内容,它的属性定义了与文档相关联的名/值对。
meta元素必须包含content属性,常与之搭配使用有http-equiv属性和name属性。
以下是http-equiv和name的常用取值表。

属性 说明
http-equiv content-type
expires
refresh
set-cookie
把 content 属性关联到 HTTP 头部。
name author
description
keywords
generator
revised
others
把 content 属性关联到一个名称。

3. HTML字符实体

在 HTML 中,某些字符是预留的。比如用于定义标签的尖括号(<>)。要正确显示这些字符,就必须借助于字符实体(character entities)。那什么是字符实体呢,可以简单的理解为用于表示一些保留字符和特殊符号的代码。比如我们需要显示一些键盘无法输入的符号,此时就必须借助于字符字符实体来完成。另一种常见的情况就是,出于安全的考虑,我们在显示用户输入的信息的时候,需要将信息转化成字符实体才能进行显示,防止注入攻击。

以下是常见的HTML字符实体。

显示结果 描述 实体名称 实体编号
  空格 &nbsp;  
< 小于号 &lt; <
> 大于号 &gt; >
& 和号 &amp; &
" 引号 &quot; "
' 撇号 &apos; (IE不支持) '
&cent; ¢
£ &pound; £
¥ 日圆 &yen; ¥
欧元 &euro;
§ 小节 &sect; §
© 版权 &copy; ©
® 注册商标 &reg; ®
商标 &trade;
× 乘号 &times; ×
÷ 除号 &divide; ÷

更过实体请参考HTML 实体符号参考手册

4. URL编解码

说到URL就不能不提另一个容易混淆的概念URI。URI即统一资源标识符(Uniform Resource Identifier),用于表示web上某一个具体的资源。而URL即统一资源定位符(Uniform Resource Locator),是URI的一种形式(另一种形式是URN,统一资源名),也是最常用的形式。URL用来表示Web上某个资源的特定位置。例如:

http://www.cnblogs.com/bingooo/p/5080137.html

表示(Frontend Newbie) Web简史这篇博文的具体位置。

关于更多的URI、URL和URN的比较,网上有很多文章,参考这篇 你知道URL、URI和URN三者之间的区别吗?

在日常开发过程中,我们需要关注的更多的是URL的编解码的问题。

首先我们要弄清楚URL编码问题的由来。

既然URL要统一地命名网络上所有的资源,就要通过各种不同的协议来传送这些资源,也就是说,URL是可移植的(portable)。然而这些协议在传输数据时往往会使用不同的机制,所以URL要确保能通过这些协议进行安全传输即不能丢失信息。有些协议,比如传输电子邮件的简单邮件传输协议(Simple Mail Transfer Protocal, SMTP)所采用的传输方法就是略去一些特定的字符。为了避开这些问题,URL只能使用一些相对较小的、通用的安全字母表中的字符。另外,为了能供人类阅读,一些不可见、不可打印的字符即使能够安全的传输也不能在URL中使用。最后,URL还必须是完整的,即能包含安全字母表之外的二进制数据或字符,所以,需要引入一种转义机制。

为了满足URL的可移植性、完整性、能够安全的传输并能被人类阅读,URL的设计者最终在ASCII码表的基础上集成了转义序列。通过转义序列,可以将任何字符值或数据通过ASCII字符集的有限子集进行编码。

除了不安全字符以外,还有一种情况我们要对URL进行编码,那就是当要传输的数据中包含保留及受限字符的时候,要对这些字符进行编码。

下面我们看通过什么方法来完成URL的编解码。

前端开发中,我们通常通过encodeURI()encodeURIComponent()对URL进行编码,通过decodeURI()decodeURIComponent()对URL进行解码。

encodeURI()encodeURIComponent()的区别在于,encodeURI()只对于整个URL进行编码,即对于URL字符集中的保留字符不会进行编码,但是encodeURIComponent()则将对于这些保留字符也进行编码。

我们在使用encodeURI()encodeURIComponent()的时候要根据具体的业务场景进行选用,要分清楚哪些字符需要编码,哪些字符需要不能编码。

更多的关于encodeURI()encodeURIComponent()的比较,请参考这篇文章

下表列出了URL的保留及受限字符。

字符 保留/受限
% 保留作为转义字符的转义标志
/ 保留作为路径组件中分隔路径段的定界符
. 保留在路径组件中使用
.. 保留在路径组件中使用
# 保留作为分段定界符使用
? 保留作为查询字符串定界符使用
; 保留作为参数定界符使用
: 保留作为方案、用户/口令,以及主机/端口组件的定界符使用
$,+ 保留
@&= 在某些方案的上下文中有特殊的含义,保留
{}|\^~[]' 由于各种传输Agent代理,比如各种网关的不安全处理,使用受限
<>" 不安全;这些字符在URL范围之外通常是有意义的,比如在文档中对URL自身进行定界,所以要对其进行编码
0x00-0x1F,ox7F 受限,这些十六进制范围内的字符都在ASCII字符集的不可打印区间内
>0x7F 受限,十六进制在此范围内的字符都不在ASCII字符集的7比特范围内

小结

HTML是整个Web三要素中最简单也是最基本的。只有将HTML搞清楚之后,在学习CSS和JavaScript的时候,很多概念就能轻松的理解了。

需要强调一点的是,HTML提供了一些控制显示效果的标签,HTML本身的某些标签也可以用来控制页面布局,但是在开发过程中我们应该坚决避免这样做。后面我们会了解到,可以通过CSS来控制页面的显示,并且使用更加方便,功能更加强大。

HTML只用来表示最原始的文档含义就够了。

(Frontend Newbie) Web三要素(一)的更多相关文章

  1. (Frontend Newbie)Web三要素(三)

    上一篇简单介绍了Web三要素中的层叠样式表,本篇主要介绍三要素中最后一个,也是最难掌握的一个-----JavaScript. JavaScript 老规矩不能破,先简要交代 JavaScript 的历 ...

  2. (Frontend Newbie)Web三要素(二)

    上一篇简单介绍了HTML的基本知识以及一些在开发学习过程中容易忽视的知识点,本篇介绍Web三要素中另一个重要组成部分----层叠样式表(Cascading Style Sheets). CSS 按照一 ...

  3. web三要素

    1.带动web的三驾马车 html5,css,javascript(js)就是带动web的三架马车,html是web的结构,css是web的样式,而js则是web的行为(即与用户的交互) 如果把htm ...

  4. 移动web开发之屏幕三要素

    × 目录 [1]屏幕尺寸 [2]分辨率 [3]像素密度 前面的话 实际上,并没有人提过屏幕三要素这个词,仅是我关于移动web开发屏幕相关部分总结归纳的术语.屏幕三要素包括屏幕尺寸.屏幕分辨率和屏幕像素 ...

  5. Web Service基础——规范及三要素

    1. Java中的Web Service规范 Java 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC).JAX-RS.JAXM&SAAJ(废弃). 1.1 JAX- ...

  6. 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...

  7. Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

    转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...

  8. WebService基础学习(二)—三要素

    一.Java中WebService规范      JAVA 中共有三种WebService 规范,分别是JAX-WS.JAX-RS.JAXM&SAAJ(废弃).   1.JAX-WS规范    ...

  9. webService 三要素

    WebService(jax-ws)三要素 SOAP: 基于HTTP协议,采用XML格式,用来传递信息的格式. WSDL: 用来描述如何访问具体的服务.(相当于说明书) UDDI: 用户自己可以按UD ...

随机推荐

  1. Canvas保存为图片

    public static void GenerateCanvas(string imgSaveName, int canvasWidth, int canvasHeight, string imgD ...

  2. ComicEnhancerPro 系列教程十八:JPG文件长度与质量

    作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度 ...

  3. dynamic的好处

    dynamic 可在反射.json反序列化时使用.已达到减少代码量的效果.看代码 using System; namespace ConsoleApp2 { class Program { stati ...

  4. webservice不能序列化接口问题,返回值为IList或者参数为接口的解决办法。

    1. webservice 不能返回泛型接口集合IList,解决办法如下链接: 参考资料:http://www.cnblogs.com/yinhaiming/articles/1379424.html ...

  5. Regex 常用的正则表达式

    .校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非 ...

  6. HashMap数据结构的C++实现

    Hash表在计算机的应用编程中是一种很常用的数据结构,很多算法的实现都离不开它.虽然C++11标准模板库中的有hashmap类型的实现,但在工程实践中,若项目本身使用的是较低版本的C++,或是出于性能 ...

  7. python-循环(while循环、for循环)

    循环:循环会重复执行循环体里面的代码,python中循环可分为while循环和for循环. break 不管循环有没有完成,立即结束循环 continue 结束本次循环,继续进行下一次循环 一.whi ...

  8. SDUT OJ 数据结构实验之链表五:单链表的拆分

    数据结构实验之链表五:单链表的拆分 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  9. centos配置免密登录

    一.准备工作 1.先准备两台centos机器.例如:192.168.1.100和192.168.1.101两台机器,配置101免密登录100 2.默认centos会自带ssh和stfp,机器未安装,请 ...

  10. office 2013 破解工具 及 软件下载

     win7/win8/win10  office2013 破解工具 下载地址: https://pan.baidu.com/s/1sZeJOCWq1fZ3KIOWvmrAQQ office2013  ...