@patternfly/patternfly
Version:
Assets, source, tooling, and content for PatternFly 4
793 lines (759 loc) • 25 kB
Markdown
---
id: Application launcher
section: components
subsection: menus
cssPrefix: pf-v5-c-app-launcher
deprecated: true
---import './application-launcher.css'
## Examples
### Collapsed
```html
<nav
class="pf-v5-c-app-launcher"
aria-label="Application launcher"
id="application-launcher-collapsed"
>
<button
class="pf-v5-c-app-launcher__toggle"
type="button"
id="application-launcher-collapsed-button"
aria-expanded="false"
aria-label="Application launcher"
>
<i class="fas fa-th" aria-hidden="true"></i>
</button>
<ul
class="pf-v5-c-app-launcher__menu"
aria-labelledby="application-launcher-collapsed-button"
role="menu"
hidden
>
<li role="none">
<a class="pf-v5-c-app-launcher__menu-item" role="menuitem" href="#">Link</a>
</li>
<li role="none">
<button
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
type="button"
>Action</button>
</li>
<li class="pf-v5-c-divider" role="separator"></li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item pf-m-disabled"
role="menuitem"
href="#"
aria-disabled="true"
tabindex="-1"
>Disabled link</a>
</li>
</ul>
</nav>
```
### Disabled
```html
<nav
class="pf-v5-c-app-launcher"
aria-label="Application launcher"
id="application-launcher-disabled"
>
<button
class="pf-v5-c-app-launcher__toggle"
type="button"
id="application-launcher-disabled-button"
aria-expanded="false"
aria-label="Application launcher"
disabled
>
<i class="fas fa-th" aria-hidden="true"></i>
</button>
<ul
class="pf-v5-c-app-launcher__menu"
aria-labelledby="application-launcher-disabled-button"
role="menu"
hidden
>
<li role="none">
<a class="pf-v5-c-app-launcher__menu-item" role="menuitem" href="#">Link</a>
</li>
<li role="none">
<button
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
type="button"
>Action</button>
</li>
<li class="pf-v5-c-divider" role="separator"></li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item pf-m-disabled"
role="menuitem"
href="#"
aria-disabled="true"
tabindex="-1"
>Disabled link</a>
</li>
</ul>
</nav>
```
### Expanded
```html
<nav
class="pf-v5-c-app-launcher pf-m-expanded"
aria-label="Application launcher"
id="application-launcher-expanded"
>
<button
class="pf-v5-c-app-launcher__toggle"
type="button"
id="application-launcher-expanded-button"
aria-expanded="true"
aria-label="Application launcher"
>
<i class="fas fa-th" aria-hidden="true"></i>
</button>
<ul
class="pf-v5-c-app-launcher__menu"
aria-labelledby="application-launcher-expanded-button"
role="menu"
>
<li role="none">
<a class="pf-v5-c-app-launcher__menu-item" role="menuitem" href="#">Link</a>
</li>
<li role="none">
<button
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
type="button"
>Action</button>
</li>
<li class="pf-v5-c-divider" role="separator"></li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item pf-m-disabled"
role="menuitem"
href="#"
aria-disabled="true"
tabindex="-1"
>Disabled link</a>
</li>
</ul>
</nav>
```
### Aligned right
```html
<nav
class="pf-v5-c-app-launcher pf-m-expanded"
aria-label="Application launcher"
id="application-launcher-aligned-right"
>
<button
class="pf-v5-c-app-launcher__toggle"
type="button"
id="application-launcher-aligned-right-button"
aria-expanded="true"
aria-label="Application launcher"
>
<i class="fas fa-th" aria-hidden="true"></i>
</button>
<ul
class="pf-v5-c-app-launcher__menu pf-m-align-right"
aria-labelledby="application-launcher-aligned-right-button"
role="menu"
>
<li role="none">
<a class="pf-v5-c-app-launcher__menu-item" role="menuitem" href="#">Link</a>
</li>
<li role="none">
<button
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
type="button"
>Action</button>
</li>
<li class="pf-v5-c-divider" role="separator"></li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item pf-m-disabled"
role="menuitem"
href="#"
aria-disabled="true"
tabindex="-1"
>Disabled link</a>
</li>
</ul>
</nav>
```
### Aligned top
```html
<nav
class="pf-v5-c-app-launcher pf-m-expanded pf-m-top"
aria-label="Application launcher"
id="application-launcher-aligned-top"
>
<button
class="pf-v5-c-app-launcher__toggle"
type="button"
id="application-launcher-aligned-top-button"
aria-expanded="true"
aria-label="Application launcher"
>
<i class="fas fa-th" aria-hidden="true"></i>
</button>
<ul
class="pf-v5-c-app-launcher__menu"
aria-labelledby="application-launcher-aligned-top-button"
role="menu"
>
<li role="none">
<a class="pf-v5-c-app-launcher__menu-item" role="menuitem" href="#">Link</a>
</li>
<li role="none">
<button
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
type="button"
>Action</button>
</li>
<li class="pf-v5-c-divider" role="separator"></li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item pf-m-disabled"
role="menuitem"
href="#"
aria-disabled="true"
tabindex="-1"
>Disabled link</a>
</li>
</ul>
</nav>
```
### With sections and dividers between sections
```html
<nav
class="pf-v5-c-app-launcher pf-m-expanded"
aria-label="Application launcher"
id="application-launcher-divided-sections"
>
<button
class="pf-v5-c-app-launcher__toggle"
type="button"
id="application-launcher-divided-sections-button"
aria-expanded="true"
aria-label="Application launcher"
>
<i class="fas fa-th" aria-hidden="true"></i>
</button>
<div class="pf-v5-c-app-launcher__menu">
<section class="pf-v5-c-app-launcher__group">
<ul role="menu">
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Link not in group</a>
</li>
</ul>
</section>
<hr class="pf-v5-c-divider" />
<section class="pf-v5-c-app-launcher__group">
<h1 class="pf-v5-c-app-launcher__group-title">Group 1</h1>
<ul role="menu">
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Group 1 link</a>
</li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Group 1 link</a>
</li>
</ul>
</section>
<hr class="pf-v5-c-divider" />
<section class="pf-v5-c-app-launcher__group">
<h1 class="pf-v5-c-app-launcher__group-title">Group 2</h1>
<ul role="menu">
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Group 2 link</a>
</li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Group 2 link</a>
</li>
</ul>
</section>
</div>
</nav>
```
### With sections and dividers between items
```html
<nav
class="pf-v5-c-app-launcher pf-m-expanded"
aria-label="Application launcher"
id="application-launcher-divided-items"
>
<button
class="pf-v5-c-app-launcher__toggle"
type="button"
id="application-launcher-divided-items-button"
aria-expanded="true"
aria-label="Application launcher"
>
<i class="fas fa-th" aria-hidden="true"></i>
</button>
<div class="pf-v5-c-app-launcher__menu">
<section class="pf-v5-c-app-launcher__group">
<ul role="menu">
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Link not in group</a>
</li>
<li class="pf-v5-c-divider" role="separator"></li>
</ul>
</section>
<section class="pf-v5-c-app-launcher__group">
<h1 class="pf-v5-c-app-launcher__group-title">Group 1</h1>
<ul role="menu">
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Group 1 link</a>
</li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Group 1 link</a>
</li>
<li class="pf-v5-c-divider" role="separator"></li>
</ul>
</section>
<section class="pf-v5-c-app-launcher__group">
<h1 class="pf-v5-c-app-launcher__group-title">Group 2</h1>
<ul role="menu">
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Group 2 link</a>
</li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item"
role="menuitem"
href="#"
>Group 2 link</a>
</li>
</ul>
</section>
</div>
</nav>
```
### With sections, dividers, icons, and external links
```html
<nav
class="pf-v5-c-app-launcher pf-m-expanded"
aria-label="Application launcher"
id="application-launcher-sections-dividers-icons-links"
>
<button
class="pf-v5-c-app-launcher__toggle"
type="button"
id="application-launcher-sections-dividers-icons-links-button"
aria-expanded="true"
aria-label="Application launcher"
>
<i class="fas fa-th" aria-hidden="true"></i>
</button>
<div class="pf-v5-c-app-launcher__menu">
<section class="pf-v5-c-app-launcher__group">
<ul role="menu">
<li role="none">
<a class="pf-v5-c-app-launcher__menu-item" role="menuitem" href="#">
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Link not in group
</a>
</li>
</ul>
</section>
<li class="pf-v5-c-divider" role="separator"></li>
<section class="pf-v5-c-app-launcher__group">
<h1 class="pf-v5-c-app-launcher__group-title">Group 1</h1>
<ul role="menu">
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item pf-m-external"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Group 1 link
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
</li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item pf-m-external"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Group 1 link
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
</li>
<li class="pf-v5-c-divider" role="separator"></li>
</ul>
</section>
<section class="pf-v5-c-app-launcher__group">
<h1 class="pf-v5-c-app-launcher__group-title">Group 2</h1>
<ul role="menu">
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item pf-m-external"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Group 2 link
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
</li>
<li role="none">
<a
class="pf-v5-c-app-launcher__menu-item pf-m-external"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Group 2 link
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
</li>
</ul>
</section>
</div>
</nav>
```
### Favorites
```html
<nav
class="pf-v5-c-app-launcher pf-m-expanded"
aria-label="Application launcher"
id="app-launcher-favorites"
>
<button
class="pf-v5-c-app-launcher__toggle"
type="button"
id="app-launcher-favorites-button"
aria-expanded="true"
aria-label="Application launcher"
>
<i class="fas fa-th" aria-hidden="true"></i>
</button>
<div class="pf-v5-c-app-launcher__menu">
<div class="pf-v5-c-app-launcher__menu-search">
<div class="pf-v5-c-text-input-group">
<div class="pf-v5-c-text-input-group__main pf-m-icon">
<span class="pf-v5-c-text-input-group__text">
<span class="pf-v5-c-text-input-group__icon">
<i class="fas fa-fw fa-search"></i>
</span>
<input
class="pf-v5-c-text-input-group__text-input"
type="text"
placeholder="Search"
value
aria-label="Search input"
/>
</span>
</div>
</div>
</div>
<section class="pf-v5-c-app-launcher__group">
<h1 class="pf-v5-c-app-launcher__group-title">Favorites</h1>
<ul role="menu">
<li
class="pf-v5-c-app-launcher__menu-wrapper pf-m-external pf-m-favorite"
role="none"
>
<a
class="pf-v5-c-app-launcher__menu-item pf-m-link"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Link 2
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
<button
class="pf-v5-c-app-launcher__menu-item pf-m-action"
type="button"
aria-label="Favorite"
>
<i class="fas fa-star" aria-hidden="true"></i>
</button>
</li>
<li
class="pf-v5-c-app-launcher__menu-wrapper pf-m-external pf-m-favorite"
role="none"
>
<a
class="pf-v5-c-app-launcher__menu-item pf-m-link"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Link 3
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
<button
class="pf-v5-c-app-launcher__menu-item pf-m-action"
type="button"
aria-label="Favorite"
>
<i class="fas fa-star" aria-hidden="true"></i>
</button>
</li>
</ul>
</section>
<hr class="pf-v5-c-divider" />
<section class="pf-v5-c-app-launcher__group">
<h1 class="pf-v5-c-app-launcher__group-title">Group 1</h1>
<ul role="menu">
<li
class="pf-v5-c-app-launcher__menu-wrapper pf-m-external"
role="none"
>
<a
class="pf-v5-c-app-launcher__menu-item pf-m-link"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Link 1
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
<button
class="pf-v5-c-app-launcher__menu-item pf-m-action"
type="button"
aria-label="Favorite"
>
<i class="fas fa-star" aria-hidden="true"></i>
</button>
</li>
<li
class="pf-v5-c-app-launcher__menu-wrapper pf-m-external pf-m-favorite"
role="none"
>
<a
class="pf-v5-c-app-launcher__menu-item pf-m-link"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Link 2
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
<button
class="pf-v5-c-app-launcher__menu-item pf-m-action"
type="button"
aria-label="Favorite"
>
<i class="fas fa-star" aria-hidden="true"></i>
</button>
</li>
</ul>
</section>
<hr class="pf-v5-c-divider" />
<section class="pf-v5-c-app-launcher__group">
<h1 class="pf-v5-c-app-launcher__group-title">Group 2</h1>
<ul role="menu">
<li
class="pf-v5-c-app-launcher__menu-wrapper pf-m-external pf-m-favorite"
role="none"
>
<a
class="pf-v5-c-app-launcher__menu-item pf-m-link"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Link 3
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
<button
class="pf-v5-c-app-launcher__menu-item pf-m-action"
type="button"
aria-label="Favorite"
>
<i class="fas fa-star" aria-hidden="true"></i>
</button>
</li>
<li
class="pf-v5-c-app-launcher__menu-wrapper pf-m-external"
role="none"
>
<a
class="pf-v5-c-app-launcher__menu-item pf-m-link"
role="menuitem"
href="#"
target="_blank"
>
<span class="pf-v5-c-app-launcher__menu-item-icon">
<img src="/assets/images/pf-logo-small.svg" alt="PatternFly logo" />
</span>
Link 4
<span
class="pf-v5-c-app-launcher__menu-item-external-icon"
>
<i class="fas fa-external-link-alt" aria-hidden="true"></i>
</span>
<span class="pf-v5-screen-reader">(opens new window)</span>
</a>
<button
class="pf-v5-c-app-launcher__menu-item pf-m-action"
type="button"
aria-label="Favorite"
>
<i class="fas fa-star" aria-hidden="true"></i>
</button>
</li>
</ul>
</section>
</div>
</nav>
```
## Documentation
### Accessibility
| Attribute | Applied | Outcome |
| -- | -- | -- |
| `aria-label="Application launcher"` | `.pf-v5-c-app-launcher` | Gives the app launcher element an accessible name. **Required** |
| `aria-expanded="false"` | `.pf-v5-c-button` | Indicates that the menu is hidden. |
| `aria-expanded="true"` | `.pf-v5-c-button` | Indicates that the menu is visible. |
| `aria-label="Actions"` | `.pf-v5-c-button` | Provides an accessible name for the app launcher when an icon is used. **Required** |
| `hidden` | `.pf-v5-c-app-launcher__menu` | Indicates that the menu is hidden so that it isn't visible in the UI and isn't accessed by assistive technologies. |
| `disabled` | `.pf-v5-c-app-launcher__toggle` | Disables the app launcher toggle and removes it from keyboard focus. |
| `disabled` | `button.pf-v5-c-app-launcher__menu-item` | When the menu item uses a button element, indicates that it is unavailable and removes it from keyboard focus. |
| `aria-disabled="true"` | `a.pf-v5-c-app-launcher__menu-item` | When the menu item uses a link element, indicates that it is unavailable. |
| `tabindex="-1"` | `a.pf-v5-c-app-launcher__menu-item` | When the menu item uses a link element, removes it from keyboard focus. |
| `aria-hidden="true"` | `.pf-v5-c-app-launcher__menu-item-external-icon > *` | Hides the icon from assistive technologies. |
### Usage
| Class | Applied | Outcome |
| -- | -- | -- |
| `.pf-v5-c-app-launcher` | `<nav>` | Defines the parent wrapper of the app launcher. |
| `.pf-v5-c-app-launcher__toggle` | `<button>` | Defines the app launcher toggle. |
| `.pf-v5-c-app-launcher__menu` | `<ul>`, `<div>` | Defines the parent wrapper of the menu items. Use a `<div>` if your app launcher has groups. |
| `.pf-v5-c-app-launcher__menu-search` | `<div>` | Defines the wrapper for the search input. |
| `.pf-v5-c-app-launcher__group` | `<section>` | Defines a group of items. Required when there is more than one group. |
| `.pf-v5-c-app-launcher__group-title` | `<h1>` | Defines a title for a group of items. |
| `.pf-v5-c-app-launcher__menu-wrapper` | `<li>` | Defines a menu wrapper for use with multiple actionable items in a single item row. |
| `.pf-v5-c-app-launcher__menu-item` | `<a>`, `<button>` | Defines a menu item. |
| `.pf-v5-c-app-launcher__menu-item-icon` | `<span>` | Defines the wrapper for the menu item icon. |
| `.pf-v5-c-app-launcher__menu-item-external-icon` | `<span>` | Defines the wrapper for the external link icon that appears on hover/focus. Use with `.pf-m-external`. |
| `.pf-m-expanded` | `.pf-v5-c-app-launcher` | Modifies for the expanded state. |
| `.pf-m-top` | `.pf-v5-c-app-launcher` | Modifies to display the menu above the toggle. |
| `.pf-m-align-right` | `.pf-v5-c-app-launcher__menu` | Modifies to display the menu aligned to the right edge of the toggle. |
| `.pf-m-static` | `.pf-v5-c-app-launcher__menu` | Modifies to position the menu statically to support custom positioning. |
| `.pf-m-disabled` | `a.pf-v5-c-app-launcher__menu-item` | Modifies to display the menu item as disabled. |
| `.pf-m-external` | `.pf-v5-c-app-launcher__menu-item` | Modifies to display the menu item as having an external link icon on hover/focus. |
| `.pf-m-favorite` | `.pf-v5-c-app-launcher__menu-wrapper` | Modifies wrapper to indicate that the item row has been favorited. |
| `.pf-m-link` | `.pf-v5-c-app-launcher__menu-item.pf-m-wrapper > .pf-v5-c-app-launcher__menu-item` | Modifies item for link styles. |
| `.pf-m-action` | `.pf-v5-c-app-launcher__menu-item.pf-m-wrapper > .pf-v5-c-app-launcher__menu-item` | Modifies item to for action styles. |
| `.pf-m-active` | `.pf-v5-c-app-launcher__toggle` | Forces display of the active state of the toggle. |