(Frontend Newbie) Web三要素(一)
上一篇简单了解了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字符实体。
显示结果 | 描述 | 实体名称 | 实体编号 |
---|---|---|---|
空格 | | ||
< | 小于号 | < | < |
> | 大于号 | > | > |
& | 和号 | & | & |
" | 引号 | " | " |
' | 撇号 | ' (IE不支持) | ' |
¢ | 分 | ¢ | ¢ |
£ | 镑 | £ | £ |
¥ | 日圆 | ¥ | ¥ |
€ | 欧元 | € | € |
§ | 小节 | § | § |
© | 版权 | © | © |
® | 注册商标 | ® | ® |
™ | 商标 | ™ | ™ |
× | 乘号 | × | × |
÷ | 除号 | ÷ | ÷ |
更过实体请参考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三要素(一)的更多相关文章
- (Frontend Newbie)Web三要素(三)
上一篇简单介绍了Web三要素中的层叠样式表,本篇主要介绍三要素中最后一个,也是最难掌握的一个-----JavaScript. JavaScript 老规矩不能破,先简要交代 JavaScript 的历 ...
- (Frontend Newbie)Web三要素(二)
上一篇简单介绍了HTML的基本知识以及一些在开发学习过程中容易忽视的知识点,本篇介绍Web三要素中另一个重要组成部分----层叠样式表(Cascading Style Sheets). CSS 按照一 ...
- web三要素
1.带动web的三驾马车 html5,css,javascript(js)就是带动web的三架马车,html是web的结构,css是web的样式,而js则是web的行为(即与用户的交互) 如果把htm ...
- 移动web开发之屏幕三要素
× 目录 [1]屏幕尺寸 [2]分辨率 [3]像素密度 前面的话 实际上,并没有人提过屏幕三要素这个词,仅是我关于移动web开发屏幕相关部分总结归纳的术语.屏幕三要素包括屏幕尺寸.屏幕分辨率和屏幕像素 ...
- Web Service基础——规范及三要素
1. Java中的Web Service规范 Java 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC).JAX-RS.JAXM&SAAJ(废弃). 1.1 JAX- ...
- 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...
- Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...
- WebService基础学习(二)—三要素
一.Java中WebService规范 JAVA 中共有三种WebService 规范,分别是JAX-WS.JAX-RS.JAXM&SAAJ(废弃). 1.JAX-WS规范 ...
- webService 三要素
WebService(jax-ws)三要素 SOAP: 基于HTTP协议,采用XML格式,用来传递信息的格式. WSDL: 用来描述如何访问具体的服务.(相当于说明书) UDDI: 用户自己可以按UD ...
随机推荐
- [Lua快速了解一下]Lua的控制语句
-Lua中没有++或者--的骚操作 -while loop sum = num = do sum = sum + num num = num + end print("sum =" ...
- .Net高级面试宝典
1.in/exists/join 执行效率? 答:用法 select * from HK_UsersBasic where Users_ID in (select AccEmail from dbo ...
- webapi put 请求405问题
put 请求的时候 浏览器会像服务器发送两个请求 如何没做任何配置第一个options请求是会报错的 这是需要配置路由给options作响应 这时options请求就通过了,然后你们会看到你的put ...
- 转载:ResultMap和ResultType在使用中的区别
在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...
- Android Studio无法找到tool.jar解决方法!
今天安装并配置了JDK,可以在DOS窗口中使用“java -version”命令查看JAVA版本信息了,随后安装Android Studio,但是等Android Studio安装完毕,启动时候发现, ...
- ES聚合报错
在测试Elasticsearch聚合的时候报了一个错误.具体如下: GET /megacorp/employee/_search { "aggs": { "all_int ...
- 八大排序算法的python实现(七)基数排序
代码: #coding:utf-8 #author:徐卜灵 import math #print math.ceil(3.2) 向上取整4.0 #print math.floor(3.2) 向下取整3 ...
- JSP标签的用法
JSP动作标签: 通过动作标签,程序员可以在JSP页面中把页面的显示功能部分 封装起来,是整个页面更简洁和易于维护 <jsp:useBean> 装载一个将在JSP页面中使用的JavaBea ...
- 获取表单提交的数据getParameter()方法
请求对象:request public String getParameter(String name); 通过request的getParameter(String name)方法获取 表单里面的n ...
- Java create azure web app
create a certificate <java-install-dir>/bin/ keytool -genkey -alias <keystore-id> -keyst ...