Hexo高亮

hexo已实现代码高亮,代码封装在hexo-util插件中,使用的是hightlight.js,通过include_codetag标签来使用,功能已经很强大了,而且自带行号显示,可以满足大多数博主的需求了。但是它仍然存在一些局限性,比如在Nova主题中,有些语言不支持,无法高亮,而且界面也比较丑,所以个人还是倾向于自由使用hightlight.js来高亮代码,使用起来比较灵活,还能扩展一些功能,但是hightlight.js默认是不带行号的。为此,也是遇到了不少坑。后来在某歪果仁的博客中找到一个行号解决方案,在其基础上,终于实现了一个较为理想的代码高亮方案。

加载highlight.js

使用[highlight.js]非常简单,只需以下简单的几步。
首先,在博客站点根目录的_config.yml中,将highlight.enable设置为flase以关闭自带的高亮方案。

其次,引入highlight.js的css及js(如果使用较多,推荐在主题模板中作为全局js引入)。

<link rel="stylesheet" href="//cdn.bootcss.com/highlight.js/9.2.0/styles/github.min.css">
<script src="//cdn.bootcss.com/highlight.js/9.2.0/highlight.min.js"></script>

[highlight.js]有许多代码风格,博主可以根据博客站点主题风格,选择合适的代码风格,我使用的是github风格。

然后,在文档加载完毕之后初始化

  // highlighthljs.initHighlightingOnLoad();

如此,便可以测试及查看代码高亮结果了。

添加行号

添加行号的大致过程是先将代码部分按行切割,动态生成行号。然后使用相对布局,将行号显示在代码行前。具体代码如下:

  $('pre code').each(function(i, block) {//hljs.highlightBlock(block);var lines = $(this).text().split('\n').length - 1;var $numbering = $('<ul/>').addClass('pre-numbering');$(this).addClass('has-numbering').parent().append($numbering);for(i=1;i<=lines;i++){$numbering.append($('<li/>').text(i));}});

这样<code>标签多了一个has-numbering的样式,在<pre>结节下,动态添加了一个class为pre-numberingul列表来显示行号。CSS代码如下:

code.has-numbering {margin-left: 10px;word-wrap: normal;word-break: keep-all;white-space: pre;
}.pre-numbering {position: absolute;top: 0;left: 0;width: 20px;height: 100%;padding: .5em 0.2em .5em 0;border-right: 1px solid #C3CCD0;border-radius: 3px 0 0 3px;background-color: #EEE;text-align: right;font-size: 1.0em;color: #AAA;list-style: none;
}

注,具体的样式需根据当前主题做出适当的修改

处理滚动

添加了行号,为使行号与代码行不错乱,所以要求代码块在横向允许滚动,在处理滚动前,先了解以下三个文本换行的css属性。

  • white-space
描述
normal 默认。空白会被浏览器忽略。
pre 空白会被浏览器保留。其行为方式类似 HTML 中的 pre 标签。
nowrap 文本不会换行,文本会在在同一行上继续,直到遇到 <br> 标签为止。
pre-wrap 保留空白符序列,但是正常地进行换行。
pre-line 合并空白符序列,但是保留换行符。
inherit 规定应该从父元素继承 white-space 属性的值。

- word-wrap

描述
normal 只在允许的断字点换行(浏览器保持默认处理)。
break-word 在长单词或 URL 地址内部进行换行。

- word-break

描述
normal 使用浏览器默认的换行规则。
break-all 允许在单词内换行。
keep-all 只能在半角空格或连字符处换行。

除了以上三个属性,还有一个text-wrap属性,不过,大部分浏览器都不支持。所以,仅供参考。
text-wrap

描述
normal 只在允许的换行点进行换行。
none 不换行。元素无法容纳的文本会溢出。
unrestricted 在任意两个字符间换行。
suppress 压缩元素中的换行。浏览器只在行中没有其他有效换行点时进行换行。

所以,显示行号的<code>标签,还需加上以下css规则。

overflow-x: auto;
overflow-y: auto;
word-break: keep-all;
white-space: pre;

支持响应式

由于在小屏幕上,尤其是手机浏览器,横向滚动并不好操作,所以,须优化,让代码允许断行,这样,行号就不能显示了。

@media (max-width: 767px) {.pre-numbering {display: none;}.has-numbering {margin-left: -10px !important;word-wrap: break-world !important;white-space: pre-wrap !important;}
}

ieclipse.cn原文:http://www.ieclipse.cn/2016/07/18/Web/Hexo-dev-highlight/

Hexo高级教程之代码高亮相关推荐

  1. Hexo高级教程之主题开发

    引言 有感于hexo高级教程实在太少,当初本人在开发Nova主题时,曾遇到过不少坑,为填这些坑,较为深入地学习了hexo源码,又自学了不少node.js知识,才总算将这些坑基本填完.本着人人为我,我为 ...

  2. hexo html代码高亮,使用 prismjs 自定义 Hexo 代码高亮

    一直就想优化一下 Hexo 的代码高亮部分来着,对 ts.tsx 部分的支持一直不太好:也许直接更新 Next 就能直接解决,但博客部分已经魔改了不少,本着这个原则就继续魔改下去好了.本站是在 Nex ...

  3. 《Hexo: 从零开始编写自己的主题》4. fancybox优化图片展示效果、代码高亮以及数学公式

    <Hexo: 从零开始编写自己的主题> 1. Hexo概述以及Hexo工作原理 2. 入门Hexo主题编写 3. 优化样式,设计自己的主题 4. fancybox优化图片展示效果.代码高亮 ...

  4. html文本框代码高亮,CodeMirror 编辑器文本框 TextArea 代码高亮插件 - 文章教程

    CodeMirror 是一个用于编辑器文本框 TextArea 代码高亮 JavaScript 插件,为各种编程语言实现关键字.函数.变量等代码高亮显示,丰富的 API 和可扩展功能以及多个主题样式, ...

  5. hexo教程系列——hexo配置教程

    博客新址: http://blog.xuezhisd.top 邮箱:xuezhisd@126.com 本文对hexo的配置文件进行了说明. 网站的配置文件 网站配置文件的存储位置:hexo_blog/ ...

  6. Python高级教程:玩转Linux操作系统

    Python高级教程:玩转Linux操作系统 操作系统发展史 只有硬件没有软件的计算机系统被称之为"裸机",我们很难用"裸机"来完成计算机日常的工作(如存储和运 ...

  7. onenote使用python开发_OneNote 代码高亮方法总结

    前言 微软的 OneNote 是一个很强大的笔记工具,但是其本身并不支持代码高亮,这让我们在记录代码时很不方便.还好我们可以通过 OneNote 插件和一些方法实现代码高亮. 本篇就总结下 OneNo ...

  8. [转帖]tar高级教程:增量备份、定时备份、网络备份

    tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...

  9. DOS批处理高级教程:第三章 FOR命令中的变量(转)

    DOS批处理高级教程:第一章 批处理基础 DOS批处理高级教程:第二章 DOS循环for命令详解 DOS批处理高级教程:第三章 for命令中的变量 DOS批处理高级教程:第四章 批处理中的变量 DOS ...

  10. activiti高亮显示图片_第 09 篇:让博客支持 Markdown 语法和代码高亮

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到HelloGitHub-Team 仓库[1] 为了让博客文章具有良好的排版,显示更加丰富的格式,我们使用 Markdown 语法 ...

最新文章

  1. html外链式css运行不出来div,html+css外链式
  2. 深入理解移动开发的模板复用机制
  3. python -c带来的惊喜
  4. ARM GCC Inline Assembler Cookbook
  5. 解决Office 2016客户端如何同SharePoint Server2016安装在一起
  6. js基本数据类型和复杂数据类型的区别
  7. 快速部署Enterprise Manager Cloud Control 12c(12.1) Agent
  8. 曲线行驶最后什么时候回正_曲线行驶总压线?老教练给你支支招,看完觉得太简单了……...
  9. DataBinding 学习系列(3)新增的可见字段来编写对象(bean)
  10. 从 Web 图标演进历史看最佳实践
  11. 苹果高通“情变”祸及所有中国 iPhone 用户!
  12. C语言程序设计谭浩强(第四版)期末复习重点
  13. Gradle使用maven仓库
  14. ajax带token获得返回数据,jquery带token访问接口ajax
  15. python日期判断星座_Python学习笔记 - 根据出生日期判断你的星座
  16. 用泰勒级数展开证明欧拉公式
  17. 如何将div拼接成html代码,给div拼接html 拼接字符串
  18. 【C语言】简易版_飞机小游戏
  19. HTML用户名判断,用户名判断(练习)
  20. Android 开源项目分类汇总--1

热门文章

  1. Angr安装与使用之使用篇(十三)
  2. HotSpot虚拟机对象揭秘
  3. 51 nod 最长公共子序列问题(打印路径)
  4. Ajax02 什么是json、json语法、json的使用、利用jQuery实现ajax
  5. two day python基础知识
  6. 8.Python进阶_异常处理
  7. 【Andrioid】在Gradle编译时生成一个不同的版本号,动态设置应用程序标题,应用程序图标,更换常数...
  8. kvm初体验之八:调整vm的vcpu, memory, disk大小
  9. JavaScript语言精粹_笔记
  10. C#中的委托和事件(转)