コンテンツにスキップ

レイアウトユーティリティ

Hypermedia Components は、hc.utilities カスケードレイヤーにひと握りの レイアウトユーティリティを同梱しています。これらはシステムの残り — hc-shell アプリケーション シェルを含む — が依存するレスポンシブな構成部品です。

意図的に少数でセマンティックです。これはユーティリティファーストの フレームワークではありません: クラス名にばらまかれたスペーシング スケールも、md: / lg: ブレークポイントプレフィックスもありません。 各ユーティリティは本質的にレスポンシブです — flex-wrap、グリッドの auto-fill、コンテンツベースのフレックス比によって与えられたスペースに 適応し、メディアクエリなし。同じクラスがフルページでも、ダイアログ でも、カードでも、サイドバーでも正しく振る舞います。ビューポートではなく コンテナに応答するからです。

ユーティリティはフルスタイルシートに含まれています。粒度の細かい構成 では、コアの上にこのレイヤーだけをインポートします:

import '@hypermedia-components/core/css/core'; // tokens + base
import '@hypermedia-components/core/css/utilities'; // this layer

最後のカスケードレイヤーにあるため、あなたのアプリケーション CSS は 詳細度の戦いなしにこれらを上書きできます。

各ユーティリティは、トークンベースのフォールバックを持つ 1〜2 個の ローカルカスタムプロパティを公開します。インラインまたはラッパーの ルールで設定してください — 要素ごとのバリアントクラスを追加しては いけません:

<ul class="hc-cluster" style="--hc-cluster-gap: var(--hc-space-4)"></ul>

子要素を一定の間隔で縦一列に並べます。ノブ: --hc-stack-gap (デフォルト --hc-space-3)。

First
Second
Third

余地がなくなると折り返す横並びグループ — ボタン行、タグリスト、メタ バー、ツールバー。ノブ: --hc-cluster-gap(デフォルト --hc-space-2)、 --hc-cluster-align(デフォルト center)。

.hc-grid — レスポンシブグリッド

Section titled “.hc-grid — レスポンシブグリッド”

最小トラック幅で収まるだけ等幅カラムを並べ、収まらなくなったら折り 返します — ブレークポイントなし。ノブ: --hc-grid-min(デフォルト 16rem)、--hc-grid-gap(デフォルト --hc-space-4)。組み込みの min(…, 100%) ガードが、広いトラックが狭いコンテナからあふれるのを 防ぎます。

A
B
C
D
E
F

空のトラックを残す代わりに少数のアイテムを行いっぱいに伸ばしたい ときは、(grid-template-columns を自分で設定して)auto-fillauto-fit に替えてください。

フォーム向け: data-align="start"data-span="full"

Section titled “フォーム向け: data-align="start" と data-span="full"”

高さの揃ったカードには既定の stretch が合います。フォームには合いま せん。1 行の入力の隣に 3 行のテキストエリアがあると、隣が縦長の空箱に 引き伸ばされます。2 つのオプトインで解決します。

<div class="hc-grid" data-align="start" style="--hc-grid-min: 18rem;">
<div class="hc-field"></div>
<!-- トラック数によらず 1 行を占有する -->
<div class="hc-field" data-span="full">
<label class="hc-field__label" for="notes">Notes</label>
<textarea class="hc-input" id="notes" rows="3"></textarea>
</div>
</div>
  • data-align="start"(グリッド側)— アイテムは伸びずに行の上端に 揃います。高さの揃ったカードもこのグリッドの主な用途なので、 オプトインです。
  • data-span="full"(アイテム側)— 1 行を占有します。auto-fill ではどのアイテムが隣り合うかが幅で変わるため、同じ行を共有しては 困るもの(テキストエリア、日付範囲、ラジオ群)は、特定の幅でしか 成立しない組み合わせに頼らず自分で宣言します。

.hc-container — 中央寄せのコンテンツ領域

Section titled “.hc-container — 中央寄せのコンテンツ領域”

最大行長とインラインパディングを持つ中央寄せカラム。ノブ: --hc-container-max(デフォルト 72rem)、--hc-container-pad (デフォルト --hc-space-4)。

<div class="hc-container">
<!-- page content, capped and centred -->
</div>

.hc-sidebar — サイドバー + メイン

Section titled “.hc-sidebar — サイドバー + メイン”

最初の子がサイドバー、2 番目がメイン領域の 2 部レイアウト。メイン 領域は最小幅を保ち、保てなくなるとサイドバーが自分の行に折り返します。 純粋なフレックスボックスなので、コンテナ幅で再配置します — 狭い パネルの中に置けばそこで畳まれ、ビューポートメディアクエリは不要です。 ノブ: --hc-sidebar-width(デフォルト 16rem)、 --hc-sidebar-content-min(デフォルト 60%)、--hc-sidebar-gap (デフォルト --hc-space-4)。

Main content area that keeps its width and wraps the sidebar when space runs out.

全高のアプリ画面が必ず必要とし、そして最も間違えやすい組み立てです。 固定の領域が並ぶページカラムがあり、その残りを1 つの領域が取って、 スクロールするのはその中身だけ、という形。

<div class="page"> <!-- flex 縦並び、両軸の最小値 0 -->
…タイトル・ツールバー…
<form class="hc-fill"> <!-- 経路上のすべての要素に -->
<div class="hc-datagrid hc-fill"></div>
</form>
</div>

.hc-filldisplay: flex; flex: 1; flex-direction: column両軸の最小値を足したものです。どちらも効いています。

  • min-block-size: 0 を落とすと領域が中身の高さまで伸び、ページが スクロールして固定していたクロームが流れます。
  • min-inline-size: 0 を落とすと、幅の広い子(max-content の表)が 祖先をのスクロールポートにし、クロームを横に引きずります。

カラムと埋める領域の間のすべての要素に付けてください。包んでいる <form> も含みます。hc-datagrid に付けた場合は --hc-datagrid-max-height を既定の 70vh(スクロール するページのにあるグリッドに正しい値)から 100%(グリッド自身が ページである場合に正しい値)へ切り替えます。

支援技術には利用可能なまま、視覚的なレイアウトから取り除かれる コンテンツ — スキップリンク、アイコンのみコントロールのラベル。 .hc-hidden と違い、アクセシビリティツリーには残ります。

<button class="hc-button" type="button">
<svg aria-hidden="true"></svg>
<span class="hc-sr-only">Delete</span>
</button>

display: none !important。レイヤー順によりコンポーネントのルールに 勝ち、!important はレイヤー外のアプリケーション CSS やインラインの display にも勝ちます。サーバから(クラスを出し入れして)、または htmx から、インラインスタイルなしで表示を切り替えるのに使います。

<div class="hc-hidden">Removed from layout entirely</div>

font-variant-numeric: tabular-nums を、アプリ所有の数値表示面 — stat タイル、KPI 値、カウンタ — に与えるユーティリティです。キットの コンポーネントでデフォルト化済みの場所(テーブル / データグリッドの セル、フォームコントロール、カレンダーの日付、ページネーション、 バッジ、タイムラインのタイムスタンプ)の外側で使います。数字の幅が 均一になるので値が揃い、更新時にガタつきません。テキストには影響 しません。グリフのみ — 揃えは文脈の仕事です。

<p>
<span class="hc-numeric">42,195</span> rows scanned
</p>
  • レスポンシブデザイン — これらのプリミティブが実装するコンテナファースト戦略。
  • トークン — 各 gap の デフォルトである --hc-space-* スケール。
  • hc-shell — これらの プリミティブの上に構築されたアプリケーションシェル。