文章结构良好有着十分重要的意义,它不但让大纲清晰,易于阅读,而且也可以让样式共享成为可能。共享样式意义重大,它使得文章的样式可以由专业的人员来设计,制作精美,读者也可以用自己喜欢的样式来阅读,而作者们就只专注于内容本身、内容的结构及其内在的逻辑。
依通常的情形和需求,这里提供最多5个层级的支持,分别命名为:章、节、区、段、末。它们逐层嵌套,每一层都由一个 <section>
封装,为便于识别和定位,<section>
元素上分别定义 role
属性值为:s1 ~ s5
。
合理并规范化的层次结构,实际上还让文章的数据内容更精炼、源码更干净,分享和引用的链接可以粒度更细。
层次
标题规划
逐层嵌套的 <section>
封装会隔离出标题的层次逻辑,但标题自身的层级依然是可以被规划和利用的,这能带来一些好处:内容的层次逻辑更清晰,CSS定位也更简单。
- h1: 仅用于文章的主标题,通常也就是页面的主标题。
- h2: 各区段(
<section>
)的标题,作为首个子元素存在。 - h3: 文章的副标题,和主标题一起存在于一个
<hgroup>
之内(如果需要副标题的话)。 - h4: 各行块单元的小标题,如:引用块(
<blockquote>/<h4>, <p>...
)、导言(<header>/<h4>, <p>...
)等。 - h5: 级联表里的子表标题,结构:
<li>/<h5>, <ol>
。 - h6: 列表项内容里的微标题。如:
<li>/<h6>...
,其中<h6>
是后续文本的标题。
注意:这里 <h6>
的用途并不标准,但有时它可以很轻量地表达 <dt>,<dd>
逻辑。例:
<li>
<h6>HTML</h6>
Structure of content on the web
</li>
这里 <li>
作为一个简单的容器方便CSS表达,而如果用 <dl>/<dt>,<dd>
结构则会显得比较笨重。并且 <h6>
如果作为常规的标题分级,在大多数正文中都很难见到(使用率非常低)。
层次示意
<h1></h1> <!-- 页/主标题 -->
<header role="abstract"></header> <!-- 提要 -->
<nav role="toc"></nav> <!-- 目录 -->
<article> <!-- 文章区 -->
<header></header> <!-- 导言 -->
<section role="s1"> <!-- 章。第一层 section -->
<h2></h2> <!-- 章标题 -->
<header></header> <!-- 章导言 -->
<section role="s2"> <!-- 节。第二层 section -->
<h2></h2> <!-- 节标题 -->
<header></header> <!-- 节导言 -->
<section role="s3"> <!-- 区。第三层 section -->
<h2></h2> <!-- 区标题 -->
<header></header> <!-- 区导言 -->
<section role="s4"> <!-- 段。第四层 section -->
<h2></h2> <!-- 段标题 -->
<header></header> <!-- 段导言 -->
<section role="s5"> <!-- 末。第五层 section -->
<h2></h2> <!-- 末标题 -->
<header></header> <!-- 末导言 -->
{content} ... <!-- 正文内容(各种行块内容件,如:<p>, <ol>) -->
<footer></footer> <!-- 末小结 -->
</section>
... <!-- 平级 section:s5 -->
<footer></footer> <!-- 段小结 -->
</section>
... <!-- 平级 section:s4 -->
<footer></footer> <!-- 区小结 -->
</section>
... <!-- 平级 section:s3 -->
<footer></footer> <!-- 节小结 -->
</section>
... <!-- 平级 section:s2 -->
<footer></footer> <!-- 章小结 -->
</section>
<hr /> <!-- 章分隔 -->
... <!-- 平级 section:s1 -->
<footer></footer> <!-- 结语 -->
</article>
<nav role="reference"></nav> <!-- 文献参考 -->
<aside role="seealso"></aside> <!-- 另参见 -->
<footer></footer> <!-- 声明 -->
正文内容可存在于任何一级片区(<section>
)内,只要该片区内没有子片区逻辑即可。
组成
内容块
独立的行块内容单元,占据单独的一行(display:block
)。如 <hgroup>
、<ol>
、<p>
,前两者为拥有固定结构的单元,后者可以直接包含文本内容或内联元素(display:inline|inline-block
)。
结构类
内部不能直接包含文本或内联元素,有固定的子级结构。
<hgroup></hgroup> <!-- 主/副标题组:HGROUP /h1, h3 -->
<header role=
"abstract"></header> <!-- 提要:ABSTRACT /h4, p... --><nav role=
"toc"></nav> <!-- 目录:TOC /h4, ol:cascade/li/a(可多级) --><nav role=
"reference"></nav> <!-- 文献参考:REFERENCE /h4, ol --><aside role=
"seealso"></aside> <!-- 另参见:SEEALSO /h4, ul --><header></header> <!-- 导言:HEADER /h4, p... -->
<footer></footer> <!-- 结语/小结/页脚:FOOTER /h4, p... -->
<article></article> <!-- 文章区:ARTICLE /header, s1, footer, hr -->
<section role=
"s1"></section> <!-- 章:S1 /h2, header, s2, footer --><section role=
"s2"></section> <!-- 节:S2 /h2, header, s3, footer --><section role=
"s3"></section> <!-- 区:S3 /h2, header, s4, footer --><section role=
"s4"></section> <!-- 段:S4 /h2, header, s5, footer --><section role=
"s5"></section> <!-- 末:S5 /h2, header, [content], footer --><section></section> <!-- 深片区:SECTION /h2, header, [content], footer -->
<ul></ul> <!-- 无序列表:UL /li... -->
<ol></ol> <!-- 有序列表:OL /li... -->
<ol role=
"codelist"></ol> <!-- 代码表:CODELIST /li/code/b, i, #text --><ul role=
"ulx"></ul> <!-- 无序级联表:ULX /li/h5, ol|ul/... --><ol role=
"olx"></ol> <!-- 有序级联表:OLX /li/h5, ul|ol/... --><ol role=
"cascade"></ol> <!-- 级联编号表:CASCADE /li/h5, ol/... --><dl></dl> <!-- 描述列表:DL /dt, dd... -->
<table></table> <!-- 表格:TABLE /caption, thead, tbody, tfoot/tr/td... -->
<figure></figure> <!-- 插图:FIGURE /figcaption, p, ol, ul, img... -->
<blockquote></blockquote> <!-- 引用块:BLOCKQUOTE /h4, p... -->
<aside></aside> <!-- 批注块:ASIDE /h4, p... -->
<details></details> <!-- 详细内容:DETAILS /sumary, p... -->
<pre role=
"codeblock"></pre> <!-- 代码块:CODEBLOCK /code... --><fieldset></fieldset> <!-- 控件分组:FIELDSET /legend, ... -->
文本类
可直接包含文本内容和内联单元,没有固定的DOM结构可单独占据一行的块级元素。
<p></p> <!-- 段落:P 通用内容容器 -->
<address></address> <!-- 地址信息:ADDRESS -->
<pre></pre> <!-- 预排版:PRE 非代码块 -->
<aside role=
"note"></aside> <!-- 注解:NOTE -->
单体类
不包含任何内容,是一个独立存在的单元。
<hr /> <!-- 分隔:HR -->
<div role=
"blank"></div> <!-- 白板:BLANK 用于交互展示 -->
内容件
可直接作为文章正文内容的内容块(不含<section>
)被称为 内容件,上面的文本类内容块和除了顶层 提要、目录 等少数几个单元的结构类内容块都可以作为正文内容,它们都是内容件。如后面 附录 中的 插图、描述列表 等。
内容行和内容元素
可直接包含文本和内联元素的行级元素,上面的文本类内容件就是 内容行。但内容行还包括不能单独作为内容的行元素,如 <li>
、<caption>
、<dt>
、<dd>
等。
内容元素 是所有可以直接包含文本和其它内联元素的元素。上面的内容行是内容元素,但还有其它非行级的元素也可以直接包含文本,如 <td>
、<strong>
、<small>
等,前者是表格的内容单元,而后两者则是内联元素。
内联单元
只能被包含在内容元素里的元素,没有行块的逻辑,有时也称为行内元素。其中既有可以包含文本的内容元素,也有结构性元素,如文本类的注音(<ruby>/#text,<rp>,<rt>
)、媒体类的图片(<picture>
)、音频(<audio>
)等。
内联单元不是 内容件,它们不能作为片区(<section>
)的直接子元素出现,而必须被行块级的内容行元素(如 <p>
、<li>
、<address>
等)封装才行。
原生内联单元
HTML 标准原生支持的包含内容语义的内联元素。
名称 | 标签 | 类型/结构 | No. |
---|---|---|---|
音频 | <audio></audio> |
AUDIO /track,source, #text |
1 |
视频 | <video></video> |
VIDEO /track,source, #text |
2 |
最佳图 | <picture></picture> |
PICTURE /source,img |
3 |
链接 | <a></a> |
A |
4 |
重点 | <strong></strong> |
STRONG |
5 |
强调 | <em></em> |
EM |
6 |
短引用 | <q></q> |
Q |
7 |
缩写 | <abbr></abbr> |
ABBR |
8 |
来源 | <cite></cite> |
CITE |
9 |
注脚 | <small></small> |
SMALL |
10 |
时间 | <time></time> |
TIME |
11 |
删除 | <del></del> |
DEL |
12 |
插入 | <ins></ins> |
INS |
13 |
下标 | <sub></sub> |
SUB |
14 |
上标 | <sup></sup> |
SUP |
15 |
标记 | <mark></mark> |
MARK |
16 |
代码 | <code data-lang= |
CODE,可定义语言 |
17 |
注音 | <ruby></ruby> |
RUBY /rp,rt |
18 |
定义 | <dfn></dfn> |
DFN |
19 |
样本 | <samp></samp> |
SAMP |
20 |
键盘字 | <kbd></kbd> |
KBD |
21 |
失效 | <s></s> |
S,也用于代码字符串 |
22 |
标注 | <u></u> |
U |
23 |
变量 | <var></var> |
VAR |
24 |
有向文本 | <bdo></bdo> |
BDO |
25 |
方向隔离 | <bdi></bdi> |
BDI |
26 |
度量 | <meter></meter> |
METER |
27 |
图片 | <img /> |
IMG |
28 |
图形 | <svg></svg> |
SVG /... |
29 |
换行 | <br /> |
BR |
30 |
软换行 | <wbr /> |
WBR |
31 |
特用 | <b> |
B,代码着色、其它 |
32 |
特用 | <i> |
I,代码注释、其它 |
33 |
文本节点 | #text |
$text |
34 |
定制单元
标准的HTML内联单元虽然品类丰富,但依然稍有欠缺。这里定制了几个可能会常用的新单元类型。
名称 | 标签 | 类型/结构 | No. |
---|---|---|---|
表情 | <code role= |
ORZ |
35 |
讲解图 | <span role= |
GRAPH /i:explain, img|svg |
36 |
碎片 | <span role= |
CRUMB |
37 |
空白 | <span role= |
SPACE |
38 |
内联控件
最后一种内联单元是表单控件,它们不是用来表达实体内容的文字或音/视频数据流,而是HTML里特有的。
在普通的文章页面里,表单控件几乎没有意义,因为它们是用来向服务器提供数据的交互元素。但有时,一篇文章里或许需要可视化地表述这些功能性元素,或者作为文档交互的目标,因此也被纳入为可插入。
名称 | 标签 | 类型/结构 | No. |
---|---|---|---|
标签 | <label></label> |
LABEL |
39 |
按钮 | <button></button> |
BUTTON |
40 |
录入件 | <input /> |
INPUT |
41 |
文本框 | <textarea></textarea> |
TEXTAREA |
42 |
选单 | <select></select> |
SELECT /option |
43 |
输出件 | <output></output> |
OUTPUT |
44 |
进度条 | <progress></progress> |
PROGRESS |
45 |
单元结构
定制结构
提要
<header role="abstract">
<h4>提要<h4>
<p></p> ...
</header>
目录
<nav role="toc">
<h4></h4>
<ol role="cascade">
<li><h5><a href="#..."><!-- [#text] --></a></h5></li>
</ol>
</nav>
章节
系统提供 5 个默认层级的片区,它们由 role
特性标注,被称为 章节 片区(与普通的 <section>
相区别)。
<section role="s1"> <!-- s1 ~ s5 -->
<h2></h2> <!-- 标题 -->
<header></header> <!-- 导言:可选 -->
{content} ... <!-- 内容件 -->
<footer></footer> <!-- 结语:可选 -->
</section>
文献参考
用有序列表来表达,体现引用出现在原文中的先后位置。
<nav role="reference">
<h4>文献参考</h4>
<ol>
<li></li>...
</ol>
</nav>
另参见
构造为一个无序列表,体现出不区分先后或主次顺序的并列关系。
<aside role="seealso">
<h4>另参见</h4>
<ul>
<li></li>...
</ul>
</aside>
无序级联表
以无序列表 <ul>
为根容器,内含多级子列表(可为任意 <ol>
或 <ul>
)。
<ul role="ulx">
<li></li>
<li>
<h5></h5> <!-- 级联小标题 -->
<ol> <!-- 也可为<ul> -->
<li></li>
</ol>
</li>
</ul>
有序级联表
以有序列表 <ol>
为根容器,内含多级子列表(可为任意 <ul>
或 <ol>
)。
<ol role="olx">
<li></li>
<li>
<h5></h5> <!-- 级联小标题 -->
<ul> <!-- 也可为<ol> -->
<li></li>
</ul>
</li>
</ol>
级联编号表
仅由有序列(<ol>
)表构成,除了最终的层级,列表项(<li>
)中仅有两个子元素:小标题(<h5>
)和子列表(<ol>
)。
<ol role="cascade">
<li></li>
<li> <!-- 由CSS表达序号逻辑 -->
<h5></h5>
<ol>
<li></li>
</ol>
</li>
</ol>
代码表
包含data-lang
特性用于指定代码的语言,可以有两级定义:
- 根级。书写在
<ol>
元素上,对应整个代码表的默认值。 - 行级。书写在
<code>
元素上,对应当前行代码的语言,可选。
元素的 start
属性在引用代码片段时很有用。例:源码(代码表)。
<ol role="codelist" data-lang="xx" start="n">
<li><code> <!-- 根封装 -->
...<b>... <i>... <!-- 代码内容,<b>着色封装,<i>注释封装 -->
</code></li>
<li><code data-lang="xx"> <!-- 嵌入语言覆盖 -->
...
</code></li>
</ol>
代码块
与代码表一样,包含data-lang
特性指定代码所属语言。注意语言是设置在<code>
元素而不是<pre>
容器上。
<pre role="codeblock"> <!-- 容许简单换行 -->
<code data-lang="xx"> ...<b>... <i>...
<!-- 制表符会被转换为空格 -->
</code>
<!-- 可含多个<code>块,注意<code>无缩进 -->
<code>...
</code></pre> <!-- 末尾紧随<code>之后 -->
注解
用于对正文中的某段文本进行额外的注解,或在某段落之后进行简单的附加说明(比批注块简洁)。在UI上可能构造为一种弹出展示。
<aside role="note">
<!-- 文本或内联单元 -->
</aside>
白板
这是一种特别的内容单元,主要用于交互展示。
<div role="blank">
<!-- 动态表达区 -->
</div>
原生结构
标题
文章应当有一个标题,在本设计中称之为 主标题。在某些情况下,文章还会有 副标题。
如果文章存在副标题,标题的部分应当存放在一个 <hgroup>
容器中。主标题应当只有一个,而副标题可以有多个。
<h1>单独一个主标题时</h1>
<hgroup> <!-- 组标题 -->
<h1>主标题</h1>
<h3>副标题。可能是一段简述,或一列纲目(多个副标题)</h3>
...
<h3>副标题(纲目n)</h3>
</hgroup>
文章
这是文章内容的主容器,除了文章的主标题(页面标题 <h1>
)、提要、目录等少数几个结构外,其它所有内容块都被包含在里面。
<article>
<header></header> <!-- 导言:可选 -->
{content} ... <!-- 主体内容 -->
<footer></footer> <!-- 结语:可选 -->
</article>
导言
在一个章节内的最前端(但在章节标题之后)。导言之后通常是正文内容(内容件)或一个子章节。
在文章的顶层(<article>
)也可以有一个导言,它作为 <article>
内的首个子元素存在(文章的标题被提取出来放到了 <article>
的外面——整个内容的最前端)。
<header>
<h4></h4> <!-- 可选 -->
<p></p> ...
</header>
结语
在章节片区内的末尾,通常称为 小结。在文章根元素(<article>
)内也可以包含,通常是一个总结(或 结语)。如果出现在文章根容器之上的顶层,可能会是一个 声明。
<footer>
<h4></h4> <!-- 可选 -->
<p></p> ...
</footer>
片区
如果系统默认的5层次章节(s1 ~ s5
)不足以表达文章的层次结构,则在 s5
之下可以嵌入任意层数的普通片区。它们由未标注 role
特性的普通 <section>
元素表达,结构与 s5
相同。
<section>
<h2></h2> <!-- 标题 -->
<header></header> <!-- 导言:可选 -->
{content} ... <!-- 内容件 -->
<footer></footer> <!-- 结语:可选 -->
</section>
无序列表
<ul>
<li></li> ...
</ul>
有序列表
<ol>
<li></li> ...
</ol>
描述列表
<dl>
<dt></dt>
<dd></dd> ...
</dl>
表格
表格的 border
特性描述了边框的大小,它的值应当是一个数字。但这里对它进行了扩展。
<table border="1"> <!-- border="0|1|i|r|h|v" -->
<caption></caption>
<thead> <!-- 可选 -->
<tr><td></td></tr>
</thead>
<tbody>
<tr><td></td></tr>
</tbody>
<tfoot> <!-- 可选 -->
<tr><td></td></tr>
</tfoot>
</table>
border 的 6 个值的含义:
0
数字,依然表示表格没有边框。1
数字,依然表示边框为 1 个像素。i
字母,表示表格仅拥有内部(inside)边框,四边无框。r
字母,表示表格仅拥有外围(round)边框。h
字母,表示表格拥有横行(horizontal)的边框。v
字母,表示表格拥有竖向(vertical)的边框。
插图
作为独立于内容主体流的一块数据,它可以包含的内容类型较多,仅次于片区单元且可直接包含图片类型。但通常,它主要用于插入一块图表及其说明(如文章中的一副插画)。
<figure>
<figcaption></figcaption>
<span role="graph">
<i role="explain">[图片讲解,可选]</i>
<img />
</span>
... <!-- p, ol, ul, img, svg, blockquote, table, pre, codeblock, codelist -->
</figure>
引用块
<blockquote>
<h4></h4> <!-- 可选 -->
<p></p> ...
</blockquote>
批注块
<aside>
<h4></h4> <!-- 可选 -->
<p></p> ...
</aside>
详细内容
<details>
<summary></summary>
<p></p> ...
</details>
段落
最简单的内容行元素,也是大多数小区块里内容的默认封装单元。
<p>
<!-- 文本或内联单元 -->
</p>
地址信息
内容的源码性质与段落类似,但表达了内容的逻辑含义。
<address>
<!-- 文本或内联单元 -->
</address>
预排版
与包含特定语言标注的代码表/代码块不同,这是一种需要保留原始版式的通用结构。
<pre>
<!--文本或内联单元
首个换行会被浏览器友好清理,末尾换行会被原样保留。 -->
</pre>
分隔
分隔作为行块对待,样式由外部CSS定义。
<hr />
<hr role="dotted" /> <!-- 虚线 -->
<hr role="solid" /> <!-- 实线 -->
<hr role="double" /> <!-- 双划线 -->
<hr role="dashed" /> <!-- 点划线 -->
<hr role="groove" /> <!-- 内槽线 -->
<hr role="ridge" /> <!-- 外槽线 -->
<hr role="inset" /> <!-- 内嵌线 -->
<hr role="outset" /> <!-- 外嵌线 -->
注音
<ruby>
漢<rp>(</rp><rt>ㄏㄢˋ</rt><rp>)</rp>
</ruby>
控件分组
在文章中插入表单控件有时是必要的,比如对于HTML元素的形象描述,或者在页面文章中实现交互(互动文档)。
<fieldset>
<legend>分组标题</legend>
... <!-- 其它控件 -->
</fieldset>
代码着色
封装规则
代码内的各种单元采用 <b>
元素封装,由 role
定义单元类型,但注释和字符串类型分别采用 <i>
和 <s>
封装。
通常,各种单元类型(<b>
)与注释(<i>
)和字符串(<s>
)都处于同一层级(<code>
的直接子元素),但注释和字符串内也可能包含进一步的标识,它们依然由 <b>
封装。
另外,代码内也允许插入审校类元素(<ins>
、<del>
和 <u>
),这可方便教学类代码的书写。注:<u>
可用于标记书写错误或不应当被执行的代码。
基本名称(标识)定义如下:
类型 | 标识 | 选择器 | 说明 |
---|---|---|---|
关键字 | kw |
b[role=kw] |
keyword |
字面值 | lit |
b[role=lit] |
literal (true, iota, ...) |
数值 | num |
b[role=num] |
number |
函数名 | fn |
b[role=fn] |
function-name |
运算符 | op |
b[role=op] |
operator |
内置 | bin |
b[role=bin] |
built_in |
数据类型 | dt |
b[role=dt] |
data-type |
标签名 | tag |
b[role=tag] |
tag-name |
属性名 | atn |
b[role=atn] |
attribute-name |
正则表达式 | re |
b[role=re] |
regex(/....../gi) |
选择器 | slr |
b[role=slr] |
selector (#id, .class, :pseudo) |
颜色值 | rgb |
b[role=rgb] |
#fff, #f0f0f0, #f0f0f080 |
单位 | un |
b[role=un] |
css-unit (px, em, pt, ...) |
重要 | imp |
b[role=imp] |
important |
错误提示 | err |
b[role=err] |
error: ... |
未定义 | non |
b[role=non] |
no-name |
示例
源码(代码块)
<pre role="codeblock">
<code data-lang="go"><i>// prints its command-line arguments.</i>
<b role="kw">package</b> main
<b role="kw">import</b> (
<s>"fmt"</s>
<s>"os"</s>
)
<b role="kw">func</b> main() {
<b role="kw">var</b> s, sep <b role="dt">string</b>
<b role="kw">for</b> i <b role="op">:=</b> 1; i <b role="op"><</b> <b role="fn">len</b>(os.Args); i<b role="op">++</b> {
s <b role="op">+=</b> sep <b role="op">+</b> os.Args[i]
sep <b role="op">=</b> <s>" "</s>
}
fmt.Println(s)
}</code></pre>
效果
// prints its command-line arguments.
package main
import (
"fmt"
"os"
)
func main() {
var s, sep string
for i := 1; i < len(os.Args); i++ {
s += sep + os.Args[i]
sep = " "
}
fmt.Println(s)
}
源码(代码表)
<ol role="codelist" data-lang="go" start="3">
<li><code><b role="kw">import</b> <s>"fmt"</s></code></li>
<li><code><b role="kw">func</b> main() {</code></li>
<li><code> fmt.Println(<s>"Hello, 世界"</s>) <i>// 这是一条长行,测试折行的效果。如果编号列的背景色与代码部分不一样的话,CSS可能不宜设计为水平滚动。代码是否为折行,可以通过编号看出来。</i></code></li>
<li><code>}</code></li>
<li><code><b role="kw">type</b> MapSort <b role="kw">struct</b> {</code></li>
<li><code> m <b role="kw">map</b>[<b role="dt">string</b>]<b role="dt">int</b></code></li>
<li><code> s []<b role="dt">string</b></code></li>
<li><code>}</code></li>
</ol>
效果
import
"fmt"func main() {
fmt.Println(
"Hello, 世界") // 这是一条长行,测试折行的效果。如果编号列的背景色与代码部分不一样的话,CSS可能不宜设计为水平滚动。代码是否为折行,可以通过编号看出来。}
type MapSort struct {
m map[string]int
s []string
}
附录
插图
主要结构:figure/figcaption, span:graph/i:explain, img
,包含标题、作为正文的讲解图或者其它行块文本单元(如:<p
>, <ul>
, <blockquote>
等)。
讲解图中的文字讲解默认绝对定位(position:absolute
),这使得讲解覆盖在图片之上。当然你可以在特性编辑中删除这种效果,但如果你是想在图片旁边进行配文,可以简单地使用图片和段落(或其它行块)来实现。
实例

描述列表
结构:dl/dt, dd
。主要用于描述专业的术语,由术语标题项(<dt>
)和描述内容的数据项(<dd>
)构成。
标题项和数据项并列为兄弟元素的关系。一条标题项可以跟随多条数据项,或者多条标题项由一条数据项进行说明。
实例
- Firefox
- Mozilla Firefox, or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.
- Chrome
- Google Chrome is a cross-platform web browser developed by Google. It was first released in 2008 for Microsoft Windows, built with free software components from Apple WebKit and Mozilla Firefox.
- IE
- Internet Explorer is a discontinued series of graphical web browsers developed by Microsoft and included in the Microsoft Windows line of operating systems, starting in 1995.
- Opera
- Opera is a multi-platform web browser developed by its namesake company Opera. Opera is a Chromium-based browser. It distinguishes itself from other browsers through its user interface and other features.
- Edge
- Microsoft Edge is a cross-platform web browser created and developed by Microsoft. It was first released for Windows 10 and Xbox One in 2015.
- Safari
- Safari is a graphical web browser developed by Apple. It is primarily based on open-source software, and mainly WebKit.