Aspect ratio
Uma caixa que mantém sua forma antes de a mídia carregar, exibe um shimmer durante o carregamento, faz a mídia aparecer com fade e usa um fallback quando ela falha.
pnpm dlx shadcn@latest add https://hextaui.com/r/aspect-ratio.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/aspect-ratio.tsx components/ui/skeleton.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Proporções
ratio aceita um número, uma string "w/h" ou uma string "w:h".
Carregamento lento
A caixa mantém sua forma e exibe o shimmer até a imagem chegar, e então a imagem aparece com fade, para que nada abaixo se mova. Pressione Reload para ver de novo.
Imagem quebrada
Quando a imagem falha, o glifo de imagem quebrada do navegador é ocultado e um ícone de fallback é exibido no lugar. Passe fallback para substituí-lo, ou fallback={null} para não exibir nada.
Sobreposição
Filhos com posição absoluta ficam sobre a mídia. A caixa não corta nada, então os anéis de foco em links de sobreposição continuam visíveis.
Sem placeholder
placeholder={false} desativa o shimmer de carregamento, o fade-in e o fallback, para o comportamento padrão do shadcn.
Responsivo
Substitua a proporção em um breakpoint com uma classe aspect. Esta é quadrada em telas pequenas e md:aspect-video a partir de md.
Dentro de uma coluna flex centralizada
A caixa tem largura total por padrão, então preenche a coluna em vez de colapsar a zero quando o pai centraliza seus filhos.
Conteúdo de texto
Filhos que não são mídia recebem a caixa e nada mais. Posicione-os você mesmo.
Como figure
Mantenha as legendas fora da caixa para que não alterem a proporção.
Proporção inválida
0, números negativos e strings que não podem ser interpretadas recorrem a um quadrado e registram um aviso em desenvolvimento.
Da direita para a esquerda
Sobreposições posicionadas com propriedades lógicas como start-3 seguem a direção de leitura.
- A caixa fica com
aria-busyenquanto sua mídia carrega. - O fallback é decorativo e fica oculto para tecnologias assistivas. O texto
altda imagem continua disponível quando ela falha ao carregar, então sempre escreva um. - Com movimento reduzido ativado, a mídia aparece sem fade.
Aceita todos os atributos do elemento que renderiza. Mídia colocada diretamente dentro, um <img>, <picture> ou <video>, preenche a caixa com object-cover e herda seu raio.
| Prop | Tipo | Padrão |
|---|---|---|
ratio | number | `${number}/${number}` | `${number}:${number}` | 1 |
placeholderExibe um shimmer enquanto a mídia carrega e um fallback quando ela falha. | boolean | true |
fallbackExibido quando a mídia falha. null não exibe nada. | ReactNode | <IconPhotoOff /> |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="aspect-ratio" | Seleciona a caixa no CSS. |
data-state | loading, loaded ou error. Definido apenas quando placeholder está ativado e a caixa contém mídia. |
aria-busy | Presente enquanto a mídia carrega. |
--ratio | A proporção interpretada como número. |
data-slot="aspect-ratio-placeholder" | O shimmer exibido durante o carregamento ou após um erro. |
data-slot="aspect-ratio-fallback" | O wrapper em volta do fallback. |
parseAspectRatio(ratio) converte qualquer proporção aceita em número, recorrendo a 1. Use-o para dimensionar outros elementos da mesma forma. Os tipos AspectRatioValue e AspectRatioProps também são exportados.
- SkeletonPlaceholders que esperam 150ms antes de aparecer, assumem o tamanho exato do conteúdo que envolvem e o fazem surgir com fade sem mover nada.
- AccordionTítulos empilhados que revelam cada um um painel, com movimento de altura que você pode reverter no meio e painéis que continuam pesquisáveis enquanto fechados.
- CarouselSlides nativos com scroll-snap, com inércia no toque, arrastar com o mouse, setas do teclado, pontos, miniaturas e um autoplay que pausa quando deve.
- CollapsibleUm painel que aparece e desaparece com um movimento de altura que você pode reverter no meio, sem fazer o layout pular.
- ResizablePainéis que você pode separar arrastando, com um divisor discreto que desperta no hover, tamanhos que deslizam ao redefinir ou recolher e layouts que persistem.
- Scroll areaRolagem nativa com uma barra de rolagem mínima, bordas que esmaecem apenas onde há mais a ver e um peek opcional que corta o último item ao meio.