文章内容的规范化结构

—— 简单干净的源码,清爽愉悦的阅读

【提 要】

文章内容由最多五个递进的层级(////)构成,每一个层级中可包含多个平行的片区(<section>)元素。

片区的标题在封装元素(<section>)之内最前端,由 <h2> 元素封装,不同层级的片区标题皆是如此。区分不同层级标题依靠的是封装元素(<section>)自身而不是标题元素,这与通常的 h1-h6 的隐含意义有些矛盾,但这种策略让章节递进更自由,同时 <h1><h3>-<h6> 也可用于其它的标题含义。

<h1> 用于页面的主标题,一篇文章中应当只有一个主标题。<h3> 用于页面的副标题,它与主标题一起位于一个标题组(<hgroup>)元素内,副标题可以有多个。<h4> 用于逻辑区块里的小标题,比如引用块(<blockquote>)里可选的小标题,或者批注块(<aside>)、导言(<header>)等里的小标题。<h5> 用于一些逻辑上更细碎的“标题”,比如目录或级联表中包含子表的条目(<li>/<h5>,<ol>)。

如果一个片区内没有子片区逻辑,它就应该只是一个内容片区,包含各种具体的文本块或段落。内容片区可在任意层级存在,只要它是最终的内容即可,并不会受限于////五个递进层次。

内容片区中的内容块有很多种,比如:引用块(<blockquote>)、详细内容(<details>)、表格(<table>)、插图(<figure>)、列表(<ol><ul>),级联表(<ol role="cascade">/<li>/<ol>),以及最常见的段落(<p>)等。

最后,内容块其实并不是最终的实体文本,最终的实体文本是纯文本或内联单元,如:重点(<strong>)、强调(<em>)、代码(<code>)、注音(<ruby>)、缩写(<abbr>)、标记(<mark>)、图片(<img>)、视频(<video>)等等。

注:一篇层级适当的文章通常只有3-4个层级,即:章/节/区/段。再多的层级并不常见,阅读友好性也会变差。

文章结构良好有着十分重要的意义,它不但让大纲清晰,易于阅读,而且也可以让样式共享成为可能。共享样式意义重大,它使得文章的样式可以由专业的人员来设计,制作精美,读者也可以用自己喜欢的样式来阅读,而作者们就只专注于内容本身、内容的结构及其内在的逻辑。

依通常的情形和需求,这里提供最多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)。

结构类

内部不能直接包含文本或内联元素,有固定的子级结构。

  1. <hgroup></hgroup> <!-- 主/副标题组:HGROUP /h1, h3 -->
  2. <header role="abstract"></header> <!-- 提要:ABSTRACT /h4, p... -->
  3. <nav role="toc"></nav> <!-- 目录:TOC /h4, ol:cascade/li/a(可多级) -->
  4. <nav role="reference"></nav> <!-- 文献参考:REFERENCE /h4, ol -->
  5. <aside role="seealso"></aside> <!-- 另参见:SEEALSO /h4, ul -->
  6. <header></header> <!-- 导言:HEADER /h4, p... -->
  7. <footer></footer> <!-- 结语/小结/页脚:FOOTER /h4, p... -->
  8. <article></article> <!-- 文章区:ARTICLE /header, s1, footer, hr -->
  9. <section role="s1"></section> <!-- 章:S1 /h2, header, s2, footer -->
  10. <section role="s2"></section> <!-- 节:S2 /h2, header, s3, footer -->
  11. <section role="s3"></section> <!-- 区:S3 /h2, header, s4, footer -->
  12. <section role="s4"></section> <!-- 段:S4 /h2, header, s5, footer -->
  13. <section role="s5"></section> <!-- 末:S5 /h2, header, [content], footer -->
  14. <section></section> <!-- 深片区:SECTION /h2, header, [content], footer -->
  15. <ul></ul> <!-- 无序列表:UL /li... -->
  16. <ol></ol> <!-- 有序列表:OL /li... -->
  17. <ol role="codelist"></ol> <!-- 代码表:CODELIST /li/code/b, i, #text -->
  18. <ul role="ulx"></ul> <!-- 无序级联表:ULX /li/h5, ol|ul/... -->
  19. <ol role="olx"></ol> <!-- 有序级联表:OLX /li/h5, ul|ol/... -->
  20. <ol role="cascade"></ol> <!-- 级联编号表:CASCADE /li/h5, ol/... -->
  21. <dl></dl> <!-- 描述列表:DL /dt, dd... -->
  22. <table></table> <!-- 表格:TABLE /caption, thead, tbody, tfoot/tr/td... -->
  23. <figure></figure> <!-- 插图:FIGURE /figcaption, p, ol, ul, img... -->
  24. <blockquote></blockquote> <!-- 引用块:BLOCKQUOTE /h4, p... -->
  25. <aside></aside> <!-- 批注块:ASIDE /h4, p... -->
  26. <details></details> <!-- 详细内容:DETAILS /sumary, p... -->
  27. <pre role="codeblock"></pre> <!-- 代码块:CODEBLOCK /code... -->
  28. <fieldset></fieldset> <!-- 控件分组:FIELDSET /legend, ... -->

文本类

可直接包含文本内容和内联单元,没有固定的DOM结构可单独占据一行的块级元素。

  1. <p></p> <!-- 段落:P 通用内容容器 -->
  2. <address></address> <!-- 地址信息:ADDRESS -->
  3. <pre></pre> <!-- 预排版:PRE 非代码块 -->
  4. <aside role="note"></aside> <!-- 注解:NOTE -->

单体类

不包含任何内容,是一个独立存在的单元。

  1. <hr /> <!-- 分隔:HR -->
  2. <div role="blank"></div> <!-- 白板:BLANK 用于交互展示 -->

内容件

可直接作为文章正文内容的内容块(不含<section>)被称为 内容件,上面的文本类内容块和除了顶层 提要目录 等少数几个单元的结构类内容块都可以作为正文内容,它们都是内容件。如后面 附录 中的 插图描述列表 等。

内容行和内容元素

可直接包含文本和内联元素的行级元素,上面的文本类内容件就是 内容行。但内容行还包括不能单独作为内容的行元素,如 <li><caption><dt><dd> 等。

内容元素 是所有可以直接包含文本和其它内联元素的元素。上面的内容行是内容元素,但还有其它非行级的元素也可以直接包含文本,如 <td><strong><small> 等,前者是表格的内容单元,而后两者则是内联元素。

内联单元

只能被包含在内容元素里的元素,没有行块的逻辑,有时也称为行内元素。其中既有可以包含文本的内容元素,也有结构性元素,如文本类的注音(zhùyīn)<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="go"></code> 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"></code> ORZ 35
讲解图 <span role="graph"></span> GRAPH /i:explain, img|svg 36
碎片 <span role="crumb"></span> CRUMB 37
空白 <span role="space"></span> 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特性用于指定代码的语言,可以有两级定义:

  1. 根级。书写在 <ol> 元素上,对应整个代码表的默认值。
  2. 行级。书写在 <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>

效果

  1. import "fmt"
  2. func main() {
  3. fmt.Println("Hello, 世界") // 这是一条长行,测试折行的效果。如果编号列的背景色与代码部分不一样的话,CSS可能不宜设计为水平滚动。代码是否为折行,可以通过编号看出来。
  4. }
  5. type MapSort struct {
  6. m map[string]int
  7. s []string
  8. }

附录

插图

主要结构: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.