目录标题

  • Icarus用户指南 - 主题美化
  • 自定义 Icarus 主题
  • 解决方案
  • 我的博客

Icarus用户指南 - 主题美化

Icarus的主题样式编码文件为themes/icarus/layout/layout.jsx
此文件定义了站点全局的样式设置。本文详细介绍了本主题针对文章分类的详细配置说明。


自定义 Icarus 主题

主题默认是三列排列,第一列是个人信息,第二列是文章的简介或者内容,第三列是标签云等组件。 在首页的时候阅读体验也很好,但是在文章页面查看全文的时候就感觉文章内容显示有些太少。 于是打算在文章页面隐藏掉右边的侧边栏。 我想应该是我用的icarus主题版本是3+,网上都是2+版本的教程,没有找到对应教程。 于是就自己阅读源码自己解决了问题。 默认配置也基本能用了,但是有一个痛点就是,阅读模式文章宽度太短了,还是根据个人习惯做下配置。

解决方案

1. 首先找到了控制侧边栏的代码文件在

../themes/icarus/layout/layout.jsx

源码为(版本差别,大同小异):

const { Component } = require('inferno');
const classname = require('hexo-component-inferno/lib/util/classname');
const Head = require('./common/head');
const Navbar = require('./common/navbar');
const Widgets = require('./common/widgets');
const Footer = require('./common/footer');
const Scripts = require('./common/scripts');
const Search = require('./common/search');module.exports = class extends Component {render() {const { env, site, config, page, helper, body } = this.props;const language = page.lang || page.language || config.language;const columnCount = Widgets.getColumnCount(config.widgets);return <html lang={language ? language.substr(0, 2) : ''}><Head env={env} site={site} config={config} helper={helper} page={page} /><body class={`is-${columnCount}-column`}><Navbar config={config} helper={helper} page={page} /><section class="section"><div class="container"><div class="columns"><div class={classname({column: true,'order-2': true,'column-main': true,'is-12': columnCount === 1,'is-8-tablet is-8-desktop is-8-widescreen': columnCount === 2,'is-8-tablet is-8-desktop is-6-widescreen': columnCount === 3})} dangerouslySetInnerHTML={{ __html: body }}></div><Widgets site={site} config={config} helper={helper} page={page} position={'left'} /><Widgets site={site} config={config} helper={helper} page={page} position={'right'} /></div></div></section><Footer config={config} helper={helper} /><Scripts site={site} config={config} helper={helper} page={page} /><Search config={config} helper={helper} /></body></html>;}
};

三栏分别为:(从第24行开始)

  • <div class={classname({column: true,'order-2': true,'column-main': true,'is-12': columnCount === 1,'is-8-tablet is-8-desktop is-8-widescreen': columnCount === 2,'is-8-tablet is-8-desktop is-6-widescreen': columnCount === 3})} dangerouslySetInnerHTML={{ __html: body }}></div>  // 中
    
  • <Widgets site={site} config={config} helper={helper} page={page} position={'left'} />  // 左
    
  • <Widgets site={site} config={config} helper={helper} page={page} position={'right'} />  //右
    

2. 那能不能逻辑改为只有主页才显示右边侧栏呢?

我从源码中分析到,函数返回return的就是样式页面。
既然找到了这3栏,我可以通过改变返回值,就可以达到控制主体样式的目的。

所以加一个判断语句即可:

if(page.path==='index.html'){   // index.html即主页面// 返回3栏return '...';
}
else{// 返回2栏,改变宽度即可return '...';
}

上面代码只会在主页面显示3栏,后续博主我在使用的过程中发现有且只有主页面是3栏;换页、分类页等页面就会变成2栏! 因为我们的代码只为主页面返回3栏!

后来在读源码后,找到了解决方法:
../themes/icarus/layout/layout.jsx 文件中第16行添加如下代码:

  console.log("Page", page);console.log("Page.path: ", page.path);

这样就可以查看页面具体信息;
控制台执行hexo g -d后,会出现以下信息;
由于每个page信息可能会很多,尤其是博客文章内容过多,就会使page包含的信息过多,会使控制台信息溢出;所以我只选择其中一个较短的信息展示如下:

2.1 page信息

Page:  { base: 'tags/Hexo/',total: 1,current: 1,current_url: 'tags/Hexo/',posts: _Query { data: [ [_Document], [_Document] ], length: 2 },prev: 0,prev_link: '',next: 0,next_link: '',tag: 'Hexo',path: 'tags/Hexo/index.html',lang: 'en',canonical_path: 'tags/Hexo/index.html' }

2.2 page.path信息

ubuntu~/github/mysticalguest.github.io$ hexo g -d
Inferno is in development mode.
INFO  =======================================██╗ ██████╗ █████╗ ██████╗ ██╗   ██╗███████╗██║██╔════╝██╔══██╗██╔══██╗██║   ██║██╔════╝██║██║     ███████║██████╔╝██║   ██║███████╗██║██║     ██╔══██║██╔══██╗██║   ██║╚════██║██║╚██████╗██║  ██║██║  ██║╚██████╔╝███████║╚═╝ ╚═════╝╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚══════╝
=============================================
INFO  === Checking package dependencies ===
INFO  === Checking the configuration file ===
INFO  === Registering Hexo extensions ===
INFO  Start processing
INFO  Files loaded in 6.76 s
Page.path:  2020/06/18/ICARUS主题美化/
Page.path:  2020/06/17/数据结构进阶实训八/
Page.path:  2020/06/17/数据结构进阶实训五/
Page.path:  2020/06/17/数据结构进阶实训二/
Page.path:  2020/06/17/数据结构进阶实训一/
Page.path:  2020/06/17/数据结构进阶实训六/
Page.path:  2020/06/17/数据结构进阶实训七/
Page.path:  2020/06/16/Java笔记文档2/
Page.path:  2020/06/16/Java笔记文档1/
Page.path:  2020/06/15/数据结构进阶实训三/
Page.path:  2020/06/15/数据结构进阶实训四/
Page.path:  2020/06/14/hello-world/
Page.path:  archives/index.html
Page.path:  archives/page/2/index.html
Page.path:  archives/2020/index.html
Page.path:  archives/2020/page/2/index.html
Page.path:  archives/2020/06/index.html
Page.path:  archives/2020/06/page/2/index.html
Page.path:  categories/配置/index.html
Page.path:  categories/Document-Compile/index.html
Page.path:  categories/主题/index.html
Page.path:  categories/算法/index.html
Page.path:  index.html
Page.path:  page/2/index.html
Page.path:  tags/Hexo/index.html
Page.path:  tags/Java/index.html
Page.path:  tags/C/index.html
Page.path:  categories/index.html
Page.path:  tags/index.html
INFO  0 files generated in 3.37 s
INFO  Deploying: git
INFO  Clearing .deploy_git folder...
INFO  Copying files from public folder...
INFO  Copying files from extend dirs...
位于分支 master
无文件要提交,干净的工作区
分支 'master' 设置为跟踪来自 'git@github.com:*/*.git' 的远程分支 'master'。
Everything up-to-date
INFO  Deploy done: git

从控制台打印出的信息,可以明显看出每个页面的详细路径信息
所以我们想要那些页面3栏都可以;

  var path = /\Sindex.html/;if(page.path==='index.html' || path.test(page.path)){// 返回3栏return '...';}else{// 返回2栏,改变宽度即可return '...';}

这里我利用正则表达式,将非博客文章页面都设为3栏显示,大家可根据自己喜好自行对想要的页面设置指定栏数。


3. 其他修改逻辑

+表示添加代码,没有标记表示代码不做修改

// 从16行开始修改代码
+ if(page.path==='index.html'){return <html lang={language ? language.substr(0, 2) : ''}><Head env={env} site={site} config={config} helper={helper} page={page} /><body class={`is-${columnCount}-column`}><Navbar config={config} helper={helper} page={page} /><section class="section"><div class="container"><div class="columns"><div class={classname({column: true,'order-2': true,'column-main': true,'is-12': columnCount === 1,'is-8-tablet is-8-desktop is-8-widescreen': columnCount === 2,'is-8-tablet is-8-desktop is-6-widescreen': columnCount === 3})} dangerouslySetInnerHTML={{ __html: body }}></div><Widgets site={site} config={config} helper={helper} page={page} position={'left'} /><Widgets site={site} config={config} helper={helper} page={page} position={'right'} /></div></div></section><Footer config={config} helper={helper} /><Scripts site={site} config={config} helper={helper} page={page} /><Search config={config} helper={helper} /></body></html>;
+ }
+ else{+ return <html lang={language ? language.substr(0, 2) : ''}>
+     <Head env={env} site={site} config={config} helper={helper} page={page} />
+     <body class={`is-${columnCount}-column`}>
+         <Navbar config={config} helper={helper} page={page} />
+         <section class="section">
+             <div class="container">
+                 <div class="columns">
+                     <div class={classname({+                         column: true,
+                         'order-2': true,
+                         'column-main': true,
+                         'is-12': columnCount === 1,
+                         'is-8-tablet is-8-desktop is-10-widescreen': columnCount === 2
+                     })} dangerouslySetInnerHTML={{ __html: body }}></div>
+                     <Widgets site={site} config={config} helper={helper} page={page} position={'left'}/>
+                 </div>
+             </div>
+         </section>
+         <Footer config={config} helper={helper} />
+         <Scripts site={site} config={config} helper={helper} page={page} />
+         <Search config={config} helper={helper} />
+     </body>
+ </html>;
+ }

好啦,大工告成!

其中只有两处代码改动较大,让我们来看看吧!

我们只是修改了栏数,但每一栏的宽度没有改变,这里更关注的是文章栏的宽度。
具体修改代码下:

// 渲染相应栏的标签,只添加‘中’和‘左’
// 根据自己的喜好可以选择任意组合,‘中’和‘右’也可以
// 第45行
'is-8-tablet is-8-desktop is-10-widescreen': columnCount === 2

即将原来的 is-8-widescreen修改为is-10-widescreen


4. 下面详细解释一下代码

icarus 可以设置资料、toc、归档等等插件在文章的左侧或者右侧。也就是说,包括插件和文章在内,列数在1~3列不等:

无插件的时候,为1列;
插件统一在左侧或右侧时,为2列;
插件左、右侧都有时,为3列。
Bulma 引擎将屏幕横向分为12份,所有元素按照自己的需求使用即可。

通过 layoutwidget.jsx 文件,我们可以看到,对于插件而言:

如果屏幕分为2列,则插件的宽度为 is-4-widescreen,也即是4/12=33.33%的宽度;

如果屏幕分为3列,则插件的宽度为 is-3-widescreen,也即是3/12=25%的宽度,两列插件占了50%宽。

同样的,layout.jsx 文件针对文章也做了宽度限制:

如果屏幕分为1列,则文章的宽度为 is-12,也即是12/12=100%的宽度;

如果屏幕分为2列,则文章的宽度为 is-8-widescreen,也即是8/12=66.66%的宽度;

如果屏幕分为3列,则文章的宽度为 is-6-widescreen,也即是6/12=50%的宽度。

那么调整插件宽度的方法也就差不多想出来啦!


我的博客

GitHub博客
Gitee博客

Icarus主题美化相关推荐

  1. Ubuntu 16.04 主题美化及常用软件安装

    一.主题美化 系统清理 系统更新: 安装完系统之后,需要更新一些补丁.Ctrl+Alt+T调出终端,执行一下代码: 1 sudo apt-get update 2 sudo apt-get upgra ...

  2. 主题美化 —— IAR篇

    主题美化篇 由于项目需要,不得不使用IAR进行开发,可是看到默认的主题,简直丑到爆了. 寻思已久,还是对环境配色进行下美化,有两种方法,分别是鼠标点点点和配置文件修改. 鼠标点点点 从工具栏里进入,T ...

  3. Ubuntu 18.04 LTS系统主题美化

    Ubuntu 18.04 LTS系统主题美化 安装主题 设置主题 安装Dash to dock工具栏 安装Hide to bar顶栏隐藏工具栏 安装Pixel Saver 找设置一下登录界面的主题吧 ...

  4. 【Hexo】记录NexT主题美化及域名配置(图示详解)

    本篇主要记录一下更换NexT主题,及后来美化,配置域名的过程. 我的 Hexo博客:http://yzhblog.work/- 1.更换主题为 NexT 更换主题其实很简单,就是两步: git clo ...

  5. Hexo+icarus主题配置

    下载icarus主题 飞鱼的博客 进入博客主目录,点击鼠标右键Git Bash Here,进入命令行界面 输入: git clone https://github.com/ppoffice/hexo- ...

  6. Hexo博客icarus主题定制篇

    本文基于Hexo和Icarus4.1.1版本,对博客主题定制过程做一个记录.在icarus4.0版本中,主题npm方式安装的话,本地将不会有主题相关的文件,需要定制的话,可以通过修改node_modu ...

  7. Manjaro KDE 21.2.5安装后配置、yay常用命令、常用软件安装及主题美化(2022.04.18)

    Manjaro KDE 21.2.5安装后配置.yay常用命令.常用软件安装及主题美化(2022.01.23) 结果展示 基本配置 关于 manjaro 的安装这里不再赘述了,安装的时候选择闭源驱动无 ...

  8. 2023 zibll 子比主题 美化插件 全开源

    2023 zibll 子比主题 美化插件 全开源 请保留作者版权 谢谢. 2023 zibll 子比主题 美化插件 全开源    .....................

  9. Source Insight主题美化插件

    Source Insight主题美化插件 直接在git下载: git clone https://gitee.com/dada4545/source_insight_s4.git 然后进入到导入刚才那 ...

  10. 【天雪楼】葫芦侠主题美化-幻塔

    今天不做脚本,给大家搞了个葫芦侠的主题美化包,幻塔系列的 三楼主题包好看的都要那啥或那那啥买,现在给大家分享一款它没有但是可以用的美化包 --来自百度网盘超级会员V3的分享 hi,这是我用百度网盘分享 ...

最新文章

  1. Python的零基础超详细讲解(第六天)-Python的数字类
  2. java怎么让进程停止_JAVA:如何在进程停止时调用一个方法(甚至有可能吗?)
  3. keepalived中的脑裂
  4. 下载免费电子书:A Byte of Vim [转]
  5. Java虚拟机的研究与实现
  6. HTTP代理神器Fidder
  7. [道理]关于人生的,很不错!
  8. 台式计算机装两条内存条开不了机,电脑插了两根内存条后开不了机是怎么回事?...
  9. c语言怎么判别输入字母大小,使用C语言判断英文字符大小写的方法
  10. linux简单命令3---帮助命令
  11. 英伟达代码签名证书遭窃取?三星也未能幸免,泄露多达190GB文件
  12. SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理
  13. Filenet公布首批候选自治社区
  14. 约束最优化方法之最优性条件
  15. 双色球选号--python
  16. lombok报错Ambiguous method call. Both
  17. 新网站如何做seo优化,这5个步骤让网站快速被收录
  18. 习惯于CRUD,不求上进呢?-为什么有很多程序员沉醉于舒适区
  19. 【Maya】移动、缩放、旋转、万向节旋转、冻结(未完成)
  20. hadoop103: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

热门文章

  1. 【AI学习笔记】退出 Anaconda 虚拟环境时 遇到的两种报错。
  2. android ntfs驱动_如何在Android上读写外部NTFS外部硬盘驱动器和笔式驱动器
  3. pwnable之bof
  4. 2017 CCPC 秦皇岛 G题
  5. 赖美云的认证照_818吴宣仪赖美云杨超越等《创造101》人气女孩旧照,鉴定是否整容~...
  6. 大量数据导出Excel 之 多重影分身之术 [转]
  7. 目标检测论文解读复现之十九:基于YOLOv5网络模型的人员口罩佩戴实时检测
  8. 【赛题解读】2021 CCF BDCI 基于飞桨实现花样滑冰选手骨骼点动作识别
  9. 北京网络行业协会鉴定称飞流软件无法卸载
  10. lisp方格网法计算土方量_方格网法计算土方量教材及例题