动手写一个hexo主题(下)
这个太长了,一篇文章整理不完,另开一篇
Home主页面
tag随机颜色
这个效果主要是tag标签随机一种颜色,然后每次打开它都是这种颜色。那么怎么实现这种效果呢?
首先,我是想使用js获取随机颜色然后用js把颜色给加上。那么问题来了,颜色是随机了,但是每次打开颜色都不一样,这样体验感觉很不好。因此,我们要找一个关系来让他赋予相应的颜色。
首先我想的是根据首字母来划分一定区域,比如说选5种颜色,然后0-26均匀划分5段,但是,这样还有一个问题,英文字母自然没有问题,但是汉字呢,判断起来就很困难,网上也有一些插件,但是我觉得为了实现这么一个小功能就引入这么大的文件,感觉没有必要。
那么第二种就想到了根据长度,这个就简单很多了,代码如下:
1 | //================tag-icon颜色========================== |
post文章页面
由于hexo把markdown的相应部分都渲染成了一定的class,那么直接定义class的样式就能显示出相应的markdown效果,比如说代码块、引用之类的。
代码高亮问题
写这一部分真的心酸,我以为hexo的highlight功能开启了就能自己高亮了,实际上,凉凉。找了半天解决方法,也没找到,本来看到一篇博客引入了prettify高亮插件,但是想了想自己写一个拉到了。于是我本着自己动手的原则写了一套代码高亮的css(抄SegmentFault的代码颜色)。其实也没有想象中的艰难,hexo把一些关键字都取了类名,直接自己定一个颜色,字体大小什么的就ok了。
按照一般情况,代码高亮的原理是highlight.js
这个插件(还有别的插件),这个插件什么用呢,【源码没仔细看】,分了很多语言,里面应该是用正则判断相应的语句,比如说#
这个注释符号。获取到之后会赋予一定的class类名。
然后怎么高亮呢,很简单一个css文件就行了,相应的类名给予一定的css代码就可以了。
缩进问题
还有一个部分就是缩进问题了,众所周知,空格是不会显示的,所以代码缩进在页面上预览的时候是不会出现的。这时候就要用一个white-space: pre-wrap;
自动换行并且保留空格就行了。
图片过大问题
有时候用markdown插入图片的时候没有指定宽度,这样太大会把页面撑开,如何解决呢?
1 | img { |
解决方案很简单对吧。是的,但是不读别人的代码,我还真没有想到过。
Archives归档页面
ejs结构
这个页面参照了next主题的时间线效果,感觉这个效果很漂亮。这一部分实现起来有点小绕,为什么呢?
如果直接与后端交互直接获取想要的数据自然没有这些问题,但是这次使用的是hexo,提供了很多便利的同时也有很多限制,本来hexo在archives提供的有一个插入函数就是list_archives
这个函数,这个函数会直接插入按时间归档好的一推信息,那么我不仅想显示时间,还想显示文章,这样很明显就不能用这个函数,那么就只能foreach循环,并写一些逻辑来显示。
那么本着尽量少些js的想法(hexo+github不知道为什么有时候js文件在hexo d上传之后会莫名其妙删除),直接用ejs写
1 | <div class="archives-block"> |
这一段参考了yilia的作者的写法,这一部分如果只看标签的话,那么绝对是不会闭合的,因为这里面为了区分出不同年份一组的效果,使用了if判断一定条件,当满足时会将标签闭合,这样就能让不同年份的一组不在同一个标签组内。
前面的小圆点
这一个效果使用before插入
1 |
|
Tag标签归档页面
这一部分没什么太多要说的,主要是一个页面布局的问题,由于使用了辅助函数,所以html结构就不是由我来决定,因此css布局上的方案并不是很恰当。这里由于不能使用calc函数计算,所以使用了在父元素使用padding和border-box来定位一个百分比宽度。内部a标签由于是内联元素,要想指定宽度,需要使用display:block
来改成块级元素。
自己定义一个新模板
这里我自己定义了一个新页面tags归档页面,本来hexo是没有带这个归档模板的,这里我使用hexo new page tags
命令,然后会在hexo根目录下source中生成一个tags文件夹,里面会有一个index.md文件打开后设置相应内容即可,目前由于不需要更多的功能,所以添加一个layout: "tags"
即可,这时在建立ejs文件就ok了
后记
目前博客还存在一些问题,首先比如说页面加载速度太慢,应该是左侧导航栏图片加载太慢(应该是Github Pages比较慢?)还是比较影响体验的。之后放到码云上快多了。
还有一点,本来准备吧jquery全改了改成原生js(js文件只有两个3个函数),但是发现用了jquery之后人确实变懒了,本来函数都已经改过了,但是fadeIn和fadeOut两个函数因为太懒了,暂时不想改了,所以又全注释掉了。以后想改了再改回来吧。
还有个问题,就是这个页面的markdown居然解析错了,两个css代码段居然连在了一起?!!改了几遍也还是这样,目前暂未解决。
- 感谢你的欣赏!