---
title: Sections
---
import AutoScreenshot from "@components/AutoScreenshot.astro"
import UtilityInjection from "@components/UtilityInjection.astro"
## Introduction
You may want to separate your fields into sections, each with a heading and description. To do this, you can use a section component:
```php
use Filament\Schemas\Components\Section;
Section::make('Rate limiting')
->description('Prevent abuse by limiting the number of requests per period')
->schema([
// ...
])
```
As well as allowing static values, the `make()` and `description()` methods also accept functions to dynamically calculate them. You can inject various utilities into the function as parameters.
You can also use a section without a header, which just wraps the components in a simple card:
```php
use Filament\Schemas\Components\Section;
Section::make()
->schema([
// ...
])
```
## Adding an icon to the section's header
You may add an [icon](../styling/icons) to the section's header using the `icon()` method:
```php
use Filament\Schemas\Components\Section;
use Filament\Support\Icons\Heroicon;
Section::make('Cart')
->description('The items you have selected for purchase')
->icon(Heroicon::ShoppingBag)
->schema([
// ...
])
```
As well as allowing a static value, the `icon()` method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
## Positioning the heading and description aside
You may use the `aside()` to align heading & description on the left, and the components inside a card on the right:
```php
use Filament\Schemas\Components\Section;
Section::make('Rate limiting')
->description('Prevent abuse by limiting the number of requests per period')
->aside()
->schema([
// ...
])
```
Optionally, you may pass a boolean value to control if the section should be aside or not:
```php
use Filament\Schemas\Components\Section;
Section::make('Rate limiting')
->description('Prevent abuse by limiting the number of requests per period')
->aside(FeatureFlag::active())
->schema([
// ...
])
```
As well as allowing a static value, the `aside()` method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
## Collapsing sections
Sections may be `collapsible()` to optionally hide long content:
```php
use Filament\Schemas\Components\Section;
Section::make('Cart')
->description('The items you have selected for purchase')
->schema([
// ...
])
->collapsible()
```
Your sections may be `collapsed()` by default:
```php
use Filament\Schemas\Components\Section;
Section::make('Cart')
->description('The items you have selected for purchase')
->schema([
// ...
])
->collapsed()
```
Optionally, the `collapsible()` and `collapsed()` methods accept a boolean value to control if the section should be collapsible and collapsed or not:
```php
use Filament\Schemas\Components\Section;
Section::make('Cart')
->description('The items you have selected for purchase')
->schema([
// ...
])
->collapsible(FeatureFlag::active())
->collapsed(FeatureFlag::active())
```
As well as allowing static values, the `collapsible()` and `collapsed()` methods also accept functions to dynamically calculate it. You can inject various utilities into the function as parameters.
### Persisting collapsed sections in the user's session
You can persist whether a section is collapsed in local storage using the `persistCollapsed()` method, so it will remain collapsed when the user refreshes the page:
```php
use Filament\Schemas\Components\Section;
Section::make('Cart')
->description('The items you have selected for purchase')
->schema([
// ...
])
->collapsible()
->persistCollapsed()
```
To persist the collapse state, the local storage needs a unique ID to store the state. This ID is generated based on the heading of the section. If your section does not have a heading, or if you have multiple sections with the same heading that you do not want to collapse together, you can manually specify the `id()` of that section to prevent an ID conflict:
```php
use Filament\Schemas\Components\Section;
Section::make('Cart')
->description('The items you have selected for purchase')
->schema([
// ...
])
->collapsible()
->persistCollapsed()
->id('order-cart')
```
Optionally, the `persistCollapsed()` method accepts a boolean value to control if the section should persist its collapsed state or not:
```php
use Filament\Schemas\Components\Section;
Section::make('Cart')
->description('The items you have selected for purchase')
->schema([
// ...
])
->collapsible()
->persistCollapsed(FeatureFlag::active())
```
As well as allowing static values, the `persistCollapsed()` and `id()` methods also accept functions to dynamically calculate them. You can inject various utilities into the function as parameters.
## Compact section styling
When nesting sections, you can use a more compact styling:
```php
use Filament\Schemas\Components\Section;
Section::make('Rate limiting')
->description('Prevent abuse by limiting the number of requests per period')
->schema([
// ...
])
->compact()
```
Optionally, the `compact()` method accepts a boolean value to control if the section should be compact or not:
```php
use Filament\Schemas\Components\Section;
Section::make('Rate limiting')
->description('Prevent abuse by limiting the number of requests per period')
->schema([
// ...
])
->compact(FeatureFlag::active())
```
As well as allowing a static value, the `compact()` method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
## Secondary section styling
By default, sections have a contrasting background color, which makes them stand out against a gray background. Secondary styling gives the section a less contrasting background, so it is usually slightly darker. This is a better styling when the background color behind the section is the same color as the default section background color, for example when a section is nested inside another section. Secondary sections can be created using the `secondary()` method:
```php
use Filament\Schemas\Components\Section;
Section::make('Notes')
->schema([
// ...
])
->secondary()
->compact()
```
Optionally, the `secondary()` method accepts a boolean value to control if the section should be secondary or not:
```php
use Filament\Schemas\Components\Section;
Section::make('Notes')
->schema([
// ...
])
->secondary(FeatureFlag::active())
```
## Inserting actions and other components in the header of a section
You may insert [actions](../actions) and any other schema component (usually [prime components](primes)) into the header of a section by passing an array of components to the `afterHeader()` method:
```php
use Filament\Schemas\Components\Section;
Section::make('Rate limiting')
->description('Prevent abuse by limiting the number of requests per period')
->afterHeader([
Action::make('test'),
])
->schema([
// ...
])
```
As well as allowing a static value, the `afterHeader()` method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
## Inserting actions and other components in the footer of a section
You may insert [actions](../actions) and any other schema component (usually [prime components](primes)) into the footer of a section by passing an array of components to the `footer()` method:
```php
use Filament\Schemas\Components\Section;
Section::make('Rate limiting')
->description('Prevent abuse by limiting the number of requests per period')
->schema([
// ...
])
->footer([
Action::make('test'),
])
```
As well as allowing a static value, the `footer()` method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
## Using grid columns within a section
You may use the `columns()` method to easily create a [grid](layouts#grid-system) within the section:
```php
use Filament\Schemas\Components\Section;
Section::make('Heading')
->schema([
// ...
])
->columns(2)
```
As well as allowing a static value, the `columns()` method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.