html 显示代码块,使用Pre在文章中显示代码块 - 文章教程

作为技术博客,难免会在文章中插入一部分代码块,代码具有一定的格式,所以很自然就会使用

 标签,其在使用上与 
等其他标签没有太大区别,但由于其会保留标签中所有的空白与换行,因此在使用时还是有几个地方是需要注意的。

6bfcdf3de90c86e1308823c2008453f1.png

Pre标签

 标签通常用于展示预格式化的文本,默认使用等宽字体,并且保留所有的空白和换行,效果如下所示:

清明

朝代:唐代

作者:杜牧

清明时节雨纷纷,路上行人欲断魂。

借问酒家何处有,牧童遥指杏花村。

通过查看样式可以发现,Chrome 中

 的默认样式为:

pre {

display: block;

font-family: monospace;

white-space: pre;

}

Monospace 也称为 fixed-width font(等宽字体,例如 Courier 和 Monaco),即每个字符所占据的水平空间是一样的,很适合用于展示代码片段。white-space 属性则声明了如何处理元素内的空白,值

 会保留元素内的空白(一般 HTML 中的连续空白会当成一个空格来处理),通过上述 pre 标签的展示,能很清楚的看出 pre 展示内容的特点。当然 
 标签的字体等都是可以自己通过 CSS 来覆盖的。

使用Pre标签

pre 在使用时与 div 等元素没有太大区别,一般 pre 的场景是展示代码,这种情况下,需要对文本代码中的 等字符实体进行转义,如下图所示。

1be97583e8a03859cae591f487ef921d.png

如果没有进行转义,否则会被解析成 HTML 元素(pre 内的 标签主要是起一个语义化的作用):

9a3bbdf382cb8d2e6d13b1b1059650d1.png

前面说到,pre 标签特有的性质是保留了所有的空白和换行,因此在使用时要特别注意如下几点。

文本溢出

默认情况下,pre 中的文本的展示如同其在源代码中的样子,因此第一个问题便是,如果文本的长度超过了 pre 的宽度,展示时不会自动换行而是会溢出,如下图所示:

6bb6abbcb4531132d72580c274b3efbc.png

若要自动换行,则需要加上 white-space 属性,即 white-space: pre-wrap;。white-space 属性设置了如何处理元素内的空白,pre-wrap 表示保留空白符序列,但是正常地进行换行,效果如下图所示:

b9b9d966a73a43f39eb2a2433af4822b.png

字符空白

为什么需要这么一个 white-space 属性?

为什么在网页中显示多个空格通常要转义成多个  ?

实际上,网页的显示是对空白、换行做了特殊处理的,即对空白、换行进行了合并,因此在我们平常书写带缩进的代码时,感受不到这点。但是,假如我们对 body 元素设置 white-space: pre (保留空白),那网页的样式将难以控制,如下图所示:

39be4f662d4fd4bb7017d12e26c9a8bc.png

在 pre 中,由于保留了所有的空白,因此要额外注意前后的空白和换行。例如我们输出的某个格式化的源代码和其在网页中的效果如下图所示:

47027d8cc397175c8a46698a3f29fc7a.png

这样子达不到我们所预期的效果,因此在输出 HTML 时,要特别注意额外的空白与换行,正确的姿势如下,也就是说不要有额外的空白与换行:

ca179b9e2a6671db3120bdbc31fe808c.png

当然,如果想要让 pre 的表现与 div 相似,则可以使用 white-space: pre-line;,表示合并空白符序列,也就是源代码中的多个空格,在展示时只作为一个空格,但是保留换行符。

Pre里面不能有块元素

还有一点需要注意的是,不要将可以导致段落断开的标签,例如

标签放在
 所定义的块里,否则会产生多余的换行,如下图所示:

8b647c3202c9437d7bdf2df0d898016c.png

不过万一真遇到了这种过不去的坎,可以给 p 加上 display: inline;,就能去掉多余的换行:

ecd935d8cca937d5e49fb60eba5e72e1.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值