aeworks.tech/lab/gota-navegacion
← AE Lab

Barra de navegación con gota líquida

6 oct 2026· nivel medionavegaciónSVG filterfísica

El indicador de la pestaña activa es una gota que se estira como un líquido hasta la pestaña que pulsas. En el móvil va abajo; en el ordenador sube arriba y enseña los textos.

// CÓMO ESTÁ HECHO

  1. Una gota verde, una «cola» que la persigue con retraso y un cuello entre las dos que adelgaza al estirarse.
  2. Un filtro SVG las desenfoca y vuelve a endurecer el borde: al acercarse, se funden en una sola.
  3. Un muelle con rozamiento mueve la gota; cuanto más rápida va, más se estira en horizontal y se aplasta en vertical.
  4. Pestañas accesibles (role=tab, flechas del teclado) y deslizar la pantalla para cambiar.

// EL CÓDIGO

<div class="app">
  <main class="vistas" id="vistas">
    <section class="vista" id="v0" role="tabpanel" aria-labelledby="t0">
      <h1>Inicio<span>_</span></h1>
      <p>Pulsa otra pestaña o desliza la pantalla: la gota se estira hasta allí como un líquido.</p>
    </section>
    <section class="vista" id="v1" role="tabpanel" aria-labelledby="t1" data-lado="der">
      <h1>Buscar<span>_</span></h1>
      <p>Cuanto más lejos está la pestaña, más se estira la gota.</p>
    </section>
    <section class="vista" id="v2" role="tabpanel" aria-labelledby="t2" data-lado="der">
      <h1>Guardado<span>_</span></h1>
      <p>Una cola la persigue y un cuello de líquido las une; al estirarse, el cuello se adelgaza.</p>
    </section>
    <section class="vista" id="v3" role="tabpanel" aria-labelledby="t3" data-lado="der">
      <h1>Perfil<span>_</span></h1>
      <p>También funciona con las flechas del teclado.</p>
    </section>
  </main>

  <nav class="barra" id="barra" aria-label="Navegación principal">
    <div class="liquido" aria-hidden="true">
      <div class="cuello" id="cuello"></div>
      <div class="gota cola" id="cola"></div>
      <div class="gota" id="gota"></div>
    </div>
    <div class="tabs" role="tablist">
      <button class="tab" id="t0" role="tab" aria-selected="true" aria-controls="v0">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1z"/></svg><span>Inicio</span>
      </button>
      <button class="tab" id="t1" role="tab" aria-selected="false" aria-controls="v1" tabindex="-1">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-4-4"/></svg><span>Buscar</span>
      </button>
      <button class="tab" id="t2" role="tab" aria-selected="false" aria-controls="v2" tabindex="-1">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h12v18l-6-4-6 4z"/></svg><span>Guardado</span>
      </button>
      <button class="tab" id="t3" role="tab" aria-selected="false" aria-controls="v3" tabindex="-1">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21c1.5-4 4.5-6 8-6s6.5 2 8 6"/></svg><span>Perfil</span>
      </button>
    </div>
  </nav>
</div>

<!-- Filtro «goo»: desenfoca y vuelve a endurecer el borde -->
<svg width="0" height="0" style="position:absolute" aria-hidden="true">
  <filter id="goo">
    <feGaussianBlur in="SourceGraphic" stdDeviation="9" result="blur"/>
    <feColorMatrix in="blur" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 22 -9"/>
  </filter>
</svg>