HTML学习总结

弄懂HTML,XHTML,HTML5,XML之间的区别

XHTML 是在 HTML 的基础上向 XML 过渡的东西,和 HTML 最大的区别就在于它更严谨而且语义化更强

比如 XHTML 规定所有标记都必须小写,因为 XML 需要区分大小写,而 HTML 不这么要求;XHTML 要求标签必须闭合,不允许开放标签存在比如“<P>第一段</P>第二段”这样的写法在 XHTML 里是错误的,但是 HTML 允许它的存在)而HTML5的出现及,导致XHTML2.0已成为历史。

HTML4.01 的声明:

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

HTML5的声明:

<!DOCTYPE html>

XHTML1.0的声明:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

HTML5 是最新的 HTML 标准,他的主要目标是提供所有内容而不需要任何的像 flash, silverlight 等的额外插件,这些内容来自动画,视频,富 GUI 等。他的上一个版本是HTML4.0.1

最直观的就是XML语法要求更为严格,一般用来存放数据,进行序列化和反序列化操作。

基础标签 标签手册

标题 - <h1> - <h6>

段落 - <p>  

链接 - <a href="url" target="_blank"> 新窗口打开</a> 

       - 还可以使用a标签的id和name写锚点名,href的value值"#锚点名"进行跳转

图像 - <img src="url" alt=""/>

表格 - table,tr,td

列表 - ul > li (无号)  ol > li (有序) dl > dt - dd (自定义列表)

块    - div

文本 - span

隔离页 - <iframe src="URL" frameborder="0"></iframe> 无边框

框架 - 

<frameset cols="25%,75%">
  <frame src="page1.htm">
  <frame src="page2.htm">
</frameset>

表单 - 

<form action="http://www.example.com/test.asp" method="post/get">
 <input type="text" name="lastname" value="Nixon" size="30" maxlength="50">
 <input type="password">
 <input type="checkbox" checked="checked">
 <input type="radio" checked="checked">
 <input type="submit">
 <input type="reset">
 <input type="hidden">
<input type="button">
<select> <option>Apples <option selected>Bananas <option>Cherries </select> <textarea name="Comment" rows="60"cols="20"></textarea> </form>

HTML5 输入类型

HTML5 增加了多个新的输入类型:

  • color
  • date
  • datetime
  • datetime-local
  • email
  • month
  • number
  • range
  • search
  • tel
  • time
  • url
  • week

HTML5 属性

HTML5 为 <input> 增加了如下属性:

  • autocomplete
  • autofocus
  • form
  • formaction
  • formenctype
  • formmethod
  • formnovalidate
  • formtarget
  • height 和 width
  • list
  • min 和 max
  • multiple
  • pattern (regexp)
  • placeholder
  • required
  • step

并为 <form> 增加如需属性:

  • autocomplete (on/off控制是否自动填写)
  • novalidate(是否对type进行验证)

HTML全局属性 参考

HTML事件大全 参考

HTML5 Canvas 画布 参考

Canvas

Canvas 通过 JavaScript 来绘制 2D 图形。

Canvas 是逐像素进行渲染的。

在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。

  • 依赖分辨率
  • 不支持事件处理器
  • 弱的文本渲染能力
  • 能够以 .png 或 .jpg 格式保存结果图像
  • 最适合图像密集型的游戏,其中的许多对象会被频繁重绘

<
canvas id="myCanvas" width="200" height="100">
</canvas>
<script type="text/javascript">var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.fillStyle="#FF0000";
cxt.fillRect(0,0,150,75);
</script>

video和audio 参考

<embed> 元素(HTML4 中不支持,HTML5 中允许。定义内嵌对象。)

支持嵌入视频,音频,图片,页面

<embed height="100" width="100" src="song.mp3" />
<embed width="100%" height="500px" src="snippet.html">
<embed src="audi.jpeg">

HTML5 语义元素

标签 描述
<article> 定义文章。
<aside> 定义页面内容以外的内容。
<details> 定义用户能够查看或隐藏的额外细节。
<figcaption> 定义 <figure> 元素的标题。
<figure> 规定自包含内容,比如图示、图表、照片、代码清单等。
<footer> 定义文档或节的页脚。
<header> 规定文档或节的页眉。
<main> 规定文档的主内容。
<mark> 定义重要的或强调的文本。
<nav> 定义导航链接。
<section> 定义文档中的节。
<summary> 定义 <details> 元素的可见标题。
<time> 定义日期/时间。

HTML5 定义了八个新的语义 HTML 元素。所有都是块级元素。

header, section, footer, aside, nav, main, article, figure { display: block; }

HTML5拖拽drag 和 drop

<script>
// 阻止默认不允许拖拽的行为 function allowDrop(ev) { ev.preventDefault(); }
// 鼠标开始拖拽 function drag(ev) { ev.dataTransfer.setData("text", ev.target.id); }
// 鼠标松开 function drop(ev) { ev.preventDefault(); var data = ev.dataTransfer.getData("text"); ev.target.appendChild(document.getElementById(data)); }
</script> </head> <body> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

<!-- 允许拖拽的元素 --> <img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)"
width="336" height="69"
>
</body>

HTML5 本地存储对象

在 HTML5 之前,应用程序数据只能存储在 cookie 中,包括每个服务器请求。

本地存储则更安全,并且可在不影响网站性能的前提下将大量数据存储于本地。

与 cookie 不同,存储限制要大得多(至少5MB),并且信息不会被传输到服务器。

HTML 本地存储提供了两个在客户端存储数据的对象:

  • window.localStorage - 存储没有截止日期的数据
  • window.sessionStorage - 针对一个 session 来存储数据(当关闭浏览器标签页时数据会丢失)

在使用本地存储时,请检测 localStorage 和 sessionStorage 的浏览器支持:

if (typeof(Storage) !== "undefined") {
    // 针对 localStorage/sessionStorage 的代码
} else {
    // 抱歉!不支持 Web Storage ..
}

// 存储
localStorage.setItem("lastname", "Gates"); // 或写localStorage.lastname = "Gates"
// 取回
localStorage.getItem("lastname");// 或读 localStorage.lastname
// 删除
localStorage.removeItem("lastname");

HTML5 引入了应用程序缓存(Application Cache)

应用程序缓存为应用带来三个优势:

  1. 离线浏览 - 用户可在应用离线时使用它们
  2. 速度 - 已缓存资源加载得更快
  3. 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源

manifest 文件有三个部分:

  • CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
  • NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
  • FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

完整写法

CACHE MANIFEST:
# 2012-02-21 v1.0.0
/theme.css
/logo.gif
/main.js

NETWORK:
login.asp

FALLBACK:
/html/offline.html



提示:以 "#" 开头的是注释行,但也可满足其他用途。应用的缓存只会在其 manifest 文件改变时被更新。如果您编辑了一幅图像,或者修改了一个 JavaScript 函数,这些改变都不会被重新缓存。更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法。浏览器对缓存数据的容量限制可能不太一样(某些浏览器的限制是每个站点 5MB)

HTML5 Web Workers

当在 HTML 页面中执行脚本时,页面是不可响应的,直到脚本已完成。

Web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 运行在后台。

在创建 web worker 之前,请检测用户浏览器是否支持它:

if (typeof(Worker) !== "undefined") {
    // 是的!支持 Web worker!
    // 一些代码.....
} else {
    // 抱歉!不支持 Web Worker!
}

创建 Web Worker 文件

我们创建了计数脚本。该脚本存储于 "demo_workers.js" 文件中:

var i = 0;

function timedCount() {
    i = i + 1;
    postMessage(i); //postMessage() 方法 - 它用于向 HTML 页面传回一段消息
    setTimeout("timedCount()",500);
}

timedCount();
注释: web worker 通常不用于如此简单的脚本,而是用于更耗费 CPU 资源的任务。

创建 Web Worker 对象

if (typeof(w) == "undefined") {
    w = new Worker("demo_workers.js");
//它会创建一个新的 web worker 对象,然后运行 "demo_workers.js" 中的代码: }

然后我们就可以从 web worker 发生和接收消息了。

向 web worker 添加一个 "onmessage" 事件监听器:

w.onmessage = function(event){ 
document.getElementById("result").innerHTML = event.data;
};

当 web worker 传送消息时,会执行事件监听器中的代码。来自 web worker 的数据会存储于 event.data 中。

终止 Web Worker

w.terminate();

由于 web worker 位于外部文件中,它们无法访问下例 JavaScript 对象:

  • window 对象
  • document 对象
  • parent 对象

Server-Sent 事件(SSE)

Server-Sent 事件指的是网页自动从服务器获得更新。

以前也可能做到这一点,前提是网页不得不轮询是否有可用的更新。通过 Server-Sent 事件,更新能够自动到达。

例如:Facebook/Twitter 更新、股价更新、新的博文、赛事结果,等等。

var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
    document.getElementById("result").innerHTML += event.data + "<br>";
};
  • 创建一个新的 EventSource 对象,然后规定发送更新的页面的 URL(本例中是 "demo_sse.php")
  • 每当接收到一次更新,就会发生 onmessage 事件
  • 当 onmessage 事件发生时,把已接收的数据推入 id 为 "result" 的元素中
// 检测服务器发送事件的浏览器支持
if(typeof(EventSource) !== "undefined") { // 是的!支持服务器发送事件! // 一些代码..... } else { // 抱歉!不支持服务器发送事件! }

EventSource 对象

在上例中,我们使用 onmessage 事件来获取消息。不过还可以使用其他事件:

事件 描述
onopen 当通往服务器的连接被打开
onmessage 当接收到消息
onerror 当发生错误

HTML 中有用的字符实体

注释:实体名称对大小写敏感!

显示结果 描述 实体名称 实体编号
  空格 &nbsp; &#160;
< 小于号 &lt; &#60;
> 大于号 &gt; &#62;
& 和号 &amp; &#38;
" 引号 &quot; &#34;
' 撇号  &apos; (IE不支持) &#39;
分(cent) &cent; &#162;
£ 镑(pound) &pound; &#163;
¥ 元(yen) &yen; &#165;
欧元(euro) &euro; &#8364;
§ 小节 &sect; &#167;
© 版权(copyright) &copy; &#169;
® 注册商标 &reg; &#174;
商标 &trade; &#8482;
× 乘号 &times; &#215;
÷ 除号 &divide; &#247;

Emoji 字符

表情符号也是来自 UTF-8 字母的字符 参考手册

  • 😄 是 128516  <p>&#128516;</p>
  • 😍 是 128525  <p>&#128525;</p>
  • 💗 是 128151  <p>&#128151;</p>

字符集 参考

ISO-8859-1 是 HTML 4 的默认字符集。此字符集支持 256 个不同的字符代码。HTML 4 同时支持 UTF-8。

ANSI(Windows-1252)是原始的 Windows 字符集。 ANSI 与 ISO-8859-1 相同,不同之处在于 ANSI 具有 32 个额外的字符。

HTML5 规范鼓励 Web 开发人员使用 UTF-8 字符集,该字符集涵盖了世界上几乎所有的字符和符号!

<meta charset="UTF-8">

URL 编码 参考

URL 编码将字符转换为可通过因特网传输的格式

URL 只能使用 ASCII 字符集 通过因特网进行发送。

由于 URL 通常包含 ASCII 集之外的字符,因此必须将 URL 转换为有效的 ASCII 格式

URL 编码使用后跟十六进制数字的 "%" 替代不安全的 ASCII 字符

在 JavaScript 中,您可以使用 encodeURIComponent() 函数。

HTTP请求消息状态返回码 参考

常用:

2xx: 成功
200 OK 请求成功(其后是对GET和POST请求的应答文档。)
201 Created 请求被创建完成,同时新的资源被创建。
202 Accepted 供处理的请求已被接受,但是处理未完成。

3xx: 重定向
301 Moved Permanently 所请求的页面已经转移至新的url。
302 Found 所请求的页面已经临时转移至新的url。

4xx: 客户端错误
400 Bad Request 服务器未能理解请求。
401 Unauthorized 被请求的页面需要用户名和密码。
403 Forbidden 对被请求页面的访问被禁止。
404 Not Found 服务器无法找到被请求的页面
405 Method Not Allowed 请求中指定的方法不被允许。
406 Not Acceptable 服务器生成的响应无法被客户端所接受。
415 Unsupported Media Type 由于媒介类型不被支持,服务器不会接受请求。

5xx: 服务器错误
500 Internal Server Error 请求未完成。服务器遇到不可预知的情况。

HTTP 方法

  • GET
  • POST
  • PUT
  • HEAD
  • DELETE
  • PATCH
  • OPTIONS

有关 GET 请求的其他一些注释:

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制(URL 的最大长度是 2048 个字符)
  • GET 请求只允许 ASCII 字符。
  • GET 请求只应当用于取回数据(不修改)

有关 POST 请求的其他一些注释:

  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求

HTML问答篇