[[Obsidianの外観に求めること]] の要件を満たすテーマがなかなか見つからないため、CSSスニペットを構築することにした。
> [!warning]
> 私は **CSS に詳しくない** ため、誤りが含まれる可能性があります。
> [!note]
> ここに掲載している CSS は、Publish で使っているものとは異なります。
## Obsidian CSS きそちしき
まず基本的なところからざっくり調べてみる。
### CSS変数
Obsidian には、見た目をカスタマイズするための「CSS変数(バリアブル)」が多数存在する。
現在の Obsidian は、できるだけ変数を使うことが推奨されているらしい。
詳しくは [Obsidian Docs](https://docs.obsidian.md/) を参照した方がいい。
> [!note] CSS変数とは
> `--` から始まるやつ。[モジラのドキュメント](https://developer.mozilla.org/ja/docs/Web/CSS/Guides/Cascading_variables/Using_custom_properties) にそう書いてあった。
### セレクター
スタイル設定したい要素やクラスを指定するためのもの。
要素やクラスを指定するセレクターは多数存在するが、これは Obsidian 公式ドキュメントは無いっぽい?
開発者ツールやリファレンスでよくチェックした方がいい。
セレクターの基本 ⇒ [基本的な CSS セレクター - ウェブ開発の学習 - MDN](https://developer.mozilla.org/ja/docs/Learn_web_development/Core/Styling_basics/Basic_selectors)
#### Obsidian でよく使われるセレクターの例
- `.theme-light`, `.theme-dark`: ライトテーマとダークテーマ
- `.HyperMD-header-1`
- `.markdown-preview-view`
### 要素とクラスの違い
要素はHTMLのタグ名そのものを指す。
クラスは、要素を任意の名前でグループ化したやつの事を言う。
#### セレクターでの指定方法の違い
- **要素:** HTML要素名(タグ名)をそのまま記述する。例: `p {}`
- **クラス:** 先頭にドットを付ける。例: `.text-red {}`
- この二つは組み合わせられて、AND条件で指定ができる。例: `p.highlight {}`
- 複数の要素やクラスをまとめて指定もできる。カンマで区切るとOR指定になる。例: `h1, h2, .main-title {}`
- ○○の中(子) を指定する場合は、 `親 子` のようにスペースで区切る。例: `.markdown-rendered h1 {}`
- ○○直属の子、を指定する場合は、スペースではなく `>` で区切る必要がある。
## 作ったもの
[[Alternative Checkboxes]] 以外は対応できた。
Alternative Checkboxes は自力で実装が難しいので、既製品をありがたく使わせていただく。
⇒ [GitHub - damiankorcz/Alternative-Checkboxes-Reference-Set](https://github.com/damiankorcz/Alternative-Checkboxes-Reference-Set)
`MyCustom.css`
```css
/**
* 自分用 Obsidian 外観のカスタマイズ
* 2026-09-07
*/
/**
* イタリック体を若干薄くする。
*/
.theme-light,
.theme-dark {
--italic-color: var(--text-muted);
}
/**
* Web参照している画像を見分けられるようにする。
* ローカル画像はそのまま表示し、Web画像は点線で囲む。
*
* PC版は直接画像ファイル名が指定されてるので「`http` で始まってない」で判別できるが
* Android は `http://localhost` 指定でアクセスしてるっぽいので、
* 明示的に弾く必要がある。
*
* iOS は。。。分かりません (^q^)
*/
.image-embed img[src^="http"]:not([src*="localhost"]),
.markdown-reading-view img[src^="http"]:not([src*="localhost"]) {
outline: 3px dashed dodgerblue;
}
/**
* 見出しの色と大きさを調整する。
* (面倒なので、普段使いのライトテーマのみ)
*/
.theme-light {
--h2-size: 1.5rem;
--h3-size: 1.3rem;
--h3-color: dodgerblue;
--h4-size: 1.1rem;
--h4-color: orange;
--h5-size: 1.0rem;
--h5-color: gray;
--h6-size: 1.0rem;
--h6-color: lightgray;
}
/**
* チェックボックスのカスタマイズ (完了時の見た目をカスタマイズ)
*/
.theme-light,
.theme-dark {
/* チェック済ボックスに取り消し線を引かない */
--checklist-done-decoration: none;
/* チェック済ボックスの文字を薄くする (Thingsと同じカスタマイズ) */
--checklist-done-color: var(--text-faint);
}
/**
* 見出しボーダー (変数が無いのでCSSで直接指定)
*/
.theme-light .HyperMD-header-1,
.theme-light .markdown-preview-view h1 {
border-bottom: solid 1px var(--text-normal);
}
.theme-light .HyperMD-header-2,
.theme-light .markdown-preview-view h2 {
border-bottom: solid 1px var(--text-faint);
}
/**
* Android 版 Obsidian で太字が反映されない問題への対処。
* デフォルトの太さ指定をさらに太くすることで解決してるっぽい?
* 参考: https://qiita.com/WadaTech/items/0a09f578b78f9e18e85a
*/
body {
--bold-modifier: 300;
}
/**
* Publish用カスタマイズ
* `publish` プロパティが `true` の時だけ、背景に色を付ける。
* (一目で公開ノートだと分かるように)
*
* 既知の問題
* `publish` = `true` のノートを埋め込むと、
* 埋め込み先のノートにまで適用されてしまう。
*/
.workspace-leaf:has(.metadata-property[data-property-key="publish"] input[type="checkbox"]:checked) .cm-scroller,
.workspace-leaf:has(.metadata-property[data-property-key="publish"] input[type="checkbox"]:checked) .markdown-reading-view .markdown-preview-view {
background-color: color-mix(in srgb, var(--color-accent), var(--background-primary) 95%);
}
/**
* 代替チェックボックス (Alternate Checkboxes) 対応
* …したかったが、結構長めのCSSを書かないといけないらしいので、既製品を使って対応する。
* これがシンプルで良さそう
* ⇒ https://github.com/damiankorcz/Alternative-Checkboxes-Reference-Set
*/
```
## 参考に見た資料など
- [Build a theme - Developer Documentation](https://docs.obsidian.md/Themes/App+themes/Build+a+theme)
- [カスタム CSS スニペットでデザインしよう - Obsidian.Zenn](https://zenn.dev/estra/books/obsidian-dot-zenn/viewer/b-oz-css-snippets)
- [【Android】Obsidianで日本語が太文字にならない件の解決策 - Qiita](https://qiita.com/WadaTech/items/0a09f578b78f9e18e85a)