Skip to content

Image

BImage es un wrapper semántico sobre <img> que renderiza un <figure>. Gestiona el object-fit, la carga diferida, y permite inyectar un pie de foto mediante el slot caption. No impone ningún estilo visual.


Importación

js
import { BImage } from '@bedrock/core/vue';
scss
@use '@bedrock/core/image';

Props

PropTipoDefaultDescripción
srcStringRequerido. URL de la imagen.
altString''Texto alternativo. Vacío solo para imágenes puramente decorativas.
fitStringnullValor de object-fit: cover, contain, fill, none. Aplica data-fit.
loadingString'lazy'Estrategia de carga: lazy o eager. Usar eager para imágenes above-the-fold.
widthString|NumbernullAncho intrínseco de la imagen. Ayuda al navegador a reservar espacio.
heightString|NumbernullAlto intrínseco de la imagen.
srcsetStringnullConjunto de fuentes responsivas.
sizesStringnullDescriptor de tamaños para srcset.
draggableBooleanfalsePor defecto el usuario no puede arrastrar la imagen.

Slots

SlotDescripción
captionPie de foto. Su presencia renderiza un <figcaption class="caption"> y aplica data-has-caption al <figure>.

Atributos de datos generados

AtributoCuándo aparece
data-fitCuando se pasa la prop fit. El valor es el nombre del modo: cover, contain, etc.
data-has-captionCuando el slot caption está presente.

Estructura HTML generada

html
<!-- Sin caption -->
<figure class="b-image" data-fit="cover">
  <img src="..." alt="..." loading="lazy" draggable="false" />
</figure>

<!-- Con caption -->
<figure class="b-image" data-has-caption>
  <img src="..." alt="..." loading="lazy" draggable="false" />
  <figcaption class="caption">Descripción de la imagen</figcaption>
</figure>

Ejemplos de uso

Básico

html
<BImage src="/foto.jpg" alt="Descripción de la foto" />

Con object-fit cover (para thumbnails)

html
<BImage src="/portada.jpg" alt="Portada" fit="cover" :width="800" :height="600" />

Carga eager (above the fold)

html
<BImage src="/hero.jpg" alt="Hero" fit="cover" loading="eager" />

Con pie de foto

html
<BImage src="/foto.jpg" alt="Paisaje">
  <template #caption>Vista desde la cima del Tibidabo, Barcelona.</template>
</BImage>

Responsiva con srcset

html
<BImage
  src="/imagen-800.jpg"
  alt="Imagen responsiva"
  srcset="/imagen-400.jpg 400w, /imagen-800.jpg 800w, /imagen-1200.jpg 1200w"
  sizes="(max-width: 600px) 100vw, 50vw"
/>

Estilos en el proyecto consumidor

scss
@use 'bedrock-config' as *;
@use '@bedrock/core/image';

.b-image {
  display: block;
  overflow: hidden;
  margin: 0;

  img {
    display: block;
    width: 100%;
    height: 100%;
  }

  @include attr(fit, cover)    { img { object-fit: cover; } }
  @include attr(fit, contain)  { img { object-fit: contain; } }
  @include attr(fit, fill)     { img { object-fit: fill; } }
  @include attr(fit, none)     { img { object-fit: none; } }

  .caption {
    padding: spacing(2);
    font-size: 0.75rem;
    color: color(text, subtle);
  }
}

Publicado bajo licencia MIT.