- Installation
- Usage
- Accessibility
- Examples
- Base nav
- Horizontal alignment
- Vertical
- Tabs
- Pills
- Underline
- Fill and justify
- Responsive flex
- Tabs with dropdowns
- Pills with dropdowns
- JavaScript tabs
- JavaScript nav
- JavaScript pills
- Vertical pills
- Fade effect
- API Reference
-
Nav -
Nav:Item -
Nav:Link -
TabContent -
TabPane
Navs and Tabs
Build navigation components and accessible dynamic tabbed interfaces with Bootstrap.
<div>
<twig:Nav type="tabs" role="tablist" class="mb-3">
<twig:Nav:Item presentation>
<twig:Nav:Link tag="button" id="demo-home-tab" target="#demo-home" active>Home</twig:Nav:Link>
</twig:Nav:Item>
<twig:Nav:Item presentation>
<twig:Nav:Link tag="button" id="demo-profile-tab" target="#demo-profile">Profile</twig:Nav:Link>
</twig:Nav:Item>
<twig:Nav:Item presentation>
<twig:Nav:Link tag="button" id="demo-contact-tab" target="#demo-contact">Contact</twig:Nav:Link>
</twig:Nav:Item>
</twig:Nav>
<twig:TabContent>
<twig:TabPane id="demo-home" labelledBy="demo-home-tab" active fade>Home tab content.</twig:TabPane>
<twig:TabPane id="demo-profile" labelledBy="demo-profile-tab" fade>Profile tab content.</twig:TabPane>
<twig:TabPane id="demo-contact" labelledBy="demo-contact-tab" fade>Contact tab content.</twig:TabPane>
</twig:TabContent>
</div>
Installation
php bin/console ux:install navs-tabs --kit bootstrap
Install the following Composer dependencies:
composer require twig/extra-bundle twig/html-extra:^3.12.0
Install the following front-end dependencies:
npm install bootstrap@^5.3.0
# ...or with Symfony AssetMapper
php bin/console importmap:require bootstrap bootstrap/dist/css/bootstrap.min.css
Copy the following file(s) into your app:
{# @prop tag 'ul'|'nav'|'div' The HTML element used for the navigation container. #}
{# @prop type 'tabs'|'pills'|'underline'|null The Bootstrap navigation style. #}
{# @prop fill boolean Whether items proportionally fill the available width. #}
{# @prop justified boolean Whether items use equal widths. #}
{# @prop vertical boolean Whether items are stacked vertically. #}
{# @prop align 'start'|'center'|'end'|null The horizontal alignment of the navigation items. #}
{# @prop role string|null The ARIA role applied to the navigation container. #}
{# @block content The navigation links or `Nav:Item` components. #}
{%- props
tag = 'ul',
type = null,
fill = false,
justified = false,
vertical = false,
align = null,
role = null
-%}
{%- set final_tag = tag in ['nav', 'div'] ? tag : 'ul' -%}
{%- set nav_classes = html_classes({
nav: true,
('nav-' ~ type): type in ['tabs', 'pills', 'underline'],
'nav-fill': fill,
'nav-justified': justified,
'flex-column': vertical,
('justify-content-' ~ align): align in ['start', 'center', 'end'],
}) -%}
{%- set default_attrs = {class: nav_classes} -%}
{%- if role not in [null, ''] -%}
{%- set default_attrs = default_attrs|merge({role: role}) -%}
{%- endif -%}
<{{ final_tag }} {{ attributes.defaults(default_attrs) }}>
{%- block content -%}{% endblock -%}
</{{ final_tag }}>
{# @prop presentation boolean Whether the item has the presentation role in a dynamic tab list. #}
{# @block content The navigation link, typically a `Nav:Link` component. #}
{%- props presentation = false -%}
{%- set default_attrs = {class: 'nav-item'} -%}
{%- if presentation -%}
{%- set default_attrs = default_attrs|merge({role: 'presentation'}) -%}
{%- endif -%}
<li {{ attributes.defaults(default_attrs) }}>
{%- block content -%}{% endblock -%}
</li>
{# @prop tag 'a'|'button' The HTML element used for the navigation control. #}
{# @prop href string|null The destination used by anchor navigation links. #}
{# @prop id string|null The unique identifier of a dynamic tab control. #}
{# @prop target string|null The selector of the associated tab panel. #}
{# @prop toggle 'tab'|'pill'|null The Bootstrap JavaScript behavior. #}
{# @prop active boolean Whether the navigation link or tab is active. #}
{# @prop disabled boolean Whether the navigation link or tab is disabled. #}
{# @prop content string The fallback label when no content block is provided. #}
{# @block content The navigation link or tab label. #}
{%- props
tag = 'a',
href = '#',
id = null,
target = null,
toggle = null,
active = false,
disabled = false,
content = ''
-%}
{%- set final_tag = tag == 'button' ? 'button' : 'a' -%}
{%- set link_classes = html_classes('nav-link', {
active: active,
disabled: disabled,
}) -%}
{%- set default_attrs = {class: link_classes} -%}
{%- if id not in [null, ''] -%}
{%- set default_attrs = default_attrs|merge({id: id}) -%}
{%- endif -%}
{%- if target not in [null, ''] -%}
{%- set default_attrs = default_attrs|merge({
role: 'tab',
'data-bs-toggle': toggle in ['tab', 'pill'] ? toggle : 'tab',
'data-bs-target': target,
'aria-controls': target|trim('#'),
'aria-selected': active ? 'true' : 'false',
}) -%}
{%- elseif active -%}
{%- set default_attrs = default_attrs|merge({'aria-current': 'page'}) -%}
{%- endif -%}
{%- if final_tag == 'button' -%}
{%- set default_attrs = default_attrs|merge({type: 'button'}) -%}
{%- if disabled -%}
{%- set default_attrs = default_attrs|merge({disabled: true}) -%}
{%- endif -%}
{%- elseif disabled -%}
{%- set default_attrs = default_attrs|merge({'aria-disabled': 'true', tabindex: '-1'}) -%}
{%- elseif href not in [null, ''] -%}
{%- set default_attrs = default_attrs|merge({href: href}) -%}
{%- endif -%}
<{{ final_tag }} {{ attributes.defaults(default_attrs) }}>
{%- block content -%}{{- content -}}{%- endblock -%}
</{{ final_tag }}>
{# @block content The associated `TabPane` components. #}
<div {{ attributes.defaults({class: 'tab-content'}) }}>
{%- block content -%}{% endblock -%}
</div>
{# @prop id string The unique identifier targeted by a tab control. #}
{# @prop labelledBy string|null The identifier of the tab control labelling the panel. #}
{# @prop active boolean Whether the panel is initially visible. #}
{# @prop fade boolean Whether the panel uses Bootstrap's fade transition. #}
{# @block content The tab panel content. #}
{%- props
id,
labelledBy = null,
active = false,
fade = false
-%}
{%- set pane_classes = html_classes('tab-pane', {
fade: fade,
show: fade and active,
active: active,
}) -%}
{%- set default_attrs = {
class: pane_classes,
id: id,
role: 'tabpanel',
tabindex: '0',
} -%}
{%- if labelledBy not in [null, ''] -%}
{%- set default_attrs = default_attrs|merge({'aria-labelledby': labelledBy}) -%}
{%- endif -%}
<div {{ attributes.defaults(default_attrs) }}>
{%- block content -%}{% endblock -%}
</div>
Usage
<twig:Nav>
<twig:Nav:Item>
<twig:Nav:Link href="#" active>Active</twig:Nav:Link>
</twig:Nav:Item>
<twig:Nav:Item>
<twig:Nav:Link href="#">Link</twig:Nav:Link>
</twig:Nav:Item>
<twig:Nav:Item>
<twig:Nav:Link disabled>Disabled</twig:Nav:Link>
</twig:Nav:Item>
</twig:Nav>
<twig:TabContent>
<twig:TabPane id="demo-home" labelledBy="demo-home-tab" active fade>
Home tab content.
</twig:TabPane>
<twig:TabPane id="demo-profile" labelledBy="demo-profile-tab" fade>
Profile tab content.
</twig:TabPane>
<twig:TabPane id="demo-contact" labelledBy="demo-contact-tab" fade>
Contact tab content.
</twig:TabPane>
</twig:TabContent>
Accessibility
Use aria-current="page" for active navigation links. Dynamic tab interfaces instead need role="tablist", role="tab", role="tabpanel", and the aria-selected, aria-controls, and aria-labelledby relationships shown in the examples.
Prefer buttons for dynamic tabs. Do not put role="tablist" directly on a nav landmark; place it on a nested div instead. Vertical tab lists also need aria-orientation="vertical".
Examples
Base nav
Build navigation with list markup or direct links inside a nav element.
<div class="d-flex flex-column gap-3">
<twig:Nav>
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
<twig:Nav tag="nav" aria-label="Primary navigation">
<twig:Nav:Link href="#" active>Active</twig:Nav:Link>
<twig:Nav:Link href="#">Link</twig:Nav:Link>
<twig:Nav:Link href="#">Link</twig:Nav:Link>
<twig:Nav:Link disabled>Disabled</twig:Nav:Link>
</twig:Nav>
</div>
Horizontal alignment
Align navigation items with Bootstrap flexbox utilities through the align prop.
<div class="d-flex flex-column gap-3">
<twig:Nav align="center">
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
<twig:Nav align="end">
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
</div>
Vertical
Stack navigation links vertically with list or landmark markup.
<div class="d-flex gap-5">
<twig:Nav vertical>
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
<twig:Nav tag="nav" vertical aria-label="Secondary navigation">
<twig:Nav:Link href="#" active>Active</twig:Nav:Link>
<twig:Nav:Link href="#">Link</twig:Nav:Link>
<twig:Nav:Link href="#">Link</twig:Nav:Link>
<twig:Nav:Link disabled>Disabled</twig:Nav:Link>
</twig:Nav>
</div>
Tabs
Apply the static tab appearance to navigation links.
<twig:Nav type="tabs">
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
Pills
Render active navigation links with Bootstrap's pill style.
<twig:Nav type="pills">
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
Underline
Use the underline style introduced in Bootstrap 5.3.
<twig:Nav type="underline">
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
Fill and justify
Fill the available width proportionally or give every navigation item the same width.
<div class="d-flex flex-column gap-3">
<twig:Nav type="pills" fill>
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Much longer nav link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
<twig:Nav tag="nav" type="pills" justified aria-label="Equal width navigation">
<twig:Nav:Link href="#" active>Active</twig:Nav:Link>
<twig:Nav:Link href="#">Much longer nav link</twig:Nav:Link>
<twig:Nav:Link href="#">Link</twig:Nav:Link>
<twig:Nav:Link disabled>Disabled</twig:Nav:Link>
</twig:Nav>
</div>
Responsive flex
Combine the component with responsive flex utilities for breakpoint-specific layouts.
<twig:Nav tag="nav" type="pills" class="flex-column flex-sm-row" aria-label="Responsive navigation">
<twig:Nav:Link href="#" active class="flex-sm-fill text-sm-center">Active</twig:Nav:Link>
<twig:Nav:Link href="#" class="flex-sm-fill text-sm-center">Longer nav link</twig:Nav:Link>
<twig:Nav:Link href="#" class="flex-sm-fill text-sm-center">Link</twig:Nav:Link>
<twig:Nav:Link disabled class="flex-sm-fill text-sm-center">Disabled</twig:Nav:Link>
</twig:Nav>
Tabs with dropdowns
Add a Bootstrap dropdown to a static tabs navigation.
<twig:Nav type="tabs">
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item class="dropdown">
<twig:Nav:Link href="#" class="dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false">Dropdown</twig:Nav:Link>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
</twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
Pills with dropdowns
Add a Bootstrap dropdown to a static pills navigation.
<twig:Nav type="pills">
<twig:Nav:Item><twig:Nav:Link href="#" active>Active</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item class="dropdown">
<twig:Nav:Link href="#" class="dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false">Dropdown</twig:Nav:Link>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
</twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link href="#">Link</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item><twig:Nav:Link disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
JavaScript tabs
Connect tab buttons to focusable content panels with Bootstrap's Tab plugin.
<twig:Nav type="tabs" role="tablist" class="mb-3">
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="home-tab" target="#home-tab-pane" active>Home</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="profile-tab" target="#profile-tab-pane">Profile</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="contact-tab" target="#contact-tab-pane">Contact</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="disabled-tab" target="#disabled-tab-pane" disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
<twig:TabContent>
<twig:TabPane id="home-tab-pane" labelledBy="home-tab" active fade>This is the Home tab content.</twig:TabPane>
<twig:TabPane id="profile-tab-pane" labelledBy="profile-tab" fade>This is the Profile tab content.</twig:TabPane>
<twig:TabPane id="contact-tab-pane" labelledBy="contact-tab" fade>This is the Contact tab content.</twig:TabPane>
<twig:TabPane id="disabled-tab-pane" labelledBy="disabled-tab" fade>This tab is disabled.</twig:TabPane>
</twig:TabContent>
JavaScript nav
Keep the navigation landmark while placing role="tablist" on a nested container.
<nav aria-label="Account sections">
<twig:Nav tag="div" type="tabs" role="tablist" class="mb-3">
<twig:Nav:Link tag="button" id="nav-home-tab" target="#nav-home" active>Home</twig:Nav:Link>
<twig:Nav:Link tag="button" id="nav-profile-tab" target="#nav-profile">Profile</twig:Nav:Link>
<twig:Nav:Link tag="button" id="nav-contact-tab" target="#nav-contact">Contact</twig:Nav:Link>
<twig:Nav:Link tag="button" id="nav-disabled-tab" target="#nav-disabled" disabled>Disabled</twig:Nav:Link>
</twig:Nav>
</nav>
<twig:TabContent>
<twig:TabPane id="nav-home" labelledBy="nav-home-tab" active fade>This is the Home tab content.</twig:TabPane>
<twig:TabPane id="nav-profile" labelledBy="nav-profile-tab" fade>This is the Profile tab content.</twig:TabPane>
<twig:TabPane id="nav-contact" labelledBy="nav-contact-tab" fade>This is the Contact tab content.</twig:TabPane>
<twig:TabPane id="nav-disabled" labelledBy="nav-disabled-tab" fade>This tab is disabled.</twig:TabPane>
</twig:TabContent>
JavaScript pills
Use the same dynamic tab semantics with Bootstrap's pill appearance.
<div>
<twig:Nav type="pills" role="tablist" class="mb-3">
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="pills-home-tab" target="#pills-home" toggle="pill" active>Home</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="pills-profile-tab" target="#pills-profile" toggle="pill">Profile</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="pills-contact-tab" target="#pills-contact" toggle="pill">Contact</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="pills-disabled-tab" target="#pills-disabled" toggle="pill" disabled>Disabled</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
<twig:TabContent>
<twig:TabPane id="pills-home" labelledBy="pills-home-tab" active fade>This is the Home pill content.</twig:TabPane>
<twig:TabPane id="pills-profile" labelledBy="pills-profile-tab" fade>This is the Profile pill content.</twig:TabPane>
<twig:TabPane id="pills-contact" labelledBy="pills-contact-tab" fade>This is the Contact pill content.</twig:TabPane>
<twig:TabPane id="pills-disabled" labelledBy="pills-disabled-tab" fade>This pill is disabled.</twig:TabPane>
</twig:TabContent>
</div>
Vertical pills
Build a vertical dynamic tab interface and expose its orientation to assistive technologies.
<div class="d-flex align-items-start">
<twig:Nav tag="div" type="pills" vertical role="tablist" class="me-3" aria-orientation="vertical">
<twig:Nav:Link tag="button" id="vertical-home-tab" target="#vertical-home" toggle="pill" active>Home</twig:Nav:Link>
<twig:Nav:Link tag="button" id="vertical-profile-tab" target="#vertical-profile" toggle="pill">Profile</twig:Nav:Link>
<twig:Nav:Link tag="button" id="vertical-disabled-tab" target="#vertical-disabled" toggle="pill" disabled>Disabled</twig:Nav:Link>
<twig:Nav:Link tag="button" id="vertical-messages-tab" target="#vertical-messages" toggle="pill">Messages</twig:Nav:Link>
<twig:Nav:Link tag="button" id="vertical-settings-tab" target="#vertical-settings" toggle="pill">Settings</twig:Nav:Link>
</twig:Nav>
<twig:TabContent>
<twig:TabPane id="vertical-home" labelledBy="vertical-home-tab" active fade>Home content.</twig:TabPane>
<twig:TabPane id="vertical-profile" labelledBy="vertical-profile-tab" fade>Profile content.</twig:TabPane>
<twig:TabPane id="vertical-disabled" labelledBy="vertical-disabled-tab" fade>Disabled content.</twig:TabPane>
<twig:TabPane id="vertical-messages" labelledBy="vertical-messages-tab" fade>Messages content.</twig:TabPane>
<twig:TabPane id="vertical-settings" labelledBy="vertical-settings-tab" fade>Settings content.</twig:TabPane>
</twig:TabContent>
</div>
Fade effect
Add Bootstrap's fade transition to tab panels. The initially active panel also receives show.
<div class="w-75">
<twig:Nav type="tabs" role="tablist" class="mb-3">
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="fade-home-tab" target="#fade-home" active>Home</twig:Nav:Link></twig:Nav:Item>
<twig:Nav:Item presentation><twig:Nav:Link tag="button" id="fade-profile-tab" target="#fade-profile">Profile</twig:Nav:Link></twig:Nav:Item>
</twig:Nav>
<twig:TabContent>
<twig:TabPane id="fade-home" labelledBy="fade-home-tab" active fade>The active panel also receives the `show` class.</twig:TabPane>
<twig:TabPane id="fade-profile" labelledBy="fade-profile-tab" fade>Inactive panels only receive the `fade` class.</twig:TabPane>
</twig:TabContent>
</div>
API Reference
<twig:Nav>
| Prop | Type | Default |
|---|---|---|
tag The HTML element used for the navigation container.
|
'ul'|'nav'|'div' |
'ul' |
type The Bootstrap navigation style.
|
'tabs'|'pills'|'underline'|null |
null |
fill Whether items proportionally fill the available width.
|
boolean |
false |
justified Whether items use equal widths.
|
boolean |
false |
vertical Whether items are stacked vertically.
|
boolean |
false |
align The horizontal alignment of the navigation items.
|
'start'|'center'|'end'|null |
null |
role The ARIA role applied to the navigation container.
|
string|null |
null |
| Block | Description |
|---|---|
content |
The navigation links or Nav:Item components. |
<twig:Nav:Item>
| Prop | Type | Default |
|---|---|---|
presentation Whether the item has the presentation role in a dynamic tab list.
|
boolean |
false |
| Block | Description |
|---|---|
content |
The navigation link, typically a Nav:Link component. |
<twig:Nav:Link>
| Prop | Type | Default |
|---|---|---|
tag The HTML element used for the navigation control.
|
'a'|'button' |
'a' |
href The destination used by anchor navigation links.
|
string|null |
'#' |
id The unique identifier of a dynamic tab control.
|
string|null |
null |
target The selector of the associated tab panel.
|
string|null |
null |
toggle The Bootstrap JavaScript behavior.
|
'tab'|'pill'|null |
null |
active Whether the navigation link or tab is active.
|
boolean |
false |
disabled Whether the navigation link or tab is disabled.
|
boolean |
false |
content The fallback label when no content block is provided.
|
string |
'' |
| Block | Description |
|---|---|
content |
The navigation link or tab label. |
<twig:TabContent>
| Block | Description |
|---|---|
content |
The associated TabPane components. |
<twig:TabPane>
| Prop | Type | Default |
|---|---|---|
id The unique identifier targeted by a tab control.
|
string |
- |
labelledBy The identifier of the tab control labelling the panel.
|
string|null |
null |
active Whether the panel is initially visible.
|
boolean |
false |
fade Whether the panel uses Bootstrap's fade transition.
|
boolean |
false |
| Block | Description |
|---|---|
content |
The tab panel content. |