Skip to contentPular para o conteúdo
Get StartedComeçar

Works where you already are.Funciona onde você já está.

Velora's motion core does not own your look. It also respects people who do not want motion. Live demos with Tailwind and plain CSS, what it weighs, how fast it runs, then the package surface and a real site.O motion core do Velora não é dono do seu visual. Ele também respeita quem não quer movimento. Demos ao vivo com Tailwind e CSS puro, quanto pesa, quão rápido roda, depois a superfície do pacote e um site real.

Film lights on a set
Reduced motionMovimento reduzidoThe same page, without movement, for people who ask for it.A mesma página, sem movimento, para quem pede.@media (prefers-reduced-motion: reduce)

Same attributes, different host styles.Mesmos atributos, estilos de host diferentes.

Both cards use the same vl-* attributes. One is styled like this site. The other uses plain utility-style CSS with a different palette and shape. The motion does not change.Os dois cartões usam os mesmos atributos vl-*. Um é estilizado como este site. O outro usa CSS puro estilo utilitário, com outra paleta e forma. O movimento não muda.

↓ Scroll away and back to replay↓ Role para longe e volte para repetir
ExistingExistente
Cut hostHost Cut

Same grammar.Mesma gramática.

Styled with this site's tokens.Estilizado com os tokens deste site.

Plain hostHost simples

Same grammar.Mesma gramática.

Styled with unrelated CSS: rounded, colored, serif.Estilizado com CSS alheio: arredondado, colorido, serifado.

CodeCódigo
<article class="your-card" vl-enter="fade-up">
  <h3 vl-enter="text-reveal-up">Same grammar.</h3>
</article>

Tailwind for look. Velora for motion.Tailwind para o visual. Velora para o movimento.

This panel is built with real Tailwind utility classes, compiled for this page without Tailwind's reset. The motion on it is only vl-* attributes. No class names collide and no script runs.Este painel é construído com classes utilitárias reais do Tailwind, compiladas para esta página sem o reset do Tailwind. O movimento nele são apenas atributos vl-*. Nenhum nome de classe colide e nenhum script roda.

↓ Scroll away and back to replay, hover the cards↓ Role para longe e volte para repetir, passe o mouse nos cartões
ValidatedValidado

Tailwind hostHost Tailwind

Utilities for look, Velora for motion.Utilitários para o visual, Velora para o movimento.

flex

Layout is Tailwind.O layout é Tailwind.

ring

Color is Tailwind.A cor é Tailwind.

vl-*

Motion is Velora.O movimento é Velora.

  • 0 compiler issues on the Tailwind host example, 16 attributes0 problemas do compilador no exemplo de host Tailwind, 16 atributos
  • 0.7 kB gzip of Tailwind CSS this panel needs0,7 kB de gzip de CSS Tailwind que este painel precisa
  • motion-core only, in the real example: no Velora look is loadedapenas motion-core, no exemplo real: nenhum visual do Velora é carregado
CodeCódigo
<!-- Tailwind owns look. Velora owns motion. -->
<link rel="stylesheet" href="tailwind.css">          <!-- your utilities -->
<link rel="stylesheet" href="@veloracss.io/css/motion-core"> <!-- motion only -->

<h3 class="text-3xl font-semibold" vl-enter="text-reveal-up">…</h3>
<div class="grid gap-3 sm:grid-cols-3" vl-children="cascade" vl-stagger="120ms">
  <article class="rounded-xl bg-zinc-900 p-4 ring-1 ring-zinc-800"
           vl-hover="hover-lift">…</article>
</div>

What it weighs.Quanto pesa.

Minified, then gzip. Velora ships CSS, so there is nothing to parse as a script and no runtime to start. The scroll library is shown for scale only: it is a general engine, and Velora's number includes the whole attribute catalog.Minificado, depois gzip. O Velora entrega CSS, então não há nada para interpretar como script nem runtime para iniciar. A biblioteca de scroll aparece só como escala: é um motor geral, e o número do Velora inclui todo o catálogo de atributos.

MeasuredMedido
  • Velora motion-core · CSSVelora motion-core · CSS18.6 kB
  • Velora core + extended · CSSVelora core + extended · CSS27.5 kB
  • Velora full bundle · CSSVelora pacote completo · CSS53.0 kB
  • GSAP 3.15 + ScrollTrigger · JSGSAP 3.15 + ScrollTrigger · JS44.6 kB

Brotli: motion-core 15.4 kB, core + extended 21.9 kB, full 41.7 kB, GSAP + ScrollTrigger 40.0 kB. Built with esbuild from packages/css/src.Brotli: motion-core 15,4 kB, core + extended 21,9 kB, completo 41,7 kB, GSAP + ScrollTrigger 40,0 kB. Gerado com esbuild a partir de packages/css/src.

How fast it runs.Quão rápido roda.

The same job twice: 60 cards that fade up as they reach the viewport, on a 390 px screen. One page uses vl-enter, the other GSAP with ScrollTrigger. Median of 5 runs in Chromium 141 on one machine, unthrottled and with the CPU slowed 4×.O mesmo trabalho duas vezes: 60 cartões que sobem com fade ao chegar na viewport, numa tela de 390 px. Uma página usa vl-enter, a outra GSAP com ScrollTrigger. Mediana de 5 execuções no Chromium 141 em uma máquina, sem limitação e com a CPU 4× mais lenta.

MeasuredMedido
PagePáginaCPUCPUReady (DOMContentLoaded)Pronto (DOMContentLoaded)Script run on loadScript na cargaMain-thread work while scrollingTrabalho da thread principal durante a rolagem
No motion (baseline)Sem movimento (linha de base)1×17 ms0 ms323 ms
Velora1×19 ms0 ms370 ms
GSAP + ScrollTrigger1×100 ms49 ms592 ms
No motion (baseline)Sem movimento (linha de base)4×103 ms0 ms1218 ms
Velora4×77 ms0.2 ms1417 ms
GSAP + ScrollTrigger4×409 ms224 ms2455 ms
  • CSS, not JS: Velora's motion ships as a stylesheet; the script version ships JavaScript the browser must run firstCSS, não JS: o movimento do Velora chega como folha de estilo; a versão com script entrega JavaScript que o navegador precisa executar antes
  • Scroll cost varies: main-thread work while scrolling changed a lot between runs, so no percentage is claimed hereCusto na rolagem varia: o trabalho da thread principal na rolagem mudou muito entre execuções, então nenhuma porcentagem é afirmada aqui
  • 0 ms of script to start Velora's motion0 ms de script para iniciar o movimento do Velora

Limits: one scenario on one machine over localhost, so network time is not measured (see weight above). Velora had one long task at 4× while the stylesheet was parsed; GSAP had two. This says nothing about other scenes, other machines or real phones. The table is a single run; repeated runs varied widely, so read it as one sample, not a benchmark.Limites: um cenário em uma máquina via localhost, então o tempo de rede não é medido (veja o peso acima). O Velora teve uma tarefa longa a 4× enquanto a folha de estilo era interpretada; o GSAP teve duas. Isso não diz nada sobre outras cenas, outras máquinas ou celulares reais. A tabela é uma única rodada; repetições variaram muito, então leia como uma amostra, não como benchmark.

CodeCódigo
<!-- Velora page: stylesheet only, no script -->
<link rel="stylesheet" href="motion-core.min.css">
<article class="c" vl-enter="fade-up">…</article>   <!-- ×60 -->

<!-- Script page: same cards -->
<script src="gsap.min.js"></script><script src="ScrollTrigger.min.js"></script>
<script>
  gsap.registerPlugin(ScrollTrigger);
  document.querySelectorAll(".c").forEach(c =>
    gsap.from(c, { opacity: 0, y: 24, duration: .6, ease: "power2.out",
      scrollTrigger: { trigger: c, start: "top 85%" } }));
</script>

Why that is cheaper to keep.Por que é mais barato de manter.

Only what the measurements above support, plus what follows from how Velora is built.Apenas o que as medições acima sustentam, mais o que decorre de como o Velora é construído.

ReasonedDeduzido
  • No runtime to shipNenhum runtime para entregarNothing to bundle, version or tree-shake for motion. It is a stylesheet.Nada para empacotar, versionar ou fazer tree-shake para o movimento. É uma folha de estilo.
  • No build step requiredNenhuma etapa de build obrigatóriaThe Tailwind host example works from a link tag. A bundler is optional.O exemplo de host Tailwind funciona a partir de uma tag link. Um bundler é opcional.
  • Checked in CIVerificado na CIThe compiler flags unknown or removed attributes before they reach a browser.O compilador sinaliza atributos desconhecidos ou removidos antes que cheguem a um navegador.
  • Not measuredNão medidoAuthoring time and maintenance cost. We have no study, so no number is claimed.Tempo de autoria e custo de manutenção. Não temos estudo, então nenhum número é afirmado.

Motion off is a first-class state.Movimento desligado é um estado de primeira classe.

Under prefers-reduced-motion the core stops enter, exit and loop motion, and authors can force a resting state with vl-motion="still". This site also holds every scroll-linked channel still. Both squares carry the same loop. The right one sits still.Sob prefers-reduced-motion o core interrompe o movimento de entrada, saída e loop, e autores podem forçar um estado de repouso com vl-motion="still". Este site também mantém parado todo canal ligado à rolagem. Os dois quadrados carregam o mesmo loop. O da direita fica parado.

ExistingExistente
DefaultPadrãovl-loop-effect="float"
StillStillvl-motion="still"

Looping motion is continuous. Use it sparingly and keep it off body text.Movimento em loop é contínuo. Use com moderação e não aplique em texto corrido.

Measured, not claimed.Medido, não alegado.

Contrast ratios below were computed from this site's own colour tokens in Chromium, in light and dark. The keyboard check tabbed through every page. What was not tested is listed at the end.As razões de contraste abaixo foram calculadas a partir dos tokens de cor deste site no Chromium, em claro e escuro. A checagem de teclado percorreu todas as páginas com Tab. O que não foi testado está listado no fim.

ValidatedValidado
PairParLightClaroDarkEscuroResultResultado
Body text on backgroundTexto do corpo sobre o fundo15.22 : 116.09 : 1AA passPassa AA
Body text on surfaceTexto do corpo sobre a superfície16.59 : 115.04 : 1AA passPassa AA
Muted text on backgroundTexto suave sobre o fundo5.79 : 16.93 : 1AA passPassa AA
Muted text on surfaceTexto suave sobre a superfície6.32 : 16.48 : 1AA passPassa AA
Accent on backgroundDestaque sobre o fundo4.99 : 18.64 : 1AA passPassa AA
Hairline borders on backgroundFiletes sobre o fundo1.51 : 11.97 : 1Decorative, below 3 : 1Decorativo, abaixo de 3 : 1

AA for text is 4.5 : 1. Hairlines separate areas but never carry meaning alone, since controls also change fill or show a ring.AA para texto é 4,5 : 1. Os filetes separam áreas mas nunca carregam significado sozinhos, já que os controles também mudam o preenchimento ou mostram um anel.

KeyboardTeclado11 pages · tabbed in Chromium11 páginas · navegadas com Tab no Chromium
  • Every stop on every page showed a focus indication when tabbed. The carousel buttons on Scenes are native pseudo-elements, so they were checked through their own focus style, not a computed outline.Todas as paradas em todas as páginas mostraram indicação de foco ao navegar com Tab. Os botões do carrossel em Cenas são pseudo-elementos nativos, então foram verificados pelo próprio estilo de foco, não por um outline computado.
  • Controls built from radio inputs are reachable and operable with the arrow keys.Controles feitos de inputs radio são alcançáveis e operáveis com as setas.
  • A skip link is the first stop on every page.Um skip link é a primeira parada em todas as páginas.
MotionMovimentoreduced and stillreduzido e still
  • Page transitions shorten to 0.12s when the system asks for less motion.As transições de página encurtam para 0,12 s quando o sistema pede menos movimento.
  • Loops, marquees and the Film Strip stop under reduced motion.Loops, marquees e a Film Strip param com movimento reduzido.
  • vl-motion="still" forces the resting state for a subtree.vl-motion="still" força o estado de repouso para uma subárvore.
Not tested yetAinda não testadoopen
  • A screen reader pass.Uma passada com leitor de tela.
  • The orange and blue accents. Only the default accent was measured.Os destaques laranja e azul. Só o destaque padrão foi medido.
  • Forced-colours and increased-contrast modes.Modos de cores forçadas e de contraste aumentado.
  • Hosts other than Tailwind and plain CSS, such as Bootstrap or UnoCSS.Hosts além de Tailwind e CSS puro, como Bootstrap ou UnoCSS.
  • The speed test on real phones and with other scroll libraries.O teste de velocidade em celulares reais e com outras bibliotecas de scroll.
CodeCódigo
<a class="vl-skip-link" href="#top">Skip to content</a>
<main id="top">…</main>

:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

What you can import.O que você pode importar.

Entry points of the @veloracss.io/css package on npm (npm install @veloracss.io/css). Pick the smallest one that fits your interface.Pontos de entrada do pacote @veloracss.io/css no npm (npm install @veloracss.io/css). Escolha o menor que serve à sua interface.

ExistingExistente
Entry pointPonto de entradaRoleFunção
@veloracss.io/cssFull bundlePacote completo
@veloracss.io/css/baseBase layerCamada base
@veloracss.io/css/motion-coreHost-agnostic motionMovimento independente de host
@veloracss.io/css/motion-extendedExtended motion recipesReceitas de movimento estendidas
@veloracss.io/css/themeOptional Skins and theme layerSkins opcionais e camada de tema
@veloracss.io/css/components-coreCore componentsComponentes do core
@veloracss.io/css/transitionsPage transition stylesEstilos de transição de página
@veloracss.io/css/premiumAdditional visual stylesEstilos visuais adicionais
@veloracss.io/css/overridesOverride layerCamada de overrides
@veloracss.io/css/fullAlias of the full bundleAlias do pacote completo

A real site.Um site real.

SKIF Brasil runs Velora on WordPress with a custom plugin.A SKIF Brasil roda o Velora em WordPress com um plugin próprio.

SKIF BrasilWordPress + custom pluginWordPress + plugin próprioReported by the authorRelatado pelo autor