なんとなくこのブログのシンタックスハイライトのデザインを変えたいなぁと思って、せっかくだからブログのテーマごと変更するかーってテーマストアを眺めてたら、自分で自分が好きな感じのテーマを作ってみるのも面白い・・・か、と思ったのでやってみた。
PC
スマホ
わりと気に入っている。
コード
たまに間違えて上書きして消してしまったりするので、念のためGitHubに置いといた。
https://github.com/bufferings/hatenablog-my-theme
自分が使ってる機能だけ対応
はてなブログにはいろんな機能や設定があるけど、それを全部サポートするのは僕には無理なので、自分が使ってる機能だけに絞って対応した。ブログのコメント機能とか、はてなのキーワード機能とかはオフにしてるから対応してない。CSSにはボイラープレートのままのコードがあるだけ。
細かいことは気にしない
自分が見た目を気に入ればいいやという気持ちでCSSを直接ごにょごにょしながら作った。中で float:left
を使おうと !important
を使おうと、共通の色を変数化してなかろうと問題ない!動けばよかろうなのだー!
レスポンシブ対応
レスポンシブ対応で作った。PC用とスマホ用を別々に作るの無理だと思ったので。
コードのシンタックスハイライト
これがいちばん対応したかったやつ。もともとは highlight.js でごにょごにょしてたので、今回は Prism を使ってみようと思って↓こちらのブログを参考に設定した。感謝。
CSSには、TOMORROW NIGHTを選んだ。何日か前に書いたTypeScriptのコードはこんな感じにハイライトされるようになった。満足。
type A = Extract<MyUnion, { tag: "a" | "b" }> type cases = [ Expect<Equal<A, { tag: "a" | "b", value: boolean }>>, ]
ちょこっと触ったところ
参考にした記事にも書かれているとおり、はてなのCSSが !important
でシンタックスハイライトの色付けをしてるので、それを上書きしないといけない。だからCSSをダウンロードしたあとに、色関係は !important
してる。
はみ出した部分
はてなのCSSでは、preタグではみ出した部分は三点リーダーにするようになってるのでアンセットしといた。ついでにフォントはちょこっと小さくしといた。
/* 追加 */ text-overflow: unset; font-size: 0.8em;
code
要素を足しといた
pre
の中に code
がある方がいいかなと思ったので、なんとなく足しといた。
document.addEventListener("DOMContentLoaded", (event) => { document.querySelectorAll("pre.code").forEach((pre) => { const code = document.createElement('code'); code.textContent = pre.textContent; code.className = `code language-${pre.getAttribute('data-lang')}`; pre.innerText = ''; pre.appendChild(code); window.Prism.highlightElement(pre); }); });
思い出した
そうだ。TypeScriptで調べたことをブログに書こうとして、あぁシンタックスハイライト変えたいなぁってなったんだった。調べたことは今度書こう。忘れる前に。
まぁでも面白かった!