Post

Astro Starlightでトップページに検索バーを表示する

Astro Starlightでトップページに検索バーを表示する

トップページに検索バーを表示する。

search-bar

Starlightの検索機能

StarlightはデフォルトでPagefindを使用している。そのため、PagefindのUIを設置することで簡単に検索バーを設定できる。

カスタムトップページの作成

まずはカスタムのトップページを作成する。 src/pages/index.astro を作成し、ドキュメントを参考に構築する。

src/pages/index.astro 1:

1
2
3
4
5
6
---
import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro";
---

<StarlightPage frontmatter={{ title: "Welcome to Study Astro", template: "doc" }}>
</StarlightPage>

検索バーを追加し色を指定する

ベースができたのでPagefindのドキュメントを参考に検索バーを追加する。また、Starlightのソースから配色を流用する。Starlightの配色をそのまま利用することで違和感なく表示でき、ライトモード/ダークモードの切り替えにも対応できる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
---
import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro";
---

<StarlightPage frontmatter={{ title: "Welcome to Study Astro", template: "doc" }}>
  <!-- search box -->
  <div id="toppage-search" class="search"></div>
</StarlightPage>


<link href="/study-astro/pagefind/pagefind-ui.css" rel="stylesheet">
<script is:inline src="/study-astro/pagefind/pagefind-ui.js"></script>
<script is:inline>
  if (window.PagefindUI) {
    window.addEventListener('DOMContentLoaded', (event) => {
      new PagefindUI({ element: "#toppage-search", showSubResults: true });
    });
  }
</script>

<style>
#toppage-search {
  --pagefind-ui-primary: var(--sl-color-text);
  --pagefind-ui-text: var(--sl-color-gray-2);
  --pagefind-ui-font: var(--__sl-font);
  --pagefind-ui-background: var(--sl-color-black);
  --pagefind-ui-border: var(--sl-color-gray-5);
  --pagefind-ui-border-width: 1px;
  --pagefind-ui-tag: var(--sl-color-gray-5);
  --sl-search-cancel-space: 5rem;
}
</style>

GitHub

実際のコードは以下にある。

  1. シンタックスハイライトは jsx としたが、実際は .astro ファイルである。 ↩︎

This post is licensed under CC BY 4.0 by the author.