Aspect ratio
メディアの読み込み前も形を保ち、読み込み中はシマー表示になり、メディアをフェードインさせ、失敗時はフォールバックを表示するボックスです。
pnpm dlx shadcn@latest add https://hextaui.com/r/aspect-ratio.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/aspect-ratio.tsx components/ui/skeleton.tsx インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
比率
ratio には、数値、"w/h" 形式の文字列、または "w:h" 形式の文字列を指定できます。
読み込みが遅い場合
画像が届くまでボックスは形を保ったままシマーが表示され、届くと画像がフェードインするため、下のコンテンツは動きません。Reload を押すともう一度確認できます。
壊れた画像
画像の読み込みに失敗すると、ブラウザの壊れた画像のグリフが隠れ、代わりにフォールバックのアイコンが表示されます。置き換えるには fallback を渡し、何も表示しない場合は fallback={null} を指定します。
オーバーレイ
絶対配置された子要素は、メディアの上に重なります。ボックスは何もクリップしないため、オーバーレイ上のリンクのフォーカスリングも表示されたままです。
プレースホルダーなし
placeholder={false} は、読み込み中のシマー、フェードイン、フォールバックを無効にし、shadcn の標準的な動作にします。
レスポンシブ
aspect クラスでブレークポイントごとに比率を上書きできます。この例は、小さい画面では正方形で、md 以上では md:aspect-video になります。
中央揃えの flex カラム内
ボックスはデフォルトで全幅のため、親が子要素を中央揃えにしていても、幅が 0 に潰れず列いっぱいに広がります。
テキストコンテンツ
メディア以外の子要素にはボックスだけが適用され、それ以外は何も適用されません。位置は自分で指定してください。
figure として使う
キャプションは、比率が変わらないようボックスの外に置きます。
無効な比率
0、負の数、解析できない文字列は正方形にフォールバックし、開発中は警告をログに出力します。
右から左
start-3 のような論理プロパティで配置したオーバーレイは、読む方向に従います。
- メディアの読み込み中、ボックスは
aria-busyになります。 - フォールバックは装飾であり、支援技術からは隠されます。画像の読み込みに失敗しても
altテキストは利用できるため、必ず記述してください。 - モーションの低減が有効な場合、メディアはフェードなしで表示されます。
レンダリングする要素の属性をすべて受け付けます。直下に置いたメディア(<img>、<picture>、<video>)は、object-cover でボックスを埋め、角丸を引き継ぎます。
| プロパティ | 型 | デフォルト |
|---|---|---|
ratio | number | `${number}/${number}` | `${number}:${number}` | 1 |
placeholderメディアの読み込み中はシマーを、失敗時はフォールバックを表示します。 | boolean | true |
fallbackメディアの読み込みに失敗したときに表示されます。null を指定すると何も表示しません。 | ReactNode | <IconPhotoOff /> |
render | ReactElement | (props, state) => ReactElement | <div> |
| 属性 | 説明 |
|---|---|
data-slot="aspect-ratio" | CSS でボックスを指定します。 |
data-state | loading、loaded、error のいずれか。placeholder が有効で、ボックスにメディアが含まれている場合にのみ設定されます。 |
aria-busy | メディアの読み込み中、付与されます。 |
--ratio | 数値として解析された比率。 |
data-slot="aspect-ratio-placeholder" | 読み込み中またはエラー後に表示されるシマー。 |
data-slot="aspect-ratio-fallback" | フォールバックを囲むラッパー。 |
parseAspectRatio(ratio) は、受け付ける任意の比率を数値に変換し、失敗した場合は 1 にフォールバックします。他の要素にも同じ方法でサイズを与えるのに使えます。AspectRatioValue と AspectRatioProps の型もエクスポートされています。
- Skeleton150ms待ってから表示され、包んだコンテンツと同じサイズになり、何も動かさずにコンテンツをフェードインさせるプレースホルダーです。
- Accordionそれぞれがパネルを表示する見出しの積み重ねです。途中で反転できる高さのモーションを持ち、閉じている間もパネルの内容を検索できます。
- Carouselネイティブのスクロールスナップによるスライドです。タッチでの慣性、マウスドラッグ、矢印キー、ドット、サムネイル、適切なタイミングで一時停止する自動再生に対応します。
- Collapsible高さのモーションで表示と非表示を切り替えるパネルです。途中で反転でき、レイアウトが跳ねません。
- Resizableドラッグで分割できるパネルです。ホバーで目覚める控えめな区切り線、リセットや折りたたみで滑らかに動くサイズ、永続化されるレイアウトに対応します。
- Scroll area最小限のスクロールバーを備えたネイティブスクロールです。端は続きがある側だけフェードし、最後の項目を半分で切って見せるピークも任意で使えます。