layout: docs title: List group description: List groups are a flexible and powerful component for displaying a series of content. Modify and extend them to support just about any content within. group: components toc: true

Basic example

The most basic list group is an unordered list with list items and the proper classes. Build upon it with the options that follow, or with your own CSS as needed.

{% capture example %}

Active items

Add .active to a .list-group-item to indicate the current active selection.

{% capture example %}

Disabled items

Add .disabled to a .list-group-item to make it appear disabled. Note that some elements with .disabled will also require custom JavaScript to fully disable their click events (e.g., links).

{% capture example %}

Links and buttons

Use <a>s or <button>s to create actionable list group items with hover, disabled, and active states by adding .list-group-item-action. We separate these pseudo-classes to ensure list groups made of non-interactive elements (like <li>s or <div>s) don't provide a click or tap affordance.

Be sure to not use the standard .btn classes here.

{% capture example %}

With <button>s, you can also make use of the disabled attribute instead of the .disabled class. Sadly, <a>s don't support the disabled attribute.

{% capture example %}


Add .list-group-flush to remove some borders and rounded corners to render list group items edge-to-edge in a parent container (e.g., cards).

{% capture example %}

Contextual classes

Use contextual classes to style list items with a stateful background and color.

{% capture example %}

{% for color in %}

Contextual classes also work with .list-group-item-action. Note the addition of the hover styles here not present in the previous example. Also supported is the .active state; apply it to indicate an active selection on a contextual list group item.

{% capture example %}

{% for color in %} A simple {{ }} list group item{% endfor %}

{% include %}

With badges

Add badges to any list group item to show unread counts, activity, and more with the help of some [utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/).

{% capture example %}

Custom content

Add nearly any HTML within, even for linked list groups like the one below, with the help of [flexbox utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/).

{% capture example %}

JavaScript behavior

Use the tab JavaScript plugin—include it individually or through the compiled bootstrap.js file—to extend our list group to create tabbable panes of local content.

{% highlight html %}

Using data attributes

You can activate a list group navigation without writing any JavaScript by simply specifying data-toggle="list" or on an element. Use these data attributes on .list-group-item.

Via JavaScript

Enable tabbable list item via JavaScript (each list item needs to be activated individually):

{% highlight js %} $(‘#myList a’).on(‘click’, function (e) { e.preventDefault() $(this).tab(‘show’) }) {% endhighlight %}

You can activate individual list item in several ways:

{% highlight js %} $(‘#myList a[href=“#profile”]’).tab(‘show’) // Select tab by name $(‘#myList a:first-child’).tab(‘show’) // Select first tab $(‘#myList a:last-child’).tab(‘show’) // Select last tab $(‘#myList a:nth-child(3)’).tab(‘show’) // Select third tab {% endhighlight %}

Fade effect

To make tabs panel fade in, add .fade to each .tab-pane. The first tab pane must also have .show to make the initial content visible.

{% highlight html %}



Activates a list item element and content container. Tab should have either a data-target or an href targeting a container node in the DOM.

{% highlight html %}

{% endhighlight %}


Selects the given list item and shows its associated pane. Any other list item that was previously selected becomes unselected and its associated pane is hidden. Returns to the caller before the tab pane has actually been shown (for example, before the event occurs).

{% highlight js %} $(‘#someListItem’).tab(‘show’) {% endhighlight %}


When showing a new tab, the events fire in the following order:

  1. (on the current active tab)
  2. (on the to-be-shown tab)
  3. (on the previous active tab, the same one as for the event)
  4. (on the newly-active just-shown tab, the same one as for the event)

If no tab was already active, the and events will not be fired.

{% highlight js %} $(‘a[data-toggle=“list”]’).on(‘’, function (e) { // newly activated tab e.relatedTarget // previous active tab }) {% endhighlight %}