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份,所有元素按照自己的需求使用即可。
通过 layout或widget.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%的宽度。
那么调整插件宽度的方法也就差不多想出来啦!
ICARUS主题美化的更多相关文章
- ubuntu16.04主题美化和软件推荐
前几天把ubuntu从15.10更新到了16.10,在网上看到有很多直接更新出问题的,正好赶上换SSD,于是采用全新安装,之前用ubuntu的时候装软件最让人头疼了,这回又得头疼一次了!! 索性把他记 ...
- Android源码浅析(二)——Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境
Android源码浅析(二)--Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境 接着上篇,上片主要是介绍了一些安装工具的小知识点Andr ...
- Hexo博客搭建以及Next主题美化的经验之谈
这并不是一篇博客搭建教程.内容主要包含个人对于Hexo博客搭建的心得,Next6.0主题美化的部分建议,以及摘录一些各种用于博客搭建的link. 在博客园3年6个月,确实也学到了很多,博客园也是目前为 ...
- Ubuntu 16.04 主题美化及常用软件安装
一.主题美化 系统清理 系统更新: 安装完系统之后,需要更新一些补丁.Ctrl+Alt+T调出终端,执行一下代码: sudo apt-get update sudo apt-get upgrade 卸 ...
- 安装配置hexo icarus主题配置
安装部分配置hexo icarus主题配置 安装icarus 直接下载主题模块放到blog项目 ,blog项目根目录执行 git clone https://github.com/ppoffice/h ...
- Ubuntu主题美化篇
主题美化篇 Ubuntu自带的主题简直不敢恭维,这里博主将它美化了一番,心情瞬间都好了一大截,码代码也会飞起!!先放一张我美化后的效果. 桌面和终端效果如下: unity-tweak-tool 调整 ...
- Ubuntu主题美化--使用WPS风格
五一就这么过去了,我也没有出去玩,一个人闲的蛋疼,无聊就把ubuntu美化一下. 闲话不多说,先看效果: 壁纸是我自己制作的的,如果喜欢另存一下下面这张图设置成背景就可以了,分辨率是1366x768. ...
- CodeBlocks的汉化、主题美化及其调试功能的实现
破事水 最近由于Cfree5经常崩溃+调试语句运行速度比较慢,想尝试一下另一个听说很好用的IDE Code::Blocks. 先上官网的安装包(自带mingw,安装完可以直接用,适用于windows系 ...
- ubuntu 16.04 主题美化及终端美化
如果你使用的是图形界面,你会发现ubuntu默认的界面真是丑的一批,所以简单美化一下: 1.安装unity-tweak-tool: sudo apt-get install unity-tweak-t ...
随机推荐
- 详解 LSTM
LSTM 长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行. 长短时记忆 ...
- Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布
环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...
- Vuex + localStorage + html实现简易todolist
1.项目结构 2.Vuex,什么是Vuex? 官方文档上的介绍是:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种 ...
- GitHub标星120K+的JDK并发编程指南,连续霸榜GitHub终于开源了
前言 在编程行业中,有一个东西是和广大程序员形影不离的,在最一开始接触编程就是配置它的运行环境,然后java / javac,对,这个东西就是jdk 昨天项目刚上线,可以稍微休息一下了,但是猛的闲下来 ...
- 太厉害了,阿里大牛居然把Git,GitHub总结的这么全面,撸源码去
“版本控制系统”( Version Control System, vcs)是程序代码管理软件的通称,是用来保存程序文件的修改记录以及历史版本,以便日后查看或是使用.Vcs已经有数十年的发展历史,最早 ...
- PDF的来源——概率密度函数
//首发于简书,详见原文:https://www.jianshu.com/p/6493edd20d61 你不会还真的以为这是一篇讲怎么做pdf文件,怎么编辑.保存.美化的文章吧? 咳咳,很遗憾告诉你不 ...
- Android Studio 突然无法识别真机问题
最近在赶项目,今天AS突然疯狂跟我作对,森气!! 平时连接手机没有问题,今天突然各种识别不到真机!! 1.数据线,check.没有问题. 2.重启AS,还是不行. 3.安装驱动,行不通. 4.已经弹出 ...
- SpringBoot--- SpringSecurity进行注销,权限控制
SpringBoot--- SpringSecurity进行注销,权限控制 环境 IDEA :2020.1 Maven:3.5.6 SpringBoot: 2.0.9 (与此前整合的版本2.3.3 不 ...
- 「从零单排canal 07」 parser模块源码解析
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_read ...
- 自己搭建的集群,启动hadoop时slave节点的datanode没有启起来怎么办?
自己搭建的集群,启动hadoop 集群是,发现slave节点的datanode没有启动,查了资料发现是因为我在启动集群前,执行了这个命令: hadoop namenode -format 这个指令会重 ...