nuxt logo

Traducción de Documentación (No Oficial)

layouts

Nuxt proporciona un marco de layouts para extraer patrones comunes de UI en layouts reutilizables.

Para un mejor rendimiento, los componentes colocados en este directorio se cargarán automáticamente mediante importación asíncrona cuando se utilicen.

Habilitar Layouts

Los layouts se habilitan añadiendo <NuxtLayout> a tu app.vue:

app.vue
<template>
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
</template>

Para usar un layout:

  • Establece una propiedad layout en tu página con definePageMeta.
  • Establece la propiedad name de <NuxtLayout>.

El nombre del layout se normaliza a kebab-case, por lo que someLayout se convierte en some-layout.

Si no se especifica un layout, se usará layouts/default.vue.

Si solo tienes un único layout en tu aplicación, recomendamos usar app.vue en su lugar.

A diferencia de otros componentes, tus layouts deben tener un único elemento raíz para permitir que Nuxt aplique transiciones entre cambios de layout, y este elemento raíz no puede ser un <slot />.

Layout Predeterminado

Añade un ~/layouts/default.vue:

layouts/default.vue
<template>
  <div>
    <p>Algún contenido de layout predeterminado compartido en todas las páginas</p>
    <slot />
  </div>
</template>

En un archivo de layout, el contenido de la página se mostrará en el componente <slot />.

Layout Nombrado

Estructura de Directorios
-| layouts/
---| default.vue
---| custom.vue

Luego puedes usar el layout custom en tu página:

pages/about.vue
definePageMeta({
  layout: 'custom'
})
Ver también guide > directory-structure > pages#page-metadata

Puedes sobrescribir directamente el layout predeterminado para todas las páginas usando la propiedad name de <NuxtLayout>:

app.vue
<script setup lang="ts">
// Puedes elegir esto basado en una llamada a la API o el estado de inicio de sesión
const layout = "custom";
</script>

<template>
  <NuxtLayout :name="layout">
    <NuxtPage />
  </NuxtLayout>
</template>

Si tienes un layout en directorios anidados, el nombre del layout se basará en su propio directorio de ruta y nombre de archivo, eliminando los segmentos duplicados.

ArchivoNombre del Layout
~/layouts/desktop/default.vuedesktop-default
~/layouts/desktop-base/base.vuedesktop-base
~/layouts/desktop/index.vuedesktop

Para mayor claridad, recomendamos que el nombre del archivo del layout coincida con su nombre:

ArchivoNombre del Layout
~/layouts/desktop/DesktopDefault.vuedesktop-default
~/layouts/desktop-base/DesktopBase.vuedesktop-base
~/layouts/desktop/Desktop.vuedesktop
Editar y previsualizar el código de ejemploexamples > features > layouts

Cambiar el Layout Dinámicamente

También puedes usar el helper setPageLayout para cambiar el layout dinámicamente:

<script setup lang="ts">
function enableCustomLayout () {
  setPageLayout('custom')
}
definePageMeta({
  layout: false,
});
</script>

<template>
  <div>
    <button @click="enableCustomLayout">Actualizar layout</button>
  </div>
</template>
Editar y previsualizar el código de ejemploexamples > features > layouts

Sobrescribir un Layout por Página

Si estás usando páginas, puedes tomar el control total estableciendo layout: false y luego usando el componente <NuxtLayout> dentro de la página.

<script setup lang="ts">
definePageMeta({
  layout: false,
})
</script>

<template>
  <div>
    <NuxtLayout name="custom">
      <template #header> Algún contenido de plantilla de encabezado. </template>

      El resto de la página
    </NuxtLayout>
  </div>
</template>

Si usas <NuxtLayout> dentro de tus páginas, asegúrate de que no sea el elemento raíz (o desactiva las transiciones de layout/página).