✅Cómo Crear un Hero con Video + Slider en Gutenberg (HTML, CSS y JS)

Hoy quiero enseñarte a crear algo muy visual y efectivo para tu página de inicio, landing page o cualquier otra página donde necesites un hero con video de YouTube en autoplay que solo reproduce un fragmento concreto del video, como si fuese un gif animado, y que además incluye un slider de contenido encima del propio video.

Y lo mejor de todo es que no necesitas plugins, solo un bloque de HTML personalizado en Gutenberg usando HTML, CSS y JavaScript directamente. ¡Sencillo y ligero!

hero youtube slider dinamico gutenberg

¿Qué hace exactamente este snippet?

  • Reproduce un video de YouTube en bucle infinito, sin sonido y sin controles visibles.
  • Solo muestra un fragmento específico del video (por ejemplo, del segundo 5 al segundo 40).
  • Encima del video, un slider con 3 secciones que puedes personalizar: título, subtítulo, texto y botón.
  • Con navegación mediante bolitas (dots) y cambio automático cada 5 segundos.

¿Por qué es útil?

Si quieres que tu web tenga un efecto visual tipo «cinemagraph» o video de fondo pero sin cargar videos locales pesados, esta solución es perfecta. Además, puedes usarlo tanto en una página de inicio como en cualquier sección que quieras destacar.

Copia el siguiente código y agrégalo en un bloque de HTML de Gutenberg.

<style>
  .hero-container {
    position: relative;
    width: 100vw;
    height: 100vh;
    overflow: hidden;
  }
  .hero-container iframe {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 177.77vh;
    height: 100vh;
    pointer-events: none;
    z-index: 1;
    filter: brightness(0.5);
  }
  .hero-slider {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 3;
    max-width: 800px;
    text-align: center;
    color: #fff;
  }
  .slide {
    display: none;
  }
  .slide.active {
    display: block;
  }
  .hero-slider h1 { font-size: 3rem; margin-bottom: 10px; color: #fff; }
  .hero-slider h2 { font-size: 1.4rem; margin-bottom: 10px; font-weight: normal; color: #fff; }
  .hero-slider p { font-size: 1.1rem; margin-bottom: 20px; color: #fff; }
  .hero-slider a {
    display: inline-block;
    padding: 12px 25px;
    background: #13b0a0;
    color: #fff;
    text-decoration: none;
    border-radius: 6px;
    font-weight: bold;
    transition: background 0.3s;
  }
  .hero-slider a:hover {
    background: #009975;
  }
  .dots {
    position: absolute;
    bottom: 30px;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    gap: 12px;
    z-index: 4;
  }
  .dot {
    width: 14px;
    height: 14px;
    background: rgba(255,255,255,0.6);
    border-radius: 50%;
    cursor: pointer;
    transition: background 0.3s;
  }
  .dot.active {
    background: #13b0a0;
  }
</style>

<div class="hero-container">
  <iframe src="https://www.youtube.com/embed/CP8to7rnyqE?autoplay=1&mute=1&start=5&end=40&loop=1&playlist=CP8to7rnyqE&controls=0&showinfo=0&modestbranding=1&rel=0&fs=0&iv_load_policy=3&disablekb=1&playsinline=1&autohide=1" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
  <div class="hero-slider">
    <div class="slide active">
      <h1>Sección 1</h1>
      <h2>Subtítulo 1</h2>
      <p>Texto descriptivo de la primera sección.</p>
      <a href="#">Ver más</a>
    </div>
    <div class="slide">
      <h1>Sección 2</h1>
      <h2>Subtítulo 2</h2>
      <p>Texto descriptivo de la segunda sección.</p>
      <a href="#">Descubrir</a>
    </div>
    <div class="slide">
      <h1>Sección 3</h1>
      <h2>Subtítulo 3</h2>
      <p>Texto descriptivo de la tercera sección.</p>
      <a href="#">Leer más</a>
    </div>
  </div>
  <div class="dots">
    <div class="dot active" data-slide="0"></div>
    <div class="dot" data-slide="1"></div>
    <div class="dot" data-slide="2"></div>
  </div>
</div>

<script>
  const slides = document.querySelectorAll('.slide');
  const dots = document.querySelectorAll('.dot');
  let current = 0;

  function showSlide(index) {
    slides.forEach((s, i) => {
      s.classList.toggle('active', i === index);
      dots[i].classList.toggle('active', i === index);
    });
    current = index;
  }

  function autoPlay() {
    current = (current + 1) % slides.length;
    showSlide(current);
  }

  let interval = setInterval(autoPlay, 5000);

  dots.forEach(dot => {
    dot.addEventListener('click', () => {
      clearInterval(interval);
      showSlide(parseInt(dot.dataset.slide));
      interval = setInterval(autoPlay, 5000);
    });
  });
</script>

Lenguaje del código: HTML, XML (xml)

¿Cómo personalizar este bloque?

Cambiar la URL del video

Ubica este fragmento dentro del iframe y reemplaza el ID del video por el de tu video:

src="https://www.youtube.com/embed/CP8to7rnyqE?autoplay=1&mute=1&start=5&end=40&loop=1&playlist=CP8to7rnyqE"

Cambia CP8to7rnyqE por tu propio ID de video.

Modificar los segundos de reproducción

En la misma URL puedes cambiar estos parámetros:

  • start=5 ➡ indica desde qué segundo empieza.
  • end=40 ➡ indica en qué segundo se reinicia.

Personalizar los textos del slider

En la parte de las secciones del slider, puedes editar fácilmente:

<h1>Sección 1</h1>
<h2>Subtítulo 1</h2>
<p>Texto descriptivo de la primera sección.</p>
<a href="#">Ver más</a>

Cambia los textos y añade o elimina secciones según lo que necesites.

Cambiar colores y estilo

Desde el CSS puedes modificar:

  • El color del botón (background: #13b0a0;)
  • El color de las bolitas de navegación (.dot.active)
  • Tamaño de títulos y subtítulos (font-size en .hero-slider h1 y .hero-slider h2)
hero video youtube gutenberg wordpress

Ajustar la velocidad del slider

El valor 5000 en este fragmento indica que cambia cada 5 segundos:

let interval = setInterval(autoPlay, 5000);

Puedes cambiarlo a 7000 o el tiempo que quieras en milisegundos.

¿Y qué más podría hacer?

  • Puedes convertirlo en un slider de más de 3 secciones añadiendo más .slide.
  • También podrías añadirle un efecto «fade-in» a los textos o animaciones con @keyframes.
  • Incluso podrías incrustar un formulario encima del video para captar leads.

Si necesitas algo más personalizado y no sabes como hacerlo, contáctame por WhatsApp y lo miramos.

Conclusión

Con este simple código puedes tener un hero con video de fondo tipo cinemagraph, sin tener que usar constructores pesados o plugins. Gutenberg y un bloque HTML es todo lo que necesitas.

Nos vemos en el siguiente tutorial. Un saludo.

5/5 - (2 votos)
Compartir Artículo

Un comentario

  1. Fran Salas Master WP 1 año atrás

    ¿Alguna duda o sugerencia? Déjala en los comentarios.

¿Tienes una duda o sugerencia sobre este artículo?

Puedes dejar un comentario de forma anónima, sin necesidad de registrarte ni proporcionar ningún dato personal. Tu mensaje se publicará como “Usuario Anónimo No Premium”, un perfil que agrupa a todos los visitantes no registrados.

Importante: para evitar el spam automático, todos los comentarios anónimos deben comenzar con el símbolo #. Ejemplo: # Tengo una duda sobre los shortcodes personalizados...

Este espacio está destinado exclusivamente a preguntas concretas, dudas o sugerencias relacionadas con el contenido del artículo. Por respeto a los demás lectores, no se publicarán temas sin relación.

Privacidad y normas:
  • No tienes que agregar tu nombre, correo ni ningún otro dato identificativo.
  • No se permiten enlaces en comentarios anónimos.
  • No se permiten símbolos especiales como < o > (menor y mayor que), ya que se consideran intentos de insertar código y serán bloqueados.
  • Todos los comentarios anónimos pasan por revisión antes de ser publicados y solo se aprobarán si aportan valor al contenido del artículo.
¿Quieres comentar con tu nombre y que tu mensaje se publique al instante? Inicia sesión o regístrate.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

0%