Hexoテーマ Butterflyカスタマイズ
GitHub - jerryc127/hexo-theme-butterfly: 🦋 A Hexo Theme: Butterfly
やっと、テーマのカスタマイズが終わったので置いておきます。
色々試してうまくいった結果であり、もっといい方法がある気がするので参考程度にどうぞ。
環境
- Windows10 64bit
- Netlify
- Node.js 18.16.0
- Hexo 6.3.0
- Butterfly 4.8.1
特徴
- Hexo5.0.0以降をサポート
- テーマの
_config.yml
で色々と設定できるのは嬉しいが、設定に時間がかかりやすい面も - スマホでもサイドバーからtocが確認できる
- ダークモードは、画像やGistのコード表示の明るさも下がる
- テーマで使用しているCDNのほとんどがjsDelivr
.pug
と.styl
が使われている
Gistのコードもダークモードにしたいときは、CSS Dark Mode Gist Embed Code · GitHubのCSSを参考にするとよさそう。
ただ、テーマのコード表示と見分けづらくなったのでやめた。
中華圏の一部のテーマは中国のみ?のCDNを使用していることがあり、急にアクセスできなくなることがあったので、前のテーマのときは他のCDNに変えていました。
このテーマはほとんどがjsDelivrなので、気にしなくてよさそうです。
このテーマを使用するときの注意点としては、hexo-renderer-pugを入れないとテーマが表示できないです。
少し残念なところ
- テーマの白系のコード表示が少し見づらいような気がする
- テーマのコード表示は
.pug
対応していないみたい
コード表示は、いっそのこと白系をやめて黒系にすればいいのかも。
pug対応していないのはちょっと残念です。テーマで使っているのに。
個人的に困るところ
折りたたみメニューの2階層ある部分は、Chromeの拡張機能のSurfingkeysのhit-a-hintでリンクが開けない。
このテーマに限らず、高性能なテーマで使いたいと思っても、hit-a-hintで開けないというケースに遭うことがあります。
他のテーマでも、記事のリンクすらhit-a-hintで開けないものもあったりします。
メニューは、使用頻度の低いものをまとめて折りたたむことへ。
ちなみに、 画像ポップアップ表示のFancyboxで、画像の上に表示されるアイコンはf
だと反応しないですが、q
だと反応します。
インストールしたテーマフォルダがGit管理対象にならない
テーマフォルダ内にもGitファイルがあるのが原因。
テーマフォルダ内のGitのフォルダを削除してから試す。C:\tools\hexo\themes\butterfly\.git
他にも対処方法があった気がしますが、覚えていない。
Git submodulesという仕組みでいいのだろうか?
テーマ自体をカスタマイズしているので、手動で更新することにします。
テーマ設定
公式のブログに詳しく載っているので、そちらを参考でいいと思います。
- Butterfly 安裝文檔(一) 快速開始 | Butterfly
- Butterfly 安裝文檔(二) 主題頁面 | Butterfly
- Butterfly 安裝文檔(三) 主題配置-1 | Butterfly
- Butterfly 安裝文檔(四) 主題配置-2 | Butterfly
- Butterfly 安裝文檔(五) 主題問答 | Butterfly
- Butterfly 安裝文檔(六) 進階教程 | Butterfly
中国語のサイトですが、Chromeのブラウザの翻訳機能が向上した?ので、読めると思います。
前は、中国語のサイトの一部分が何故か翻訳されなくて中途半端の症状に合うことが多く、翻訳サイトに移動して翻訳していました。
このテーマのコード表示が、翻訳すると変な表示になることがあるのは変わりませんが。
テーマの_config.yml
をコピーして名前変更
C:\tools\hexo\themes\butterfly\_config.yml
をコピー > _config.butterfly.yml
へ名前変更 > C:\tools\hexo
に貼り付けしてから弄る。
言語ファイル
日本語の言語ファイル作成
C:\tools\hexo\themes\butterfly\languages\en.yml
をコピーして、ファイル名をja.yml
へ
翻訳サイトなどを参考に変更するのがいいかなと。
あえて翻訳していないものもありますし、使用していない部分は翻訳していません。
ja.yml
1 | footer: |
言語ファイル設定
C:\tools\hexo\_config.yml
11行目
1 | language: en |
下記へ
1 | language: ja |
pugカスタマイズ
投稿記事とページはtocありの2カラムで他は1カラム
C:\tools\hexo\_config.butterfly.yml
の設定だけだと、トップとarchivesの右サイドで表示するものがないときでも右サイドの見えないスペースがあり、メインコンテンツが見えないスペースがあるために中央寄せにならない。
テーマ設定ファイル確認
C:\tools\hexo\_config.butterfly.yml
150行目
1 | toc: |
post
とpage
とstyle_simple
がtrue
か確認。style_simple: true
で、投稿記事とページの右レイアウトがtocのみになる。
C:\tools\hexo\_config.butterfly.yml
218行目
1 | aside: |
上記になっているか確認。
categoriesとtagsのフロントマターに追加
1 | aside: false |
1カラムにしたいものに設定。
layout.pug変更
C:\tools\hexo\themes\butterfly\layout\includes\layout.pug
1行目
1 | - var htmlClassHideAside = theme.aside.enable && theme.aside.hide ? 'hide-aside' : '' |
下記へ
1 | - var htmlClassHideAside = theme.aside.enable && theme.aside.hide || page.aside === false || page.posts ? 'hide-aside' : '' |
htmlClassHideAside
: 右サイドで表示するものがないときは、右サイドの見えないスペースは消えて、中央寄せのレイアウトにhideAside
: 右サイドで表示するものがないときでも、右サイドの見えないスペースがあり、左寄せのレイアウトみたいにpage.posts
: サイトのindex(top)ページを示すみたい。このテーマだとarchiveも対象
更新日が投稿日よりも新しいなら更新日を表示
投稿日や更新日のどちらかを表示したり、両方を表示する事はできますが、この設定ができない。
わかりやすいと思うんですが。
Home表示
C:\tools\hexo\themes\butterfly\layout\includes\mixins\post-ui.pug
31行目
1 | if (theme.post_meta.page.date_type === 'both') |
下記へ
1 | if (article.date < article.updated) |
投稿表示
C:\tools\hexo\themes\butterfly\layout\includes\header\post-info.pug
12行目
1 | if (theme.post_meta.post.date_type === 'both') |
下記へ
1 | if (page.date < page.updated) |
ページにも日付表示して、更新日が投稿日よりも新しいなら更新日を表示
ページにも日付表示欲しい派。
C:\tools\hexo\themes\butterfly\layout\includes\header\post-info.pug
8~27行目を参考にします。
C:\tools\hexo\themes\butterfly\layout\includes\page\default-page.pug
1行目
1 | #article-container |
下記へ
1 | #article-container |
幅が狭いとき用のメニューのアバターやカテゴリなど削除
主にスマホ用メニュー用で、メニューだけにしたい。
C:\tools\hexo\themes\butterfly\layout\includes\sidebar.pug
1行目
1 | #sidebar |
下記へ
1 | #sidebar |
サイドバーを最初から表示
スクロールアイコンなどが56未満?だと表示されない。
C:\tools\hexo\themes\butterfly\source\js\main.js
317行目
1 | // 當滾動條小于 56 的時候 |
一部変更
1 | if (document.body.scrollHeight >= innerHeight) { |
サイドバーに一番下へ移動アイコン追加
画面最下部に移動するには - スクロールを制御しよう | JavaScriptレシピ集 | CookBook
一部環境では、最後へ移動はアニメーション移動ではなくアニメーションなしの移動になると思いますが、これでいいことにします。
C:\tools\hexo\themes\butterfly\layout\includes\rightside.pug
最後に追加
1 | button#go-bottom(type="button" title=_p("rightside.go_to_buttom")) |
C:\tools\hexo\themes\butterfly\source\js\main.js
543行目
1 | scrollToTop: () => { // Back to top |
下記へ
1 | scrollToTop: () => { // Back to top |
C:\tools\hexo\themes\butterfly\source\js\main.js
571行目
1 | case 'go-up': |
下記へ
1 | case 'go-up': |
C:\tools\hexo\themes\butterfly\languages\ja.yml
102行目 追加
ja.ymlには、日本語の言語ファイル作成で追加してあるので確認。
1 | go_to_buttom: 最後へ |
jsカスタマイズ
Algoliaの検索結果の本文文字数を変更
C:\tools\hexo\themes\butterfly\source\js\search\algolia.js
50行目
1 | const cutContent = content => { |
下記へ
1 | const cutContent = content => { |
PCで本文が3行表示されていましたが、1~2行ぐらいでいいかなと。
検索結果をスクロールした後にページ移動するとスクロールしたままのページ移動になるので、次に表示される検索結果がスクロール後の途中からの表示になってしまいます。
検索結果数は78行目で5件に設定されていますが、上記のスクロール問題があるので下手に増減すると使いづらいです。
stylカスタマイズ
自分用のstyl作成
C:\tools\hexo\themes\butterfly\source\css\index.styl
最後に追加
1 | @import '_my/*' |
C:\tools\hexo\themes\butterfly\source\css\_my\my-style.styl
を作成して、ここに自分用設定を追加していく
css2stylus - tool - html5beta.com
CSSをStylusに変換できるツール
my-style.styl
よくわかっていないので、CSSみたいに記載しています。
Stylusは、CSSみたいな書き方でもSassのような省略形でもかけるのがありがたい。
my-style.styl
現時点のプラグインの問題
hexo-generator-feed
GitHub - hexojs/hexo-generator-feed: Feed generator for Hexo.
ローカルのfeed表示は文字化けするが、Netlifyでデブロイ後のサイトのfeed表示は文字化けしない。
まとめ
Hexoの5以降にしっかり対応しているテーマは少ないですし、個人的には、Surfingkeysのhit-a-hintでリンクがうまく開けないテーマに遭うことも多く、選択肢は少ないです。f
の単体リンクは機能してもcf
の複数リンクを開くが機能しないパターンもよくあります。
このテーマは折りたたみメニューの2階層目がある部分が開けないだけなので、影響は少ないですが面倒です。
幅が狭いとき用のメニューは開けるという。マウスをフォーカスして自動で開かれるのが駄目みたい。
高性能なテーマで、_config.butterfly.yml
だけで色々と設定できるのはありがたいのですが、使用頻度が低そうな機能も多い印象です。
それでも、他のテーマよりはやれることが多くて優秀だと思います。
テーマの更新は続きそうなので、今後さらに便利になるのを期待します。
追記
2021-11-07
- 特徴 変更
2021-11-08
- テーマ設定
- テーマの
_config.yml
をコピーして名前変更 追加
- テーマの
2021-11-11
- stylカスタマイズ
- my-style.styl Gist表示へ 変更
2021-12-15
- 環境
- Node.js 16.13.1へ
- インストールしたテーマフォルダがGit対象にならない 追加
2022-02-02
4.0系で変わったので変更
- 環境
- Node.js 16.13.2へ
- Hexo 5.4.1へ
- Butterfly 4.0.1へ
- 特徴 変更
- 日本語の言語ファイル
- 言語ファイル作成 変更
- インストールしたテーマフォルダがGit対象にならない > インストールしたテーマフォルダがGit管理対象にならない 変更
- pugカスタマイズ
- 投稿記事のみtocありの2カラムで他は1カラム > 投稿記事とページはtocありの2カラムで他は1カラム 変更
- 更新日が投稿日よりも新しいなら更新日を表示 変更
- ページにも日付表示して、更新日が投稿日よりも新しいなら更新日を表示 変更
- 幅が狭いとき用のメニューのアバターやカテゴリなど削除 変更
- サイドバーを最初から表示 変更
- サイドバーの設定アニメーションアイコンを普通のアイコンへ 削除
- サイドバーに一番下へ移動アイコン追加 変更
- jsカスタマイズ
- cover設定していないのに画像が表示されるのを非表示へ 変更
- 現時点のプラグインの問題 追加
2022-02-14
- pugカスタマイズ
- サイドバーに一番下へ移動アイコン追加 変更
2022-02-16
- 環境
- Node.js 16.14.0へ
- Butterfly 4.1.0へ
- 日本語の言語ファイル
- 言語ファイル作成 変更
- pugカスタマイズ
- サイドバーに一番下へ移動アイコン追加 変更
2022-04-03
- 環境
- Node.js 16.14.2へ
- Hexo 6.1.0へ
- 現時点のプラグインの問題 変更
2022-05-28
- 環境
- Node.js 16.15.0へ
- Hexo 6.2.0へ
- 現時点のプラグインの問題
- hexo-algoliasearch 変更
2022-07-02
- 環境
- Node.js 16.15.1へ
- Butterfly 4.3.1へ
- jsカスタマイズ
- Algoliaの検索結果の本文文字数を変更 追加
- 現時点のプラグインの問題
- hexo-algoliasearch 削除
2022-07-07
- pugカスタマイズ
- 投稿記事とページはtocありの2カラムで他は1カラム 変更
- 幅が狭いとき用のメニューのアバターやカテゴリなど削除 変更
2022-11-09
- 環境
- Node.js 18.12.1へ
- Hexo 6.3.0へ
- Butterfly 4.5.1へ
- インストールしたテーマフォルダがGit管理対象にならない 変更
- pugカスタマイズ
- 投稿記事とページはtocありの2カラムで他は1カラム 変更
2023-01-27
- 環境
- Node.js 18.13.0へ
- Butterfly 4.6.1へ
- 日本語の言語ファイル > 言語ファイルへ
- 言語ファイル作成 > 日本語の言語ファイル作成へ
- jsカスタマイズ
- cover設定していないのに画像が表示されるのを非表示へ 削除
2023-05-03
- 環境
- Node.js 18.16.0へ
- Butterfly 4.8.1へ
- 個人的に困るところ 変更
- 言語ファイル
- 日本語の言語ファイル作成 変更