27 febrero, 2025
Optimizar el uso de imágenes desktop o mobile
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

SuscrÃbete a nuestro canal en Youtube
SuscrÃbirsePara 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:
- Se incluyen dos imágenes en el HTML: una para escritorio (
desktop-image.jpg
) y otra para móviles (mobile-image.jpg
). - 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). - 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:
- El contenedor
#responsive-image
está vacío inicialmente. - Usando JavaScript, se detecta el ancho de la pantalla con
window.innerWidth
. - Dependiendo del ancho, se inserta dinámicamente la imagen correspondiente dentro del contenedor.
- 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:
-
Instala la librería:
bash
composer require mobiledetect/mobiledetectlib
-
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'); }
-
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.