Inicio » Blog »

27 febrero, 2025

Optimizar el uso de imágenes desktop o mobile

#Laravel

Para mostrar una imagen diferente dependiendo del dispositivo (escritorio o móvil) en Laravel, puedes utilizar varias técnicas. Un ejemplo práctico en Laravel

Optimizar el uso de imágenes desktop o mobile

Suscríbete a nuestro canal en Youtube

Suscríbirse

Para mostrar una imagen diferente dependiendo del dispositivo (escritorio o móvil) en Laravel, puedes utilizar varias técnicas. A continuación, te explico un enfoque que combina Blade templates y CSS media queries , así como otra alternativa utilizando JavaScript .


1. Usando CSS Media Queries

La forma más común y eficiente es usar CSS para cargar imágenes diferentes según el ancho de la pantalla. Esto se puede hacer directamente en tu archivo Blade sin necesidad de lógica compleja en PHP.

Ejemplo:

html

<!-- resources/views/your-view.blade.php -->

<div class="responsive-image">
    <img src="{{ asset('images/desktop-image.jpg') }}" alt="Imagen para escritorio" class="desktop-image">
    <img src="{{ asset('images/mobile-image.jpg') }}" alt="Imagen para móvil" class="mobile-image">
</div>

<style>
    /* Por defecto, ocultamos la imagen de escritorio */
    .desktop-image {
        display: none;
    }

    /* Mostramos la imagen de escritorio solo en pantallas grandes */
    @media (min-width: 768px) {
        .desktop-image {
            display: block;
        }
        .mobile-image {
            display: none;
        }
    }
</style>

Explicación:

  1. Se incluyen dos imágenes en el HTML: una para escritorio (desktop-image.jpg) y otra para móviles (mobile-image.jpg).
  2. Usando @media, se define que la imagen de escritorio se muestre solo cuando el ancho de la pantalla sea mayor o igual a 768px (puedes ajustar este valor según tus necesidades).
  3. La imagen de móvil se muestra por defecto, pero se oculta cuando se cumple la condición de escritorio.

2. Usando JavaScript para Detectar el Dispositivo

Si prefieres detectar el dispositivo mediante JavaScript, puedes cargar dinámicamente la imagen adecuada.

Ejemplo:

html

<!-- resources/views/your-view.blade.php -->

<div id="responsive-image"></div>

<script>
    // Detectar el ancho de la pantalla
    function loadImageBasedOnDevice() {
        const imageContainer = document.getElementById('responsive-image');
        if (window.innerWidth >= 768) {
            // Imagen para escritorio
            imageContainer.innerHTML = `<img src="{{ asset('images/desktop-image.jpg') }}" alt="Imagen para escritorio">`;
        } else {
            // Imagen para móvil
            imageContainer.innerHTML = `<img src="{{ asset('images/mobile-image.jpg') }}" alt="Imagen para móvil">`;
        }
    }

    // Cargar la imagen al cargar la página
    window.addEventListener('load', loadImageBasedOnDevice);

    // Actualizar la imagen si se cambia el tamaño de la ventana
    window.addEventListener('resize', loadImageBasedOnDevice);
</script>

Explicación:

  1. El contenedor #responsive-image está vacío inicialmente.
  2. Usando JavaScript, se detecta el ancho de la pantalla con window.innerWidth.
  3. Dependiendo del ancho, se inserta dinámicamente la imagen correspondiente dentro del contenedor.
  4. Se añaden listeners para manejar tanto la carga inicial como los cambios de tamaño de la ventana.

3. Usando Laravel y Blade Condicionales (Opcional)

Si deseas manejar la lógica desde el backend, puedes detectar el tipo de dispositivo usando librerías como Mobile Detect . Sin embargo, esta aproximación no es recomendada porque mezcla demasiada lógica de presentación con el backend.

Ejemplo con Mobile Detect:

  1. Instala la librería:

    bash

    composer require mobiledetect/mobiledetectlib
  2. Usa la librería en tu controlador o vista:

    php

    use Detection\MobileDetect;
    
    $detect = new MobileDetect;
    
    if ($detect->isMobile()) {
        $imagePath = asset('images/mobile-image.jpg');
    } else {
        $imagePath = asset('images/desktop-image.jpg');
    }
  3. En tu Blade:

    html

    <img src="{{ $imagePath }}" alt="Imagen responsiva">

Nota:

Este enfoque tiene la desventaja de que requiere procesamiento adicional en el servidor y no es tan flexible como las soluciones basadas en CSS o JavaScript.


Leido 606 veces | 0 usuarios

Código fuente no disponible.

Compartir link del tutorial con tus amigos


Laravel Página Web Administrable

USD 37.00

Descarga del código fuente

Laravel Página Web Administrable

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú