UI コンポーネント

ページで使う基本的なUI部品をまとめたページです。ボタン・アラート・アコーディオン・タブ・モーダルなどを扱います。

コンポーネント一覧は Gallery インデックス をご覧ください。

Basic UI

ページで最もよく使う基本パーツです。 ボタン(button)はクリック操作を受け付け、 アラート(alert)は注意・お知らせを目立たせ、 バッジ(badge)はカテゴリやタグを小さく表示します。

Primary Secondary Icon Button Link Button
Block Button (全幅)

Loading State(非同期処理)

loading 属性を付けるとスピナーが表示され、ボタンが押せなくなります。API通信中などにJSで制御します。

クリックで疑似通信(2秒) 常にローディング
<hl-button>Primary</hl-button> <hl-button variant="secondary">Secondary</hl-button> <hl-button icon="">Icon Button</hl-button> <hl-button href="https://5gkyu.github.io/" target="_blank">Link Button</hl-button> <hl-button block>Block Button (全幅)</hl-button> <hl-button loading>通信中</hl-button>
Info: 基本的な補足情報やヒントはこちらを使います。(デフォルト) Warning: 注意やエラー表示はこちらを使います。 Success: 完了・成功のフィードバックはこちらを使います。 <!-- type 属性でアイコン・カラーが変わる --> <hl-alert>情報・ヒント(info:デフォルト)</hl-alert> <hl-alert type="warning">注意・警告</hl-alert> <hl-alert type="success">完了・成功</hl-alert>
<div class="hl-tags-wrapper"> <a href="#" class="hl-badge">Webツール</a> <a href="#" class="hl-badge">デザイン</a> <a href="#" class="hl-badge">ゲーム</a> </div>

インラインテキストのリンクスタイルです。color: var(--clr-dusty-blue) で表示され、ホバー時に var(--clr-peach) へ変化します。

通常のリンク太字リンク・ テキストの中のインラインリンクとして使います。

<!-- クラスを付けるだけ --> <a href="/about/" class="hl-link">アバウトページ</a> <!-- 文中に埋め込む例 --> <p class="hl-content-text"> 詳しくは<a href="#" class="hl-link">こちら</a>をご覧ください。 </p>
Interactive

クリックすることでページが変化するUI部品です。 アコーディオンは長いコンテンツを折りたたんでスッキリ見せ、 タブは複数の内容を切り替えて表示するときに使います。

クリックで開閉するコンテンツです。FAQ・コード表示などに使います。 複数並べても独立して開閉できます。 <hl-accordion title="アコーディオンその1"> クリックで開閉するコンテンツです。FAQ・コード表示などに使います。 </hl-accordion> <hl-accordion title="アコーディオンその2"> 複数並べても独立して開閉できます。 </hl-accordion>

このコンポーネント自体が hl-tabs のデモです。
子要素の .hl-tab-paneldata-label を指定するとタブが自動生成されます。

<hl-tabs> <div class="hl-tab-panel" data-label="タブA"> 内容A </div> <div class="hl-tab-panel" data-label="タブB"> 内容B </div> </hl-tabs>
Overlays

ページの上に重ねて表示するUIパーツです。 トーストは短時間表示されるポップアップ通知、 モーダルは確認ダイアログや詳細情報の表示に使います。

画面右下から現れる一時的な通知です。JSの HlToast.show() で呼び出します。

成功を通知 警告を通知
<hl-button onclick="HlToast.show('保存しました')">成功を通知</hl-button> <hl-button variant="secondary" onclick="HlToast.show('エラーです', 'warning')">警告を通知</hl-button> /* JS API */ HlToast.show('保存しました'); HlToast.show('エラーです', 'warning');

画面中央に浮かび上がるダイアログです。

モーダルを開く <hl-button onclick="document.getElementById('demo-modal').open()"> モーダルを開く </hl-button> <hl-modal id="demo-modal" title="Halcyon Modal"> <p>これはモーダルダイアログのデモです。オーバーレイクリックまたはボタンで閉じます。</p> <div style="margin-top: 2rem; text-align: right;"> <hl-button onclick="document.getElementById('demo-modal').close()">閉じる</hl-button> </div> </hl-modal>

これはモーダルダイアログのデモです。オーバーレイクリックまたはボタンで閉じます。

閉じる
Interaction

ホバー・クリックに応じた細かなUI挙動を実現するパーツです。 ツールチップはホバー時にヒント文を表示、 ポップオーバーはクリック時に小さなパネルを表示、 ドロワーは画面側面からスライドインするサイドパネルです。

ホバー(またはフォーカス)でヒントを表示します。

公式サイトへ 必須 フォント情報
<!-- 子要素がトリガー、tip属性がツールチップのテキスト --> <hl-tooltip tip="5Gkyuの公式サイトを開きます"> <hl-button>公式サイトへ</hl-button> </hl-tooltip> <hl-tooltip tip="必須項目です"> <span class="hl-label__required">必須</span> </hl-tooltip>

ボタンクリックで吹き出しパネルを表示します。外側クリックで閉じます。

アクション

<!-- label属性がトリガーボタンのラベル、子要素がパネル内容 --> <hl-popover label="オプション"> <p style="font-weight: 700; margin: 0 0 0.5rem; font-size: 0.85rem;">アクション</p> <ul style="margin: 0; padding: 0; list-style: none;"> <li><a href="#" class="hl-link">編集する</a></li> <li><a href="#" class="hl-link">複製する</a></li> </ul> </hl-popover>

右側からスライドインするサイドパネルです。open() / close() で制御します。ESCキーでも閉じられます。

ドロワーを開く <hl-button onclick="document.getElementById('demo-drawer').open()"> ドロワーを開く </hl-button> <hl-drawer id="demo-drawer" title="設定"> <p>ドロワーの内容</p> <hl-toggle name="setting1" label="通知をオンにする" checked></hl-toggle> </hl-drawer>

ドロワーのデモです。各種設定をここに並べられます。

保存して閉じる
Utility

その他の場所で必要な小さな要素です。 ディバイダーは置くだけで区切り線、 アバターはユーザーアイコン・画像の丸サムネイル、 チップはタグ・ラベル的な小さな要素です。

デフォルト(ラベルなし)

ラベル付き

OR

破線(dashed)

Section

太線(bold)

<hl-divider></hl-divider> <hl-divider>OR</hl-divider> <hl-divider variant="dashed">Section</hl-divider> <hl-divider variant="bold"></hl-divider> <!-- variant: dashed | bold -->

サイズバリエーション

画像(直接パス指定) / スクエア / グループ

src 属性に画像URL・パスを直接指定できます。画像は中央切り抜き(object-fit: cover)で表示されます。 <!-- テキストアバター --> <hl-avatar label="5G" size="md"></hl-avatar> <!-- 画像アバター(src属性に直接パス指定・中央切り抜き)--> <hl-avatar src="/images/chara.png" label="名前" size="lg"></hl-avatar> <hl-avatar src="https://example.com/avatar.png" label="名前" size="md"></hl-avatar> <!-- スクエア --> <hl-avatar src="/images/chara.png" label="名前" size="xl" square></hl-avatar> <!-- グループ(親に .hl-avatar-group を付ける) --> <div class="hl-avatar-group"> <hl-avatar label="A" size="md"></hl-avatar> <hl-avatar label="B" size="md"></hl-avatar> </div> <!-- size: sm | md | lg | xl -->

カラーバリエーション

デフォルト ピーチ ブルー

削除可能(removable)—クリックで消えます

Vue React Svelte Vanilla JS
<div class="hl-chip-list"> <hl-chip>デフォルト</hl-chip> <hl-chip color="peach">ピーチ</hl-chip> <hl-chip color="blue">ブルー</hl-chip> </div> <!-- removable: ボタンで削除、hl-chip-remove イベント発火 --> <hl-chip value="Vue" removable>Vue</hl-chip> <!-- color: (none) | peach | blue -->

スクロールして画面に入った瞬間にふわっと読み込まれる「遅延読み込み(Blur-Up)」画像コンポーネントです。
親要素の枠(サイズや角丸)に合わせて綺麗に収まります。ページ初期表示の高速化に貢献します。

<!-- 外側にサイズと角丸を決める枠(div等)を作ります --> <div style="width: 100%; aspect-ratio: 16/9; border-radius: 16px;"> <!-- src: 本画像 / placeholder: 軽量なぼかし画像(省略時は透明) --> <hl-image src="high-res.jpg" placeholder="low-res.jpg" alt="風景"> </hl-image> </div>
Mobile

モバイルに最適化されたコンポーネントです。 hl-app-sheetはサイドバーなどのコンテンツをモバイルでボトムシートとして表示するコンポーネントです。

モバイル画面幅(≦860px)でのみ動作するライブデモです。 このページのサイドバーコンテンツに実際にhl-app-sheetを適用済みです。 画面幅を級めるか、スマホで開くとヘッダー左に︎ボタンが現れます。

コンテンツを<hl-app-sheet>で包むだけで、モバイルで自動ボトムシート化されます。 PC(≧861px)ではdisplay: contentsの透明なラッパーになり、ベインのレイアウトに影響しません。

サイドバーやフィルターパネルなど、モバイルでボトムシートにしたいコンテンツをhl-app-sheetで包みます。 画面幅が860px以下になると、ヘッダー左に︎ボタンが表れます。タップするとコンテンツが画面下部からスライドインします。 ESCキーまたはシート外のオーバーレイエリアをタップするとボトムシートが閉じます。 <!-- aside のサイドバーコンテンツを hl-app-sheet で包む例 --> <aside class="hl-layout-sidebar"> <hl-app-sheet label="サイドバー"> <div class="sidebar-sticky"> <hl-profile></hl-profile> <hl-toc></hl-toc> </div> </hl-app-sheet> </aside> <!-- PC(≧861px): display:contents で透明なラッパーになり、レイアウトに影響なし --> <!-- Mobile(≦860px): ヘッダーに︎ボタンが生成され、タップでボトムシートとして開く --> <!-- label 属性: ︎ボタンの aria-label(省略可) -->