Aspect ratio
Eine Box, die ihre Form behält, bevor Medien geladen sind, beim Laden schimmert, das Medium einblendet und bei einem Fehler auf einen Fallback zurückfällt.
pnpm dlx shadcn@latest add https://hextaui.com/r/aspect-ratio.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/aspect-ratio.tsx components/ui/skeleton.tsx Passe die Importpfade an dein Projekt-Setup an.
Verhältnisse
ratio akzeptiert eine Zahl, einen "w/h"-String oder einen "w:h"-String.
Langsames Laden
Die Box behält ihre Form und schimmert, bis das Bild eintrifft; dann blendet das Bild ein, sodass sich nichts darunter verschiebt. Drücke Reload, um es erneut zu sehen.
Defektes Bild
Wenn das Bild fehlschlägt, wird das Defekt-Symbol des Browsers ausgeblendet und stattdessen ein Fallback-Icon angezeigt. Übergib fallback, um es zu ersetzen, oder fallback={null}, um nichts anzuzeigen.
Overlay
Absolut positionierte Kinder liegen über dem Media. Die Box beschneidet nichts, sodass Fokusringe auf Overlay-Links sichtbar bleiben.
Ohne Platzhalter
placeholder={false} schaltet den Lade-Shimmer, das Einblenden und den Fallback ab, für das einfache shadcn-Verhalten.
Responsive
Überschreibe das Verhältnis an einem Breakpoint mit einer aspect-Klasse. Diese hier ist auf kleinen Bildschirmen quadratisch und ab md md:aspect-video.
In einer zentrierten Flex-Spalte
Die Box hat standardmäßig volle Breite, sodass sie die Spalte füllt, statt auf null zu schrumpfen, wenn das Elternelement seine Kinder zentriert.
Textinhalt
Kinder, die kein Media sind, erhalten nur die Box und sonst nichts. Positioniere sie selbst.
Als Figure
Halte Bildunterschriften außerhalb der Box, damit sie das Verhältnis nicht verändern.
Ungültiges Verhältnis
0, negative Zahlen und nicht parsbare Strings fallen auf ein Quadrat zurück und protokollieren in der Entwicklung eine Warnung.
Rechts nach links
Overlays, die mit logischen Properties wie start-3 positioniert werden, folgen der Leserichtung.
- Die Box ist
aria-busy, solange ihr Media lädt. - Der Fallback ist dekorativ und für assistive Technologien verborgen. Der
alt-Text des Bildes bleibt verfügbar, wenn es nicht lädt, also schreibe immer einen. - Bei reduzierter Bewegung erscheint das Media ohne Einblenden.
Akzeptiert jedes Attribut des Elements, das sie rendert. Media, das direkt darin liegt, ein <img>, <picture> oder <video>, füllt die Box mit object-cover und übernimmt ihren Radius.
| Prop | Typ | Standard |
|---|---|---|
ratio | number | `${number}/${number}` | `${number}:${number}` | 1 |
placeholderZeigt einen Shimmer, solange das Media lädt, und einen Fallback, wenn es fehlschlägt. | boolean | true |
fallbackWird angezeigt, wenn das Media fehlschlägt. null zeigt nichts an. | ReactNode | <IconPhotoOff /> |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="aspect-ratio" | Die Box in CSS ansprechen. |
data-state | loading, loaded oder error. Wird nur gesetzt, wenn placeholder aktiv ist und die Box Media enthält. |
aria-busy | Vorhanden, solange das Media lädt. |
--ratio | Das geparste Verhältnis als Zahl. |
data-slot="aspect-ratio-placeholder" | Der Shimmer, der während des Ladens oder nach einem Fehler angezeigt wird. |
data-slot="aspect-ratio-fallback" | Der Wrapper um den Fallback. |
parseAspectRatio(ratio) wandelt jedes akzeptierte Verhältnis in eine Zahl um und fällt auf 1 zurück. Verwende es, um andere Elemente auf die gleiche Weise zu dimensionieren. Die Typen AspectRatioValue und AspectRatioProps werden ebenfalls exportiert.
- SkeletonPlatzhalter, die 150 ms warten, bevor sie erscheinen, exakt die Größe des umschlossenen Inhalts annehmen und ihn einblenden, ohne etwas zu verschieben.
- AccordionGestapelte Überschriften, die jeweils ein Panel aufklappen, mit einer Höhenbewegung, die sich mittendrin umkehren lässt, und Panels, die auch geschlossen durchsuchbar bleiben.
- CarouselNative Scroll-Snap-Slides mit Momentum auf Touch, Maus-Ziehen, Pfeiltasten, Punkten, Thumbnails und einem Autoplay, das pausiert, wenn es soll.
- CollapsibleEin Panel, das mit einer Höhenbewegung ein- und ausgeblendet wird, die sich mittendrin umkehren lässt, ohne das Layout springen zu lassen.
- ResizablePanels, die du auseinanderziehen kannst, mit einem dezenten Trenner, der beim Hover aufwacht, Größen, die beim Zurücksetzen oder Einklappen gleiten, und Layouts, die erhalten bleiben.
- Scroll areaNatives Scrollen mit minimaler Scrollbar, Kanten, die nur dort ausblenden, wo es mehr zu sehen gibt, und einem optionalen Anschnitt, der das letzte Element halbiert.