diff options
| -rw-r--r-- | docs/components/list-group.md | 89 | ||||
| -rw-r--r-- | scss/_list-group.scss | 131 | ||||
| -rw-r--r-- | scss/_variables.scss | 35 |
3 files changed, 135 insertions, 120 deletions
diff --git a/docs/components/list-group.md b/docs/components/list-group.md index 0e06d3a7f..3def6e792 100644 --- a/docs/components/list-group.md +++ b/docs/components/list-group.md @@ -5,7 +5,7 @@ description: Learn about Bootstrap's list group component for rendering series o group: components --- -List groups are a flexible and powerful component for displaying not only simple lists of elements, but complex ones with custom content. +List groups are a flexible and powerful component for displaying a series of content. List group items can be modified and extended to support just about any content within. They can also be used as navigation with the right modifier class. ## Contents @@ -13,7 +13,7 @@ List groups are a flexible and powerful component for displaying not only simple {:toc} ## Basic example -The most basic list group is simply an unordered list with list items, and the proper classes. Build upon it with the options that follow, or your own CSS as needed. +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. {% example html %} <ul class="list-group"> @@ -25,47 +25,37 @@ The most basic list group is simply an unordered list with list items, and the p </ul> {% endexample %} -## Badge +## Active items -Add badges to any list group item to show unread counts, activity, and more with the help of some utilities. Note the [`justify-content-between` utility class]({{ site.baseurl }}/layout/grid/#horizontal-alignment), the badge's placement, and the lack of a float and margin utilities on the badges. +Add `.active` to a `.list-group-item` to indicate the current active selection. -{% highlight html %} +{% example html %} <ul class="list-group"> - <li class="list-group-item justify-content-between"> - Cras justo odio - <span class="badge badge-default badge-pill">14</span> - </li> - <li class="list-group-item justify-content-between"> - Dapibus ac facilisis in - <span class="badge badge-default badge-pill">2</span> - </li> - <li class="list-group-item justify-content-between"> - Morbi leo risus - <span class="badge badge-default badge-pill">1</span> - </li> + <li class="list-group-item active">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <li class="list-group-item">Porta ac consectetur ac</li> + <li class="list-group-item">Vestibulum at eros</li> </ul> -{% endhighlight %} - +{% endexample %} ## Disabled items -Add `.disabled` to a `.list-group-item` to gray it out to appear disabled. +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). {% example html %} -<div class="list-group"> - <a href="#" class="list-group-item disabled"> - Cras justo odio - </a> - <a href="#" class="list-group-item">Dapibus ac facilisis in</a> - <a href="#" class="list-group-item">Morbi leo risus</a> - <a href="#" class="list-group-item">Porta ac consectetur ac</a> - <a href="#" class="list-group-item">Vestibulum at eros</a> -</div> +<ul class="list-group"> + <li class="list-group-item disabled">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <li class="list-group-item">Porta ac consectetur ac</li> + <li class="list-group-item">Vestibulum at eros</li> +</ul> {% endexample %} -## Anchors and buttons +## Links and buttons -Use anchors or buttons to create actionable list group items with hover, disabled, and active states by adding `.list-group-item-action`. This separate class contains a few overrides to add compatibility for `<a>`s and `<button>`s, as well as the hover and focus states. +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**. @@ -81,6 +71,8 @@ Be sure to **not use the standard `.btn` classes here**. </div> {% endexample %} +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. + {% example html %} <div class="list-group"> <button type="button" class="list-group-item list-group-item-action active"> @@ -89,7 +81,7 @@ Be sure to **not use the standard `.btn` classes here**. <button type="button" class="list-group-item list-group-item-action">Dapibus ac facilisis in</button> <button type="button" class="list-group-item list-group-item-action">Morbi leo risus</button> <button type="button" class="list-group-item list-group-item-action">Porta ac consectetur ac</button> - <button type="button" class="list-group-item list-group-item-action disabled">Vestibulum at eros</button> + <button type="button" class="list-group-item list-group-item-action" disabled>Vestibulum at eros</button> </div> {% endexample %} @@ -109,6 +101,27 @@ Use contextual classes to style list items, default or linked. Also includes `.a {% capture callout-include %}{% include callout-warning-color-assistive-technologies.md %}{% endcapture %} {{ callout-include | markdownify }} +## With badges + +Add badges to any list group item to show unread counts, activity, and more with the help of some utilities. Note the [`justify-content-between` utility class]({{ site.baseurl }}/layout/grid/#horizontal-alignment) and the badge's placement. + +{% example html %} +<ul class="list-group"> + <li class="list-group-item justify-content-between"> + Cras justo odio + <span class="badge badge-default badge-pill">14</span> + </li> + <li class="list-group-item justify-content-between"> + Dapibus ac facilisis in + <span class="badge badge-default badge-pill">2</span> + </li> + <li class="list-group-item justify-content-between"> + Morbi leo risus + <span class="badge badge-default badge-pill">1</span> + </li> +</ul> +{% endexample %} + ## Custom content Add nearly any HTML within, even for linked list groups like the one below. @@ -116,16 +129,16 @@ Add nearly any HTML within, even for linked list groups like the one below. {% example html %} <div class="list-group"> <a href="#" class="list-group-item list-group-item-action active"> - <h5 class="list-group-item-heading">List group item heading</h5> - <p class="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p> + <h5 class="mt-0 mb-1">List group item heading</h5> + <small>Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</small> </a> <a href="#" class="list-group-item list-group-item-action"> - <h5 class="list-group-item-heading">List group item heading</h5> - <p class="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p> + <h5 class="mt-0 mb-1">List group item heading</h5> + <small>Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</small> </a> <a href="#" class="list-group-item list-group-item-action"> - <h5 class="list-group-item-heading">List group item heading</h5> - <p class="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p> + <h5 class="mt-0 mb-1">List group item heading</h5> + <small>Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</small> </a> </div> {% endexample %} diff --git a/scss/_list-group.scss b/scss/_list-group.scss index 4d78d95c0..ec813c807 100644 --- a/scss/_list-group.scss +++ b/scss/_list-group.scss @@ -12,6 +12,34 @@ } +// Interactive list items +// +// Use anchor or button elements instead of `li`s or `div`s to create interactive +// list items. Includes an extra `.active` modifier class for selected items. + +.list-group-item-action { + width: 100%; // For `<button>`s (anchors become 100% by default though) + color: $list-group-link-color; + text-align: inherit; // For `<button>`s (anchors inherit) + + .list-group-item-heading { + color: $list-group-link-heading-color; + } + + // Hover state + @include hover-focus { + color: $list-group-link-hover-color; + text-decoration: none; + background-color: $list-group-hover-bg; + } + + &:active { + color: $list-group-link-active-color; + background-color: $list-group-link-active-bg; + } +} + + // Individual list items // // Use on `li`s or `div`s within the `.list-group` parent. @@ -36,43 +64,51 @@ @include border-bottom-radius($list-group-border-radius); } - &.disabled { - @include plain-hover-focus { - color: $list-group-disabled-color; - cursor: $cursor-disabled; - background-color: $list-group-disabled-bg; - - // Force color to inherit for custom content - .list-group-item-heading { - color: inherit; - } - .list-group-item-text { - color: $list-group-disabled-text-color; - } + @include hover-focus { + text-decoration: none; + } + + &.disabled, + &:disabled { + color: $list-group-disabled-color; + cursor: $cursor-disabled; + background-color: $list-group-disabled-bg; + + // Force color to inherit for custom content + .list-group-item-heading { + color: inherit; + } + .list-group-item-text { + color: $list-group-disabled-text-color; } } + // Include both here for `<a>`s and `<button>`s &.active { - @include plain-hover-focus { - z-index: 2; // Place active items above their siblings for proper border styling - color: $list-group-active-color; - text-decoration: none; // Repeat here because it inherits global a:hover otherwise - background-color: $list-group-active-bg; - border-color: $list-group-active-border; - - // Force color to inherit for custom content - .list-group-item-heading, - .list-group-item-heading > small, - .list-group-item-heading > .small { - color: inherit; - } - .list-group-item-text { - color: $list-group-active-text-color; - } + z-index: 2; // Place active items above their siblings for proper border styling + color: $list-group-active-color; + background-color: $list-group-active-bg; + border-color: $list-group-active-border; + + // Force color to inherit for custom content + .list-group-item-heading, + .list-group-item-heading > small, + .list-group-item-heading > .small { + color: inherit; + } + + .list-group-item-text { + color: $list-group-active-text-color; } } } + +// Flush list items +// +// Remove borders and border-radius to keep list group items edge-to-edge. Most +// useful within other components (e.g., cards). + .list-group-flush { .list-group-item { border-right: 0; @@ -94,29 +130,6 @@ } -// Interactive list items -// -// Use anchor or button elements instead of `li`s or `div`s to create interactive -// list items. Includes an extra `.active` modifier class for selected items. - -.list-group-item-action { - width: 100%; // For `<button>`s (anchors become 100% by default though) - color: $list-group-link-color; - text-align: inherit; // For `<button>`s (anchors inherit) - - .list-group-item-heading { - color: $list-group-link-heading-color; - } - - // Hover state - @include hover-focus { - color: $list-group-link-hover-color; - text-decoration: none; - background-color: $list-group-hover-bg; - } -} - - // Contextual variants // // Add modifier classes to change text and background color on individual items. @@ -126,17 +139,3 @@ @include list-group-item-variant(info, $state-info-bg, $state-info-text); @include list-group-item-variant(warning, $state-warning-bg, $state-warning-text); @include list-group-item-variant(danger, $state-danger-bg, $state-danger-text); - - -// Custom content options -// -// Extra classes for creating well-formatted content within `.list-group-item`s. - -.list-group-item-heading { - margin-top: 0; - margin-bottom: $list-group-item-heading-margin-bottom; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} diff --git a/scss/_variables.scss b/scss/_variables.scss index 9acf61827..948ac0354 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -866,28 +866,31 @@ $progress-bar-info-bg: $brand-info !default; // List group -$list-group-bg: $white !default; -$list-group-border-color: rgba($black,.125) !default; -$list-group-border-width: $border-width !default; -$list-group-border-radius: $border-radius !default; +$list-group-color: $body-color !default; +$list-group-bg: $white !default; +$list-group-border-color: rgba($black,.125) !default; +$list-group-border-width: $border-width !default; +$list-group-border-radius: $border-radius !default; -$list-group-hover-bg: $gray-lightest !default; -$list-group-active-color: $component-active-color !default; -$list-group-active-bg: $component-active-bg !default; -$list-group-active-border: $list-group-active-bg !default; -$list-group-active-text-color: lighten($list-group-active-bg, 50%) !default; +$list-group-item-padding-x: 1.25rem !default; +$list-group-item-padding-y: .75rem !default; + +$list-group-hover-bg: $gray-lightest !default; +$list-group-active-color: $component-active-color !default; +$list-group-active-bg: $component-active-bg !default; +$list-group-active-border: $list-group-active-bg !default; +$list-group-active-text-color: lighten($list-group-active-bg, 50%) !default; $list-group-disabled-color: $gray-light !default; -$list-group-disabled-bg: $gray-lighter !default; +$list-group-disabled-bg: $list-group-bg !default; $list-group-disabled-text-color: $list-group-disabled-color !default; -$list-group-link-color: $gray !default; -$list-group-link-hover-color: $list-group-link-color !default; -$list-group-link-heading-color: $gray-dark !default; +$list-group-link-color: $gray !default; +$list-group-link-heading-color: $gray-dark !default; +$list-group-link-hover-color: $list-group-link-color !default; -$list-group-item-padding-x: 1.25rem !default; -$list-group-item-padding-y: .75rem !default; -$list-group-item-heading-margin-bottom: 5px !default; +$list-group-link-active-color: $list-group-color !default; +$list-group-link-active-bg: $gray-lighter !default; // Image thumbnails |
