Banners

Sistema completo de banners modernos con efectos avanzados, incluyendo banners de cookies RGPD compliant y múltiples variantes para diferentes casos de uso.

Banners Básicos

Banners informativos con diferentes variantes de color y efectos modernos incorporados.

Variantes de Color

Código de ejemplo:

<div class="banner banner-info">
  <div class="banner-icon">
    <i class="fas fa-info-circle"></i>
  </div>
  <div class="banner-content">
    <div class="banner-title">Información importante</div>
    <div class="banner-text">Mensaje informativo aquí.</div>
  </div>
  <div class="banner-actions">
    <button class="btn btn-sm btn-glass">Ver más</button>
  </div>
  <button class="banner-close">
    <i class="fas fa-times"></i>
  </button>
</div>

Tamaños de Banners

Banners de Cookies RGPD/LOPD

Banner de Cookies Completo (Inferior)

HTML del banner completo:

<div class="cookie-banner" id="cookieBanner">
  <div class="cookie-content">
    <div class="cookie-text">
      <div class="cookie-title">Uso de Cookies</div>
      <div class="cookie-description">
        Utilizamos cookies propias y de terceros para mejorar tu experiencia...
        <a href="/cookies">Más información</a> |
        <a href="/privacidad">Política de Privacidad</a>
      </div>
    </div>
    <div class="cookie-actions">
      <button class="btn btn-ghost-white btn-sm">Configurar</button>
      <button class="btn btn-secondary btn-sm">Solo necesarias</button>
      <button class="btn btn-success">Aceptar todas</button>
    </div>
  </div>
</div>

Banner de Cookies Superior (Minimalista)

<div class="cookie-banner-top" id="cookieBannerTop">
  🍪 Este sitio utiliza cookies para mejorar tu experiencia.
  <div class="cookie-actions">
    <button class="btn btn-ghost-white btn-xs">Configurar</button>
    <button class="btn btn-primary btn-xs">Aceptar</button>
  </div>
</div>

Banner de Cookies Flotante

<div class="cookie-banner-float" id="cookieFloat">
  <div class="cookie-title">Cookies</div>
  <div class="cookie-text">
    Usamos cookies para personalizar contenido...
    <a href="/cookies">Leer más</a>
  </div>
  <div class="cookie-actions">
    <button class="btn btn-ghost btn-xs">Rechazar</button>
    <button class="btn btn-primary btn-xs">Aceptar</button>
  </div>
</div>

JavaScript para Cookies

Script de control (ejemplo):

// Control de banner de cookies RGPD compliant
class CookieBanner {
    constructor(bannerId) {
        this.banner = document.getElementById(bannerId);
        this.init();
    }

    init() {
        // Mostrar banner si no hay consentimiento
        if (!this.hasConsent()) {
            this.show();
        }

        this.bindEvents();
    }

    show() {
        this.banner.classList.add('show');
    }

    hide() {
        this.banner.classList.remove('show');
    }

    hasConsent() {
        return localStorage.getItem('cookieConsent') !== null;
    }

    acceptAll() {
        this.setConsent({
            necessary: true,
            analytics: true,
            marketing: true,
            preferences: true
        });
        this.hide();
    }

    acceptNecessary() {
        this.setConsent({
            necessary: true,
            analytics: false,
            marketing: false,
            preferences: false
        });
        this.hide();
    }

    setConsent(preferences) {
        localStorage.setItem('cookieConsent', JSON.stringify({
            preferences: preferences,
            timestamp: new Date().toISOString()
        }));
    }

    bindEvents() {
        // Eventos de botones
        const acceptAllBtn = this.banner.querySelector('[data-action="accept-all"]');
        const acceptNecessaryBtn = this.banner.querySelector('[data-action="necessary"]');
        const configureBtn = this.banner.querySelector('[data-action="configure"]');

        if (acceptAllBtn) {
            acceptAllBtn.addEventListener('click', () => this.acceptAll());
        }

        if (acceptNecessaryBtn) {
            acceptNecessaryBtn.addEventListener('click', () => this.acceptNecessary());
        }

        if (configureBtn) {
            configureBtn.addEventListener('click', () => this.openConfiguration());
        }
    }

    openConfiguration() {
        // Abrir modal de configuración de cookies
        // Implementar según tu sistema de modales
        console.log('Abrir configuración de cookies');
    }
}

// Inicializar al cargar la página
document.addEventListener('DOMContentLoaded', () => {
    new CookieBanner('cookieBanner');
});

Banners de Notificación

Notificaciones flotantes que aparecen temporalmente para informar al usuario.

Notificaciones Flotantes

<div class="notification-banner" id="notification1">
  <div class="banner banner-success banner-sm">
    <div class="banner-icon">
      <i class="fas fa-check"></i>
    </div>
    <div class="banner-content">
      <div class="banner-title">¡Guardado!</div>
      <div class="banner-text">Los cambios se guardaron correctamente.</div>
    </div>
    <button class="banner-close">
      <i class="fas fa-times"></i>
    </button>
  </div>
</div>

Notificación con Auto-dismiss

<div class="notification-banner auto-dismiss">
  <div class="banner banner-info banner-sm">
    <div class="banner-icon">
      <i class="fas fa-info-circle"></i>
    </div>
    <div class="banner-content">
      <div class="banner-title">Información</div>
      <div class="banner-text">Se cierra automáticamente en 5s.</div>
    </div>
  </div>
</div>

JavaScript para Notificaciones

// Sistema de notificaciones
class NotificationSystem {
    constructor() {
        this.container = this.createContainer();
        this.notifications = [];
    }

    createContainer() {
        const container = document.createElement('div');
        container.className = 'notification-container';
        container.style.cssText = `
            position: fixed;
            top: 2rem;
            right: 2rem;
            z-index: 10000;
            display: flex;
            flex-direction: column;
            gap: 1rem;
        `;
        document.body.appendChild(container);
        return container;
    }

    show(type, title, message, duration = 5000) {
        const notification = this.createNotification(type, title, message);
        this.container.appendChild(notification);

        // Animación de entrada
        setTimeout(() => notification.classList.add('show'), 100);

        // Auto-dismiss
        if (duration > 0) {
            setTimeout(() => this.hide(notification), duration);
        }

        return notification;
    }

    createNotification(type, title, message) {
        const notification = document.createElement('div');
        notification.className = 'notification-banner';

        notification.innerHTML = `
            <div class="banner banner-${type} banner-sm">
                <div class="banner-icon">
                    <i class="fas fa-${this.getIcon(type)}"></i>
                </div>
                <div class="banner-content">
                    <div class="banner-title">${title}</div>
                    <div class="banner-text">${message}</div>
                </div>
                <button class="banner-close">
                    <i class="fas fa-times"></i>
                </button>
            </div>
        `;

        // Event listener para cerrar
        notification.querySelector('.banner-close').addEventListener('click', () => {
            this.hide(notification);
        });

        return notification;
    }

    hide(notification) {
        notification.classList.add('notification-slide-out');
        setTimeout(() => {
            if (notification.parentNode) {
                notification.parentNode.removeChild(notification);
            }
        }, 400);
    }

    getIcon(type) {
        const icons = {
            success: 'check',
            danger: 'exclamation-circle',
            warning: 'exclamation-triangle',
            info: 'info-circle'
        };
        return icons[type] || 'info-circle';
    }
}

// Instancia global
const notifications = new NotificationSystem();

// Funciones de ayuda
function showSuccess(title, message) {
    notifications.show('success', title, message);
}

function showError(title, message) {
    notifications.show('danger', title, message);
}

function showWarning(title, message) {
    notifications.show('warning', title, message);
}

function showInfo(title, message) {
    notifications.show('info', title, message);
}

Banners Especiales

Banner de Promoción

🎉 ¡Oferta Especial!
50% de descuento en todos los planes Premium
<div class="promo-banner">
  <div class="promo-content">
    <div class="promo-title">🎉 ¡Oferta Especial!</div>
    <div class="promo-subtitle">50% de descuento en todos los planes Premium</div>
    <button class="btn btn-ghost-white">Aprovechar Oferta</button>
  </div>
</div>

Banner de Mantenimiento

🔧 Mantenimiento programado: Domingo 15 de Octubre, 02:00 - 04:00 GMT
<div class="maintenance-banner">
  <span class="maintenance-icon">🔧</span>
  <span class="maintenance-text">
    Mantenimiento programado: Domingo 15 de Octubre, 02:00 - 04:00 GMT
  </span>
</div>

Banner con Gradiente Animado

Posicionamiento de Banners

Clases de Posición

Posiciones Fijas

  • .banner-fixed-top - Fijo en la parte superior
  • .banner-fixed-bottom - Fijo en la parte inferior
  • .banner-sticky - Sticky en la parte superior

Estados y Utilidades

  • .banner-hidden - Ocultar banner
  • .banner-dismissible - Mostrar botón cerrar
  • .banner-fade-in - Animación de entrada
  • .banner-fade-out - Animación de salida

Ejemplos de uso:

<!-- Banner fijo superior -->
<div class="banner banner-warning banner-fixed-top banner-dismissible">
  <div class="banner-content">
    <div class="banner-text">Mensaje importante en la parte superior</div>
  </div>
  <button class="banner-close"><i class="fas fa-times"></i></button>
</div>

<!-- Banner sticky -->
<div class="banner banner-info banner-sticky">
  <div class="banner-content">
    <div class="banner-text">Este banner se mantiene visible al hacer scroll</div>
  </div>
</div>

Ejemplos de Implementación

Sistema de Alertas

Banners de Marketing

🚀 Lanzamiento Especial
3 meses gratis en plan anual

Implementación de Cookies Completa

<!-- Banner RGPD completo con todas las opciones -->
<div class="cookie-banner" id="cookieBanner">
  <div class="cookie-content">
    <div class="cookie-text">
      <div class="cookie-title">Configuración de Cookies</div>
      <div class="cookie-description">
        Utilizamos cookies propias y de terceros para personalizar el contenido,
        proporcionar funcionalidades de redes sociales y analizar el tráfico web.
        También compartimos información sobre el uso que haga del sitio web con
        nuestros partners de redes sociales, publicidad y análisis web.
        <a href="/politica-cookies" target="_blank">Política de Cookies</a> |
        <a href="/politica-privacidad" target="_blank">Política de Privacidad</a>
      </div>
      <div class="cookie-details">
        Puedes aceptar todas las cookies, rechazar las no necesarias o configurar
        tus preferencias. Las cookies necesarias para el funcionamiento del sitio
        siempre están activas.
      </div>
    </div>
    <div class="cookie-actions">
      <button class="btn btn-ghost-white btn-sm" data-action="configure">
        ⚙️ Configurar Cookies
      </button>
      <button class="btn btn-secondary btn-sm" data-action="necessary">
        Solo Necesarias
      </button>
      <button class="btn btn-success" data-action="accept-all">
        ✅ Aceptar Todas
      </button>
    </div>
  </div>
</div>

💡 Mejores Prácticas

  • Cookies: Siempre incluye enlaces a políticas de privacidad y cookies
  • Accesibilidad: Usa colores con suficiente contraste y botones de cierre visibles
  • Mobile: Los banners se adaptan automáticamente en dispositivos móviles
  • Performance: Usa transform y opacity para animaciones suaves
  • UX: No abuses de banners múltiples que puedan molestar al usuario
  • Legal: Personaliza los textos según tu jurisdicción específica
En esta página