Iridescence <mv-iridescence>

Película de sabão WebGL mantida na vertical: a gravidade a deixa fina no alto e grossa embaixo, de modo que suas cores de interferência se empilham em faixas que redemoinhos lentos enrolam e marmorizam, e a película mais grossa se acomoda em uma pérola da cor de destaque.

Como funciona

Película de sabão WebGL mantida na vertical: a gravidade a deixa fina no alto e grossa embaixo, de modo que suas cores de interferência se empilham em faixas que redemoinhos lentos enrolam e marmorizam, e a película mais grossa se acomoda em uma pérola da cor de destaque. Duas luzes em faixa se refletem na película; o ponteiro as desliza e muda o ângulo de visão, o que desloca as cores ao seu redor. A película segue o tema: brilha com luz refletida em uma página escura e, retroiluminada, mostra seus tons pastel transmitidos em uma clara. Ela pausa fora da tela, compartilha o orçamento de contextos WebGL da página e mantém um quadro estático com movimento reduzido.

CategoriaFundos
TipoElemento WebGL (<mv-iridescence>)
Statusestável
Também instalashader
Keywordssafe-rewrite, webgl, shader, iridescent, holographic, soap-film, pearl, hero

When to use

  • A beauty, fashion, crypto or creative brand wants a holographic, soap-film sheen as a hero backdrop
  • The backdrop should answer the pointer: reflections slide and colors shift where the visitor moves
  • The same iridescent hero must work in light (pastel, backlit) and dark (glowing) themes without extra tuning

Avoid when

  • The holographic look should apply to cards and buttons, not the page background → use Surface instead
  • A reflective liquid-metal surface is the intended look → use Liquid Chrome instead
  • A still section background is enough and no WebGL should run → use Backdrop instead

Instalação

node scripts/add.mjs iridescence --out ./src/marvelous

Agente de IA com o servidor MCP do Marvelous UI: install_components({ slugs: ["iridescence"], target_dir: "<absolute path>/src/marvelous", framework: "react" }).

Arquivos copiados (dependências incluídas): tokens/tokens.css, core/base.css, core/canvas.js, core/dom.js, core/element.js, core/i18n.js, core/motion.js, core/observe.js, core/webgl.js, components/shader/shader.js, components/shader/shader.css, components/iridescence/iridescence.js, components/iridescence/iridescence.css.

Uso

Marcação de referência, para usar como ponto de partida e personalizar com atributos, data-* e variáveis CSS:

<mv-iridescence data-fill></mv-iridescence>
<div style="position:relative;display:grid;place-items:center;height:100%;min-height:320px;padding:2rem 1rem;box-sizing:border-box;text-align:center;pointer-events:none">
  <div>
    <p style="margin:0;font:700 clamp(1.6rem,4vw,2.6rem)/1.1 var(--mv-font-sans);letter-spacing:-.03em;color:var(--mv-fg);text-shadow:0 0 28px var(--mv-bg),0 0 10px var(--mv-bg)">Thin as light</p>
    <p style="margin:.6rem auto 0;max-width:26rem;color:var(--mv-fg);text-shadow:0 0 16px var(--mv-bg),0 0 6px var(--mv-bg)">A soap film drains into bands of color. Move the pointer to tilt the light.</p>
  </div>
</div>

API

Attributes

NameTipoDefaultDescription
colorCSS colorvar(--mv-accent)Pearl into which the thickest film settles; only its hue counts (tokens accepted, read again on theme change).
scalenumber1Size of the swirls.
amplitudenumber1Strength of the eddies that stir the bands (0 = flat horizontal bands).
saturationnumber1Vividness of the interference colors (0 = a neutral sheen, max 3).
depthnumber0.5Tonal depth: 0 = the whole film shows its colors, 1 = colors mostly where the strip lights fall.
glintnumber1Strength of the strip-light reflections and their glare (0 = none, max 3).
speednumber1Time multiplier.
pausedbooleanFreezes the animation on the current frame.
interactivebooleanFollows the pointer only over the element (otherwise across the whole window).
dprnumber1.5Max pixel density (capped at 2).
data-fillbooleanFills the positioned parent (absolute, inset 0).

Events

NameDescription
mv-errorThe shader failed to compile on this GPU. detail: { message }. The element gets data-error and shows its fallback.

Content structure

NameDescription
childrenContent placed inside the element sits above the film.

Accessibility

Decorative: the canvas is aria-hidden and never takes pointer events, and content placed inside stays in the normal reading order. The loop stops off screen and in hidden tabs; reduced motion (OS or <html data-motion="reduce">) and paused keep a still, representative frame. Without WebGL2 a still band of soap-film colors in the theme tokens is shown; forced colors and print hide the canvas. The bands are vivid and change brightness, so text placed over them needs a halo or a backing panel to stay readable.

Esta página foi traduzida com IA. Informar um problema de tradução