--- icon: IconDirectory title: 'layouts' head.title: Layouts directory --- # Layouts directory Nuxt provides a customizable layouts framework you can use throughout your application, ideal for extracting common UI or code patterns into reusable layout components. Layouts are placed in the `layouts/` directory and will be automatically loaded via asynchronous import when used. Layouts are used by setting a `layout` property as part of your page metadata (if you are using the `~/pages` integration), or by using the `` component. If you only have a single layout in your application, we recommend using [app.vue](/guide/directory-structure/app) instead. ::alert{type=warning} Unlike other components, your layouts must have a single root element to allow Nuxt to apply transitions between layout changes - and this root element cannot be a ``. :: ## Example: Enabling layouts with `app.vue` ```bash -| layouts/ ---| custom.vue -| app.vue ``` In your layout files, you'll need to use `` to define where the content of your layout will be loaded. For example: ```vue{}[layouts/custom.vue] ``` Here's how you might use that layout in `app.vue`: ```vue{}[app.vue] ``` ## Example: setting the layout with `~/pages` ```bash -| layouts/ ---| custom.vue -| pages/ ---| index.vue ``` You can set your layout within your page components like this: ```vue{}[pages/index.vue] ``` And in your `app.vue` you need to wrap the `NuxtPage` component with the `NuxtLayout` component. ```vue{}[app.vue] ``` ::alert{type=info} Learn more about [defining page meta](/guide/directory-structure/pages#page-metadata). :: ## Example: manual control with `~/pages` Even if you are using the `~/pages` integration, you can take full control by using the `` component (which is globally available throughout your application), by setting `layout: false`. ::code-group ```vue [layouts/custom.vue] ``` ```vue [pages/index.vue] ``` :: ::alert{type=warning} If you use `` within your pages, make sure it is not the root element (or disable layout/page transitions). :: ## Example: changing the layout You can also use a ref or computed property for your layout. ```vue ``` :LinkExample{link="/examples/routing/layouts"}