最简单的Hexo友情链接页面定制
Hexo的NexT主题可以天然支持友链,即在NexT主题的配置文件_config.yml
中有一个# Blog rolls
块,可以添加友链,然后在左边栏的底端会显示它们。但这样的问题在于边栏的空间有限,友链比较多的话会影响布局,而且分散主题。于是考虑单独创建一个友链页面,搜索发现已经有成型的方案,大体思路与
#
Hexo添加自定义分类菜单项并定制页面布局
一样,增加菜单项和友链模版,再修改主页模板。这样做可以解决问题,但是不够优雅,属于侵入式的定制(直接修改了主题文件模板),但绝大多数人都采用了这种方案
:-)。
有没有更简单的方案呢?有!考虑到markdown天然支持内嵌html,我们要做的只是用html写一篇新博客。
可行方案选择
经过思考发现大概有几个方案:
- 直接使用NexT主题的Blog roll
- 定制友情链接模版
- 在markdown中内嵌友链css和html
第一种方案简单粗暴,但扩展性差;第二种方案能达到目的,但实现步骤繁琐,另外以后升级NexT主题就麻烦了,大概率需要手动merge代码,因为修改了NexT主题的模版文件;最后一种方案非常完美,非侵入式实现,不动源码,只改配置文件,扩展方便,copy一段html即可新增友链,唯一的缺点就是需要内嵌一段css,稍显丑陋。
在采用这种方法之前还走过一点弯路,考虑直接做一个不被渲染的HTML(利用
skip_render)放到source
文件夹中,但发现这样做会丢失页面框架,与其他页面风格不一致。
最简单的友链页面定制
新建一个post
在source
文件夹下建一个文件夹links
,里面放一个文件index.md
,即友链页面:
其实就是一段css再接上几个div,以后每加一个友链,只需要复制如下一段即可:--- title: 友情链接 date: 2021-06-16 00:34:27 --- <div class="post-body"> <div id="links"> <style> .links-content{ margin-top:1rem; } .link-navigation::after { content: " "; display: block; clear: both; } .card { width: 45%; font-size: 1rem; padding: 10px 20px; border-radius: 4px; transition-duration: 0.15s; margin-bottom: 1rem; display:flex; } .card:nth-child(odd) { float: left; } .card:nth-child(even) { float: right; } .card:hover { transform: scale(1.1); box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); } .card a { border:none; } .card .ava { width: 3rem!important; height: 3rem!important; margin:0!important; margin-right: 1em!important; border-radius:4px; } .card .card-header { font-style: italic; overflow: hidden; width: 100%; } .card .card-header a { font-style: normal; color: #2bbc8a; font-weight: bold; text-decoration: none; } .card .card-header a:hover { color: #d480aa; text-decoration: none; } .card .card-header .info { font-style:normal; color:#a3a3a3; font-size:14px; min-width: 0; overflow: hidden; white-space: nowrap; } </style> <div class="links-content"> <div class="link-navigation"> <div class="card"> <img class="ava" src="https://cdn.jsdelivr.net/gh/hvnobug/assets/common/avatar.png" /> <div class="card-header"> <div> <a href="https://blog.hvnobug.com/">Emil’s blog</a> </div> <div class="info">这是一个分享IT技术的小站。</div> </div> </div> <div class="card"> <img class="ava" src="https://yingwiki.top/avatar" /> <div class="card-header"> <div> <a href="https://yingwiki.top">越行勤's Blog</a> </div> <div class="info">努力学习的小菜鸟</div> </div> </div> </div> </div> </div> </div>
之后在每次<div class="card"> <img class="ava" src="{avatarurl}" /> <div class="card-header"> <div> <a href="{link}">{name}</a> </div> <div class="info">{description}</div> </div> </div>
hexo g
时,就会生成一个links/index.html
文件。同时由于它不在source/_posts
文件中,hexo不会把它当成一篇新博客加入首页。
增加菜单项
在NexT主题的配置文件_config.yml
中找到menu
部分,加一行即可:
... menu: tags: /tags/ || tags categories: /categories/ || th ... Links: /links/ || link ...
实现效果如图:
欢迎留言交换友链:友情链接
本文上面的css和html借鉴了第二种方案的模板,参考: # Hexo个人博客自定义友链页面 # hexo博客next主题自定义友情链接页面
Preview: