建站记录(三):代码阅读和部分功能实现
前言
对项目架构有了大致了解之后就可以根据自己想要修改的部分去有目的性地寻找文件了。在建站记录(一)中遗留了一些未实现功能,大多需要对项目源码进行更改,因此以实现这些功能为导向进行代码阅读和修改就是近期的目标。
代码泛读
点击展开
全局样式 index.styl
项目根目录/themes/butterfly/source/css/_global/index.styl
body 元素设置了页面的基本样式,包括背景色、字体颜色、字体大小等。
定义了滚动条在不同浏览器中的样式,确保用户体验一致。
h1 到 h6 标题的样式定义了字体重量、颜色和上下间距。
表格和表头样式的定义,包括边框、内边距和背景色。
选中文本时的样式定义,如背景色和文字颜色。
链接和按钮样式的定义,包括颜色、悬停效果和过渡动画,确保用户可以清晰地识别链接和按钮。
引用块的样式定义了边框、背景色、文本颜色和尾注样式,使引用内容在页面中突出显示。
侧边栏 aside.styl
项目根目录/themes/butterfly/source/css/_layout/aside.styl
作者信息:包括作者名称、描述的字体样式和边距设置。
社交图标:定义了社交图标的样式和悬停效果。
按钮:包含一个按钮,定义了背景颜色、文字颜色、对齐方式、行高及悬停效果。
标签云:定义了标签的内边距和悬停时的颜色变化。
侧边栏列表:包括最近文章、最新评论、分类、标签、文档、网站信息等列表,定义了各个列表项的布局、内外边距及悬停效果。
固定位置:在大屏幕和小屏幕上的不同位置和样式。
内容滚动:目录内容支持滚动,并根据屏幕宽度调整最大高度。
展开和折叠:目录项可以展开和折叠,悬停时会改变颜色。
圆形头像:定义了头像的圆形样式和悬停时的旋转效果。
表格布局:网站信息部分使用表格布局,定义了文字颜色和悬停时的颜色变化。
其他功能
默认宽度:26%
屏幕宽度变化:根据屏幕宽度调整侧边栏宽度和内边距:
大于900px时,侧边栏宽度保持26%,根据配置调整内边距。
小于等于900px时,侧边栏宽度为100%。通用样式:卡片组件有统一的样式,包括相对定位、隐藏溢出内容、内外边距等。
移动设备:在配置中禁止显示的卡片组件会在屏幕宽度小于768px时隐藏。
特定样式:第一个卡片组件在不同屏幕宽度下有不同的上边距。按钮移动动画:为按钮设置了一个左右移动的动画效果。
目录展开和关闭动画:目录展开和关闭时有缩放动画效果。隐藏侧边栏:在大屏幕上如果配置隐藏侧边栏,调整主内容的布局。
页内组件排序:根据配置文件中的排序顺序,调整各个卡片组件在侧边栏内的显示顺序。
右侧按钮 rightside.styl
项目根目录/themes/butterfly/source/css/_layout/rightside.styl
按钮样式包括背景、颜色、悬停效果等定义。
文章 post.styl
项目根目录/themes/butterfly/source/css/_layout/post.styl
设置链接颜色和鼠标悬停下划线效果。
分页控件 pagination.styl
项目根目录/themes/butterfly/source/css/_layout/pagination.styl
设置分页控件的顶部边距和居中对齐。
定义当前活动页码的背景色和文字颜色。
将分页信息绝对定位在页面顶部中间,并设置宽度和垂直居中效果。
样式化前后文章信息和文章分页链接,包括在小屏幕下的响应式布局。
定义了最近文章部分和其他 div 元素中的分页样式。
设置了每个页码元素的显示方式和悬停效果,确保用户体验一致性和视觉吸引力。
评论 comment.styl
项目根目录/themes/butterfly/source/css/_layout/comment.styl
设置评论头部的底部边距和清除浮动。
定义评论标题的显示方式和样式。
控制评论切换按钮的布局和样式,根据配置条件显示不同的样式效果。
使用动画效果控制评论内容切换时的过渡效果。
根据类名 .move 控制评论切换按钮和评论内容的状态变化,实现视觉上的切换效果。
页脚 footer.styl
项目根目录/themes/butterfly/source/css/_layout/footer.styl
相对定位,背景色为 $light-blue。
可能会添加一个全屏遮罩效果的伪元素。
相对定位,设置了内边距。
文本颜色为灰色,居中显示。
链接颜色和悬停样式的定义。
特定的类 .footer-separator 用于调整链接之间的间隔。
.icp-icon 类用于调整图标的样式,使其垂直对齐至文本底部。
头部 head.styl
项目根目录/themes/butterfly/source/css/_layout/footer.styl
设置页面头部背景、高度、文本样式和滚动动画效果。
根据配置项添加背景遮罩效果。
设置页面导航栏样式,包括背景、高度、字体样式和交互效果。
包含菜单项的样式和下拉菜单的动画效果。
定义了页面和文章内容的布局样式。
包括标题、元数据(如日期、作者等)、文字样式、响应式调整等设置。
结束
到这里开始我对代码有了基本的熟悉,不再需要为读而读了,可以尝试定位自己实现功能需要读的代码在哪里,然后精读相关代码。
功能实现
这两天有点昏头转向了,感觉脑子不够用。睡了一觉醒来甚至连自己的CSS在哪引入都忘了,找了好几分钟才找到,干。
清单页面
参考JayHrn,实现了清单界面,包括影视、番剧、书籍。游戏和音乐界面我打算单独做一些独特的设计,会在后面单独罗列。以创建影视清单页面为例,
- 在
themes/butterfly/layout/includes/page/
目录下新建movies.pug
文件。- 在
themes/butterfly/layout/page.pug
文件中引入创建的页面。- 在博客根目录新建
source/_data/movies.yml
文件,并手动添加内容。- 新建
source/css/movies_page.css
文件,通过css注入给页面添加样式。
由于主题全局样式有区别,我基于JayHrn佬的源码进行了微调,把作品卡片布局从三列调整成了两列,并调整字号、行高、间距、卡片内容布局、卡片颜色和阴影到我满意的效果。修改主要集中在 movies_page.css 和 movies.pug 这两个文件中。由于这个改动不是基于butterfly主题自带的文件,而是基于按JayHrn的教程新建的文件,所以就不贴在这里了,可以直接去看文件,我在每一处修改的地方都加上了注释。
在这个过程中我逐渐熟悉了css文件和pug文件的代码结构,熟悉了浏览器开发者工具的用法,也完成了又一个第一次:第一次不是 c + v 别人的源码,而是一个字母一个字母敲出来一个容器,塞进网页,实现功能。虽然微不足道,但是也确确实实有一种丰收的喜悦,不亚于第一次看到终端输出 “Hello world” 的那一瞬间。
归档页美化
项目根目录\themes\butterfly\source\css_page\archives.styl
我想要去除的文章列表前方的丑丑的圆形装饰和条纹都在这个文件中被定义,原代码如下:
1 | .article-sort |
我没有直接修改原代码,而是通过注入 before_hide.css 来把它们都隐藏。其他美化以后再说。
标签页美化
我目前看到的与标签功能相关的文件总共有五个:
项目根目录\themes\butterfly\source\css_page\tags.styl
项目根目录\themes\butterfly\layout\tag.pug
项目根目录\themes\butterfly\layout\includes\page\tags.pug
项目根目录\themes\butterfly\layout\includes\widget\card_tags.pug
项目根目录\themes\butterfly\scripts\helpers\page.js
对它们的代码进行阅读,它们的功能分别是:
- tags.styl:定义标签云页面的样式,包括标签的排列方式、悬停效果、字体大小和颜色。
- tag.pug:控制单个标签页面的布局和内容,显示包含某个标签的所有文章列表。
- tags.pug:控制标签云页面的布局和内容,生成包含所有标签的页面。
- card_tags.pug:控制侧边栏标签云小组件的布局和内容,根据配置决定是否显示标签云。
- page.js:定义生成标签云的 cloudTags 函数,设置标签的字号、颜色等样式。
我想要实现的功能为
- 把标签的字号修改为1.2em(参考Tzy的标签页),字体颜色修改为黑色,并在标签后面显示符号“#”加上该标签下文章数量。这里只需要修改 page.js 文件。
- 调整标签云页面的样式,包括调整内外边距、添加边框、边框圆角和阴影、行高(同样参考Tzy的标签样式)。这里只需要修改 tags.styl 文件
page.js 文件代码修改如下:
(通过diff格式代码块体现修改内容)
1 | hexo.extend.helper.register('cloudTags', function (options = {}) { |
tags.styl 文件修改如下:
1 | .tag-cloud |
如果要完全复刻Tzy或者JayHrn的效果,应该还需要给文章数量(tag.length)设置一个容器,并设置相应样式,以及修改 hover 效果。这些东西暂时不想整,目前为止的效果我就可以接受了。
值得一提的是,单个标签页好像是沿用的归档页的布局,所以在上一步隐藏掉归档页的装饰性圆形和条形之后在单个标签页也没有了。
分类页美化
同样的,先找到和分类页相关的文件,如下所示
项目根目录\themes\butterfly\source\css_page\categories.styl
项目根目录\themes\butterfly\layout\includes\page\categories.pug
项目根目录\themes\butterfly\layout\category.pug
功能分别为:
- categories.styl: 这是一个样式文件,用于定义分类页面的样式。它主要控制以下元素的外观:分类标题的字体大小、分类列表的样式、分类名称的颜色及悬停效果、分类文章计数的样式、分类列表的缩进和布局
- categories.pug: 这是一个非常简单的模板文件,它只包含一行代码,用于渲染分类列表。list_categories()是一个 Hexo 的辅助函数,用于生成所有分类的列表。
- category.pug:
这是分类页面的主要模板文件。它定义了两种不同的分类页面布局:如果 theme.category_ui 设置为 ‘index’,它会使用类似于首页的文章列表布局。否则,它会使用一个排序的文章列表布局,显示特定分类的文章。
我希望分类页样式能和标签页保持一致,修改如下:
修改 categories.pug:
1 | -.category-lists!= list_categories() |
在 page.js 中添加 cloudCategories 函数:
在 page.js 文件的末尾添加以下代码:
1 | +hexo.extend.helper.register('cloudCategories', function (options = {}) { |
修改 categories.styl:
将原文件完全替换
1 | -.category-lists |
顶部导航栏字体
项目根目录\themes\butterfly\source\css_layout\head.styl
一直觉得导航栏部分的字体有一点小,想改的稍微大一点。顶部导航栏相关的内容都在 head.styl 里,改动如下:
1 | .site-page |
之前曾经想把左边的logo和站名左移一些,把右边的搜索icon右移一些,后来觉得还是维持原样好看,就没动位置。
分页按钮颜色
项目根目录\themes\butterfly\source\css\var.styl
1 | +$theme-paginator-color = #4a587f |
右下角按钮颜色
项目根目录\themes\butterfly\source\css\var.styl
1 | -$btn-color = #fff |
主题颜色
项目根目录\themes\butterfly\source\css\var.styl
1 | // color |
被选字体颜色
项目根目录\themes\butterfly\source\css\var.styl
1 | +$j1nz-text-sel-color = #ff7c7c |
侧栏目录颜色
项目根目录\themes\butterfly\source\css\var.styl
1 | +$j1nz-toc-color = #d7d4f0 |
搜索栏左上角“搜索”的字号和颜色
项目根目录\themes\butterfly\source\css_search\index.styl
1 | .search-dialog-title |
结语
回顾开始时提到的之前的未实现功能,有四项已经完成:
- 修改右下角图标颜色、页码按钮颜色、滚动条颜色等主题颜色。
- 调整顶部导航栏字体大小。
- 对归档、标签、分类页面进行美化。
- 完成清单页面的布置。
有五项不是很重要,暂时延后,等什么时候想做了再做:
- 部署评论功能,开通留言板。
- 制作关于页面,制作历史版本记录页面。
- 优化博客链接。
- 修改网站加载动画。
- 设置个性化页脚和徽标。
有两项现在觉得不需要做了:- 调整主页正文卡片宽度,调整顶部导航栏使其与正文左右侧对齐。- 主页顶部轮播卡片。
第一阶段的目标已经完成啦,网站基本算是搭起来了,接下来就要注重于个人提升和博客内容了。或者说这一直以来都是我的目标,网站本身反而是最不重要的。我只是把这里当作放我的杂谈、随笔、感悟的地方,记录美化的过程也只是方便以后再改的时候回来查阅。
希望我可以顺顺利利把毕业论文写出来~