HTML中,一个HTML元素是HTML文件的一个基本组成单元。HTML文件采用采用树形结构安排HTML元素。更进一步的说,一个HTML元素是一个满足一项或多项DTD要求的元素。HTML元素可以拥有属性和内容,可以是标题、段落、链接、列表、嵌入媒体或者其他的任何符合DTD要求的格式。
在HTML語法中,大多數元素編寫一個開始標記和結束標記,與其之間的內容。HTML標記是由元素名稱,包圍於兩側之小於號與大於號之括號所組成。其結束標記擁有一斜線位在小於號之括號後,有別於其起始標記。例如:一個段落是由p元素所代表,其被寫成
p
<p>在HTML語法中,大多數元素編寫......</p>
然而,並非所有的此類元素需要結束標記,甚至是開始標記必須存在。某些元素,即所謂的void空元素,並無結束標記。典型的例子即br元素,其表示一個顯著之換行,像是一首詩或一個住址。一個空元素的行為是預先定義的,並且它不能包含任何內容或其他元素。例如:在電影海底總動員中的牙醫師的地址將被寫成
br
<p>P. Sherman<br>42 Wallaby Way<br>Sydney</p>
HTML元素可以是容器或者为空。 容器元素 结构如下:
<标记>
</tag>
空元素指仅包含一个标记,该标记既是开始标记同时也是结束标记。空元素可以有任意数量的属性<标记名 />。在XHTML规范中,标记中的斜线符号是必须的[1]。要求使用一個單獨標籤開啟與關閉元素。若要指定其為一個空元素,符號"/"包含於標記之結尾(不能與位於結束標記中的開始的符號"/"混淆)。例如:
<标记名 />
<p>P. Sherman<br/>42 Wallaby Way<br/>Sydney</p>
英语中有时HTML元素也被称为“tags”,严格的说tag是指元素的开始或者结束标记。
HTML屬性(英语:HTML attribute)用来指示元素的附加的性质。放在開始標記中。例如:abbr元素,其表示縮寫,預計一個title屬性包含其開始標記。將被寫成
abbr
title
<abbr title="abbreviation">abbr.</abbr>
<p … >
class
foo
This is a paragraph.
</p>
<p class="foo">This is a paragraph.</p>
在HTML中,元素(和属性)名字可以是大写或者小写,但在XHTML中,必须是小写。[2]大写是旧的用法,并且是HTML规范中说明的方法,但是小写更为通用。
HTML元素是在自1995年以來發布的一系列免費開放標準中定義的,最初由IETF以及隨後由W3C制订。
1990年代的瀏覽器大戰期間,網頁瀏覽器的软件商开始不断的添加自定义的元素,有些被后来的标准吸收。并非所有的软件商都支持这些非标准的元素,一般对于非标准的元素,或者是忽略,或者是导致显示不正确。
1998年,XML(一种简化的SGML)引入一种方法,允许任何人开发自己的元素并融合到XHTML文件中,使用支持XML的浏览器(用户代理)可以浏览任意元素。[3]
而后采用XML兼容的办法,重新制订了HTML 4.01标准,XHTML 1.0(扩展的HTML)。二者的元素相同,绝大多数情况下,XHTML 1.0文件的元素在HTML 4.0文件中是合法的。本文除非另外指出,应用的都是基于SGML的HTML,对于XHTML多数情况下仍然适用(二者区别见HTML)。
自从HTML第一版以来,已经有数个元素因为过期,不再新的标准中推荐使用或者干脆删除。
目前由于并存三种HTML 4.01/XHTML 1.0 DTD标准,而使得HTML的验证变得复杂起来,这三种标准分别是:
HTML第一个标准(HTML 2.0)包含四个过期的元素。其中一个在HTML 3.2中被列为无效。所有的四个在HTML 4.01 Transitional中都被列为无效,HTML4.01 Transitional标准此外还将另外十个元素定义为无效。以上这些元素再加两个在HTML 4.01 Strict中同样被定义为无效。由于frame元素在显示方面的诸多问题以及其功能已经可以由其他元素替代,在未来的标准中不再保留,虽然目前在Transitional和Frameset DTD中仍然有效。
(严格的说,目前的XHTML标准XHTML 1.1(2001)根本不支持frame。基本上与XHTML 1.0 Strict相同,但是又包含了Ruby markup模块。)[4]
一个经常导致错误理解的原因是不严格的使用deprecated(过期)一词来泛指过期的和无效的,以及今后一段时间过期的不同的状态。
根据分离原则,HTML的功能在于给一个文件的内容增加语义和结构的信息。增加文件的展示和行为的功能,例如增加CSS stylesheets和图形来增加文件的展示功能;通过链接到外部文件和脚本增加与用户交互的行为。User agent也可以根据作者所提供的stylesheet在不同的介质(显示器,打印机)上展示不同效果。同时保持语义上的一致。
<html>...</html>
<head>...</head>
<body>...</body>
<base/>
href
base
framename,规定页面中所有的超链接和表单在何处打开;该属性会被每个具体链接中的target 属性覆盖。
<basefont/> (deprecated)
font
<isindex/> (deprecated)
isindex
<link/>
<link rel="stylesheet" type="text/css" href="url" title="description_of_style">
<link rel="next" href="url">
head
link
<meta/>
HTML屬性(英语:HTML attribute)之其他未提供的資訊。因其共通性,meta元素指定關聯的key-value pairs。一般情況之下,meta元素傳達關於文件之隱藏資訊。若干meta標籤可被使用,上述之全部應被嵌套在head元素中。每個 meta元素之特定目的是由其屬性來定義。
meta
<meta http-equiv="foo" content="bar">
bar
name
content
scheme
<meta name="foo" content="bar" scheme="DC">
<object>...</object>
<script>...</script>
src
<style>...</style>
<style type="text/css"> ... </style>
@import
<style> @import url; </style>
<title>...</title>
在視覺化瀏覽器中,可顯示元素可呈現為區塊或內行。雖然所有元素是文件序列之一部分,但是區塊元素 出現在其父元素中:
反言之,內行元素被視為文件文字流之部分;其無法擁有邊距、寬度或高度設定,並且跨行。
區塊元素(或稱區塊層級元素)擁有矩形結構。在預設情況下,這些元素將占据父元素的整個寬度,因而不允許任何其他元素佔據已被其所占的同一水平空間。
區塊元素的矩形結構經常稱之為盒模型,並由幾個部分所組成。每個元素包含以下內容:
上述部分僅指CSS渲染的具體實施,並與HTML元素本身無關。
<p>...</p>
P
<h1>...</h1> <h2>...</h2> <h3>...</h3> <h4>...</h4> <h5>...</h5> <h6>...</h6>
<h1>...</h1>
<h2>...</h2>
<h3>...</h3>
<h4>...</h4>
<h5>...</h5>
<h6>...</h6>
<h1>
<h2>
<h3>
<h6>
<hn>
<dl>...</dl>
DL
<dt>...</dt>
DT
<dd>...</dd>
DD
<ol>...</ol>
type
{list-style-type: foo}
<ol type="foo">
A
a
I
i
1
OL
<ul>...</ul>
UL
<li>...</li>
LI
<dir>...</dir> (deprecated)
<ul>
DIR
<address>...</address>
ADDRESS
<blockquote>...</blockquote>
cite
BLOCKQUOTE
<center>...</center> (deprecated)
<div>
<del>...</del>
<div>...</div>
<hr/>
<ins>...</ins>
<noscript>...</noscript>
<pre>...</pre>
pre
{white-space: pre; font-family: mono-space;}
IMG
OBJECT
BIG
SMALL
SUP
SUB
PRE
SCRIPT
行內元素無法直接放置在body元素中;其必須完全嵌套於區塊及元素中。[12]
body
<a>...</a>
id
<a name="foo">
<abbr>…</abbr>
<abbr title="微型计算机">微机</abbr>
<acronym>...</acronym> (deprecated)
<acronym title="Hyper-Text Markup Language">HTML</acronym>
<dfn>…</dfn>
<em>…</em>
<strong>…</strong>
这些与元素主要用于方便显示计算机软件编码和与使用者交互(<code>);显示源代码变量(<var>);用户输入(<kbd>);以及终端输出(<samp>)。
<code>…</code>
Code snippet.
<samp>…</samp>
<kbd>…</kbd>
<var>…</var>
视觉效果的元素仅仅对可视浏览器起作用,因此不推荐使用,如果可能应该使用层叠样式表。部分元素在HTML 4 / XHTML 1.0中被宣布过期或者无效的,其它的在当前的XHTML 2.0草案XHTML 2.0(页面存档备份,存于互联网档案馆)中被定义为无效的。当前的HTML 5草案HTML 5中,b, i和small还是有效的.
<b>…</b>
{font-weight: bold}
<strong>...</strong>
<img/>
alt
<blink>...</blink> (deprecated)
<marquee>...</marquee> (deprecated)
<!-- A Comment -->
在HTML中的 注解(以及相近的XML, SGML, SHTML. )語法與SGML相同。
不同於其它HTML標籤,注解不支援巢狀結構。
標籤: <!--注解一<!--注解二-->注解三--> 看起來會是這樣 注解一<!--注解二 後面拖著一段沒有被標籤包起來的文字: 注解三-->
<!--注解一<!--注解二-->注解三-->
注解一<!--注解二
注解三-->
注解可以出現在文件的任何地方,甚至可以在文件類型宣告之前。 (在<!DOCTYPE HTML>之前。) HTML的解釋器會忽略注解,只要它們不在HTML標籤內。 這裡標籤內的意思並非指被一對開始標籤及結束標籤包住的區域內, 而是指在開始標籤內,或結束標籤、空元素標籤內。
<!DOCTYPE HTML>
然而並非所有瀏覽器、HTML編輯器都與HTML語法完全相容,在某些特殊情況會造成意料之外的結果。 約有5%的瀏覽器、HTML編輯器在處理注解標籤上有缺陷。(其中大部份是IE6 ) 儘管只有少數版本有此問題。
一些有關注解的相容性問題:
style
script
<style> ... {comment tags} ...</style>