In Svelte 5, content can be passed to components in the form of [snippets](snippet) and rendered using [render tags](@render).
In legacy mode, content inside component tags is considered _slotted content_, which can be rendered by the component using a `<slot>` element:
```svelte
<!--- file: App.svelte --->
<script>
import Modal from './Modal.svelte';
</script>
<Modal>This is some slotted content</Modal>
```
```svelte
<!--- file: Modal.svelte --->
<divclass="modal">
<slot></slot>
</div>
```
> [!NOTE] If you want to render a regular `<slot>` element, you can use `<svelte:element this={'slot'} />`.
## Named slots
A component can have _named_ slots in addition to the default slot. On the parent side, add a `slot="..."` attribute to an element, component or [`<svelte:fragment>`](legacy-svelte-fragment) directly inside the component tags.
```svelte
<!--- file: App.svelte --->
<script>
import Modal from './Modal.svelte';
let open = true;
</script>
{#if open}
<Modal>
This is some slotted content
+++<divslot="buttons">+++
<buttonon:click={()=> open = false}>
close
</button>
+++</div>+++
</Modal>
{/if}
```
On the child side, add a corresponding `<slot name="...">` element:
```svelte
<!--- file: Modal.svelte --->
<divclass="modal">
<slot></slot>
<hr>
+++<slotname="buttons"></slot>+++
</div>
```
## Fallback content
If no slotted content is provided, a component can define fallback content by putting it inside the `<slot>` element:
```svelte
<slot>
This will be rendered if no slotted content is provided
</slot>
```
## Passing data to slotted content
Slots can be rendered zero or more times and can pass values _back_ to the parent using props. The parent exposes the values to the slot template using the `let:` directive.