<div class="carousel-inner">
<div class="carousel-item">
<img class="d-block w-100" alt="First slide" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22800%22%20height%3D%22400%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%220%200%20800%20400%22%3E%3Cpath%20fill%3D%22%23777%22%20d%3D%22M0%200h800v400H0z%22%2F%3E%3Ctext%20x%3D%22285.922%22%20y%3D%22217.7%22%20fill%3D%22%23555%22%20font-family%3D%22Helvetica%2Cmonospace%22%20font-size%3D%2240pt%22%20font-weight%3D%22400%22%3EFirst%20slide%3C%2Ftext%3E%3C%2Fsvg%3E">
- <div class="carousel-caption d-none d-md-block">
+ <div class="carousel-caption d-none md:d-block">
<h5>First slide label</h5>
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
</div>
</div>
<div class="carousel-item active">
<img class="d-block w-100" alt="Second slide" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22800%22%20height%3D%22400%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%220%200%20800%20400%22%3E%3Cpath%20fill%3D%22%23777%22%20d%3D%22M0%200h800v400H0z%22%2F%3E%3Ctext%20x%3D%22285.922%22%20y%3D%22217.7%22%20fill%3D%22%23555%22%20font-family%3D%22Helvetica%2Cmonospace%22%20font-size%3D%2240pt%22%20font-weight%3D%22400%22%3ESecond%20slide%3C%2Ftext%3E%3C%2Fsvg%3E">
- <div class="carousel-caption d-none d-md-block">
+ <div class="carousel-caption d-none md:d-block">
<h5>Second slide label</h5>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</div>
<div class="carousel-item">
<img class="d-block w-100" alt="Third slide" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22800%22%20height%3D%22400%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%220%200%20800%20400%22%3E%3Cpath%20fill%3D%22%23777%22%20d%3D%22M0%200h800v400H0z%22%2F%3E%3Ctext%20x%3D%22285.922%22%20y%3D%22217.7%22%20fill%3D%22%23555%22%20font-family%3D%22Helvetica%2Cmonospace%22%20font-size%3D%2240pt%22%20font-weight%3D%22400%22%3EThird%20slide%3C%2Ftext%3E%3C%2Fsvg%3E">
- <div class="carousel-caption d-none d-md-block">
+ <div class="carousel-caption d-none md:d-block">
<h5>Third slide label</h5>
<p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
</div>
container: ''
- breakpoint: sm
- abbr: -sm
+ abbr: 'sm:'
name: Small
min-width: 576px
container: 540px
- breakpoint: md
- abbr: -md
+ abbr: 'md:'
name: Medium
min-width: 768px
container: 720px
- breakpoint: lg
- abbr: -lg
+ abbr: 'lg:'
name: Large
min-width: 1024px
container: 960px
- breakpoint: xl
- abbr: -xl
+ abbr: 'xl:'
name: X-Large
min-width: 1280px
container: 1200px
- breakpoint: 2xl
- abbr: -2xl
+ abbr: '2xl:'
name: 2X-Large
min-width: 1536px
container: 1440px
Customize cards by using our theme color utilities. By default, cards use `bg` for their background and border colors when applying a theme color. Use `.card-subtle` to swap the background and border colors for a more subtle look.
-<Example class="d-grid grid grid-cols-md-3" code={getData('theme-colors').map((themeColor) => `<div class="card theme-${themeColor.name}">
+<Example class="d-grid grid md:grid-cols-3" code={getData('theme-colors').map((themeColor) => `<div class="card theme-${themeColor.name}">
<div class="card-header">${themeColor.title}</div>
<div class="card-body">
<h4 class="card-title">Card title</h4>
</div>
</div>`)} customMarkup={getData('theme-colors').map((themeColor) => `<div class="card card-${themeColor.name}">…</div>`)} />
-<Example class="d-grid grid grid-cols-md-3" code={getData('theme-colors').map((themeColor) => `<div class="card card-subtle theme-${themeColor.name}">
+<Example class="d-grid grid md:grid-cols-3" code={getData('theme-colors').map((themeColor) => `<div class="card card-subtle theme-${themeColor.name}">
<div class="card-header">${themeColor.title}</div>
<div class="card-body">
<h4 class="card-title">Card title</h4>
## Horizontal
-Add `.list-group-horizontal` to change the layout of list group items from vertical to horizontal across all breakpoints. Alternatively, choose a responsive variant `.list-group-horizontal-{sm|md|lg|xl|2xl}` to make a list group horizontal starting at that breakpoint’s `min-width`. Currently **horizontal list groups cannot be combined with flush list groups.**
+Add `.list-group-horizontal` to change the layout of list group items from vertical to horizontal across all breakpoints. Alternatively, choose a responsive variant `.{sm|md|lg|xl|2xl}:list-group-horizontal` to make a list group horizontal starting at that breakpoint’s `min-width`. Currently **horizontal list groups cannot be combined with flush list groups.**
**ProTip:** Want equal-width list group items when horizontal? Add `.flex-fill` to each list group item.
-<Example code={getData('breakpoints').map((breakpoint) => `<ul class="list-group list-group-horizontal${breakpoint.abbr}">
+<Example
+ class="vstack gap-3"
+ code={getData('breakpoints').map((breakpoint) => `<ul class="list-group ${breakpoint.abbr}list-group-horizontal">
<li class="list-group-item">An item</li>
<li class="list-group-item">A second item</li>
<li class="list-group-item">A third item</li>
## Responsive tables
-Responsive tables allow tables to be scrolled horizontally with ease. Make any table responsive across all viewports by wrapping a `.table` with `.table-responsive`. Or, pick a maximum breakpoint with which to have a responsive table up to by using `.table-responsive{-sm|-md|-lg|-xl|-2xl}`.
+Responsive tables allow tables to be scrolled horizontally with ease. Make any table responsive across all viewports by wrapping a `.table` with `.table-responsive`. Or, pick a maximum breakpoint with which to have a responsive table up to by using `.{sm|md|lg|xl|2xl}:table-responsive`.
The `.table-responsive` wrapper also acts as the container query context for [stacked tables](#stacked-tables).
### Breakpoint specific
-Use `.table-responsive{-sm|-md|-lg|-xl|-2xl}` as needed to create responsive tables up to a particular breakpoint. From that breakpoint and up, the table will behave normally and not scroll horizontally.
+Use `.{sm|md|lg|xl|2xl}:table-responsive` as needed to create responsive tables up to a particular breakpoint. From that breakpoint and up, the table will behave normally and not scroll horizontally.
**These tables may appear broken until their responsive styles apply at specific viewport widths.**
{getData('breakpoints').map((breakpoint) => {
return (
<div class="bd-example">
- <div class={`table-responsive${breakpoint.abbr}`}>
+ <div class={`${breakpoint.abbr}table-responsive`}>
<table class="table">
<thead>
<tr>
)
})}
-<Code code={getData('breakpoints').map((breakpoint) => `<div class="table-responsive${breakpoint.abbr}">
+<Code code={getData('breakpoints').map((breakpoint) => `<div class="${breakpoint.abbr}table-responsive">
<table class="table">
...
</table>
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.align-content{breakpoint.abbr}-start</code></li>
- <li><code>.align-content{breakpoint.abbr}-end</code></li>
- <li><code>.align-content{breakpoint.abbr}-center</code></li>
- <li><code>.align-content{breakpoint.abbr}-between</code></li>
- <li><code>.align-content{breakpoint.abbr}-around</code></li>
- <li><code>.align-content{breakpoint.abbr}-stretch</code></li>
+ <li><code>.{breakpoint.abbr}align-content-start</code></li>
+ <li><code>.{breakpoint.abbr}align-content-end</code></li>
+ <li><code>.{breakpoint.abbr}align-content-center</code></li>
+ <li><code>.{breakpoint.abbr}align-content-between</code></li>
+ <li><code>.{breakpoint.abbr}align-content-around</code></li>
+ <li><code>.{breakpoint.abbr}align-content-stretch</code></li>
</Fragment>
)
})}
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.align-items{breakpoint.abbr}-start</code></li>
- <li><code>.align-items{breakpoint.abbr}-end</code></li>
- <li><code>.align-items{breakpoint.abbr}-center</code></li>
- <li><code>.align-items{breakpoint.abbr}-baseline</code></li>
- <li><code>.align-items{breakpoint.abbr}-stretch</code></li>
+ <li><code>.{breakpoint.abbr}align-items-start</code></li>
+ <li><code>.{breakpoint.abbr}align-items-end</code></li>
+ <li><code>.{breakpoint.abbr}align-items-center</code></li>
+ <li><code>.{breakpoint.abbr}align-items-baseline</code></li>
+ <li><code>.{breakpoint.abbr}align-items-stretch</code></li>
</Fragment>
)
})}
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.align-self{breakpoint.abbr}-start</code></li>
- <li><code>.align-self{breakpoint.abbr}-end</code></li>
- <li><code>.align-self{breakpoint.abbr}-center</code></li>
- <li><code>.align-self{breakpoint.abbr}-baseline</code></li>
- <li><code>.align-self{breakpoint.abbr}-stretch</code></li>
+ <li><code>.{breakpoint.abbr}align-self-start</code></li>
+ <li><code>.{breakpoint.abbr}align-self-end</code></li>
+ <li><code>.{breakpoint.abbr}align-self-center</code></li>
+ <li><code>.{breakpoint.abbr}align-self-baseline</code></li>
+ <li><code>.{breakpoint.abbr}align-self-stretch</code></li>
</Fragment>
)
})}
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.d{breakpoint.abbr}-flex</code></li>
- <li><code>.d{breakpoint.abbr}-inline-flex</code></li>
+ <li><code>.{breakpoint.abbr}d-flex</code></li>
+ <li><code>.{breakpoint.abbr}d-inline-flex</code></li>
</Fragment>
)
})}
<ul>
{getSequence(0, 5).map((i) => (
<Fragment>
- <li><code>.flex{getData('breakpoints')[i].abbr}-row</code></li>
- <li><code>.flex{getData('breakpoints')[i].abbr}-row-reverse</code></li>
- <li><code>.flex{getData('breakpoints')[i].abbr}-column</code></li>
- <li><code>.flex{getData('breakpoints')[i].abbr}-column-reverse</code></li>
+ <li><code>.{getData('breakpoints')[i].abbr}flex-row</code></li>
+ <li><code>.{getData('breakpoints')[i].abbr}flex-row-reverse</code></li>
+ <li><code>.{getData('breakpoints')[i].abbr}flex-column</code></li>
+ <li><code>.{getData('breakpoints')[i].abbr}flex-column-reverse</code></li>
</Fragment>
))}
</ul>
<ul>
{getData('breakpoints').map((breakpoint) => {
return (
- <li><code>.flex{breakpoint.abbr}-fill</code></li>
+ <li><code>.{breakpoint.abbr}flex-fill</code></li>
)
})}
</ul>
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.flex{breakpoint.abbr}-grow-0</code></li>
- <li><code>.flex{breakpoint.abbr}-grow-1</code></li>
- <li><code>.flex{breakpoint.abbr}-shrink-0</code></li>
- <li><code>.flex{breakpoint.abbr}-shrink-1</code></li>
+ <li><code>.{breakpoint.abbr}flex-grow-0</code></li>
+ <li><code>.{breakpoint.abbr}flex-grow-1</code></li>
+ <li><code>.{breakpoint.abbr}flex-shrink-0</code></li>
+ <li><code>.{breakpoint.abbr}flex-shrink-1</code></li>
</Fragment>
)
})}
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.flex{breakpoint.abbr}-nowrap</code></li>
- <li><code>.flex{breakpoint.abbr}-wrap</code></li>
- <li><code>.flex{breakpoint.abbr}-wrap-reverse</code></li>
+ <li><code>.{breakpoint.abbr}flex-nowrap</code></li>
+ <li><code>.{breakpoint.abbr}flex-wrap</code></li>
+ <li><code>.{breakpoint.abbr}flex-wrap-reverse</code></li>
</Fragment>
)
})}
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.float{breakpoint.abbr}-start</code></li>
- <li><code>.float{breakpoint.abbr}-end</code></li>
- <li><code>.float{breakpoint.abbr}-none</code></li>
+ <li><code>.{breakpoint.abbr}float-start</code></li>
+ <li><code>.{breakpoint.abbr}float-end</code></li>
+ <li><code>.{breakpoint.abbr}float-none</code></li>
</Fragment>
)
})}
Gap utilities that apply to all breakpoints, from `xs` to `2xl`, have no breakpoint abbreviation in them. This is because those classes are applied from `min-width: 0` and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.
-The classes are named using the format `{property}-{size}` for `xs` and `{property}-{breakpoint}-{size}` for `sm`, `md`, `lg`, `xl`, and `2xl`.
+The classes are named using the format `{property}-{size}` for `xs` and `{breakpoint}:{property}-{size}` for `sm`, `md`, `lg`, `xl`, and `2xl`.
Where *property* is one of:
<ul>
{getData('breakpoints').map((breakpoint) => {
return (
- <li><code>.gap{breakpoint.abbr}-0</code> through <code>.gap{breakpoint.abbr}-5</code></li>
+ <li><code>.{breakpoint.abbr}gap-0</code> through <code>.{breakpoint.abbr}gap-5</code></li>
)
})}
</ul>
<ul>
{getData('breakpoints').map((breakpoint) => {
return (
- <li><code>.row-gap{breakpoint.abbr}-0</code> through <code>.row-gap{breakpoint.abbr}-5</code></li>
+ <li><code>.{breakpoint.abbr}row-gap-0</code> through <code>.{breakpoint.abbr}row-gap-5</code></li>
)
})}
</ul>
<ul>
{getData('breakpoints').map((breakpoint) => {
return (
- <li><code>.column-gap{breakpoint.abbr}-0</code> through <code>.column-gap{breakpoint.abbr}-5</code></li>
+ <li><code>.{breakpoint.abbr}column-gap-0</code> through <code>.{breakpoint.abbr}column-gap-5</code></li>
)
})}
</ul>
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.grid-cols{breakpoint.abbr}-3</code></li>
- <li><code>.grid-cols{breakpoint.abbr}-4</code></li>
- <li><code>.grid-cols{breakpoint.abbr}-6</code></li>
- <li><code>.grid-cols{breakpoint.abbr}-fill</code></li>
+ <li><code>.{breakpoint.abbr}grid-cols-3</code></li>
+ <li><code>.{breakpoint.abbr}grid-cols-4</code></li>
+ <li><code>.{breakpoint.abbr}grid-cols-6</code></li>
+ <li><code>.{breakpoint.abbr}grid-cols-fill</code></li>
</Fragment>
)
})}
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.grid-auto-flow{breakpoint.abbr}-row</code></li>
- <li><code>.grid-auto-flow{breakpoint.abbr}-column</code></li>
- <li><code>.grid-auto-flow{breakpoint.abbr}-dense</code></li>
+ <li><code>.{breakpoint.abbr}grid-auto-flow-row</code></li>
+ <li><code>.{breakpoint.abbr}grid-auto-flow-column</code></li>
+ <li><code>.{breakpoint.abbr}grid-auto-flow-dense</code></li>
</Fragment>
)
})}
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.justify-content{breakpoint.abbr}-start</code></li>
- <li><code>.justify-content{breakpoint.abbr}-end</code></li>
- <li><code>.justify-content{breakpoint.abbr}-center</code></li>
- <li><code>.justify-content{breakpoint.abbr}-between</code></li>
- <li><code>.justify-content{breakpoint.abbr}-around</code></li>
- <li><code>.justify-content{breakpoint.abbr}-evenly</code></li>
+ <li><code>.{breakpoint.abbr}justify-content-start</code></li>
+ <li><code>.{breakpoint.abbr}justify-content-end</code></li>
+ <li><code>.{breakpoint.abbr}justify-content-center</code></li>
+ <li><code>.{breakpoint.abbr}justify-content-between</code></li>
+ <li><code>.{breakpoint.abbr}justify-content-around</code></li>
+ <li><code>.{breakpoint.abbr}justify-content-evenly</code></li>
</Fragment>
)
})}
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.justify-items{breakpoint.abbr}-start</code></li>
- <li><code>.justify-items{breakpoint.abbr}-end</code></li>
- <li><code>.justify-items{breakpoint.abbr}-center</code></li>
- <li><code>.justify-items{breakpoint.abbr}-stretch</code></li>
+ <li><code>.{breakpoint.abbr}justify-items-start</code></li>
+ <li><code>.{breakpoint.abbr}justify-items-end</code></li>
+ <li><code>.{breakpoint.abbr}justify-items-center</code></li>
+ <li><code>.{breakpoint.abbr}justify-items-stretch</code></li>
</Fragment>
)
})}
Margin utilities that apply to all breakpoints, from `xs` to `2xl`, have no breakpoint abbreviation in them. This is because those classes are applied from `min-width: 0` and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.
-The classes are named using the format `{property}{sides}-{size}` for `xs` and `{property}{sides}-{breakpoint}-{size}` for `sm`, `md`, `lg`, `xl`, and `2xl`.
+The classes are named using the format `{property}{sides}-{size}` for `xs` and `{breakpoint}:{property}{sides}-{size}` for `sm`, `md`, `lg`, `xl`, and `2xl`.
Where *property* is:
<ul>
{getData('breakpoints').map((breakpoint) => {
return (
- <li><code>.m{breakpoint.abbr}-0</code> through <code>.m{breakpoint.abbr}-5</code> and <code>.m{breakpoint.abbr}-auto</code></li>
+ <li><code>.{breakpoint.abbr}m-0</code> through <code>.{breakpoint.abbr}m-5</code> and <code>.{breakpoint.abbr}m-auto</code></li>
)
})}
</ul>
Padding utilities that apply to all breakpoints, from `xs` to `2xl`, have no breakpoint abbreviation in them. This is because those classes are applied from `min-width: 0` and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.
-The classes are named using the format `{property}{sides}-{size}` for `xs` and `{property}{sides}-{breakpoint}-{size}` for `sm`, `md`, `lg`, `xl`, and `2xl`.
+The classes are named using the format `{property}{sides}-{size}` for `xs` and `{breakpoint}:{property}{sides}-{size}` for `sm`, `md`, `lg`, `xl`, and `2xl`.
Where *property* is:
<ul>
{getData('breakpoints').map((breakpoint) => {
return (
- <li><code>.p{breakpoint.abbr}-0</code> through <code>.p{breakpoint.abbr}-5</code></li>
+ <li><code>.{breakpoint.abbr}p-0</code> through <code>.{breakpoint.abbr}p-5</code></li>
)
})}
</ul>
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.place-items{breakpoint.abbr}-start</code></li>
- <li><code>.place-items{breakpoint.abbr}-end</code></li>
- <li><code>.place-items{breakpoint.abbr}-center</code></li>
- <li><code>.place-items{breakpoint.abbr}-stretch</code></li>
+ <li><code>.{breakpoint.abbr}place-items-start</code></li>
+ <li><code>.{breakpoint.abbr}place-items-end</code></li>
+ <li><code>.{breakpoint.abbr}place-items-center</code></li>
+ <li><code>.{breakpoint.abbr}place-items-stretch</code></li>
</Fragment>
)
})}
{getData('breakpoints').map((breakpoint) => {
return (
<Fragment>
- <li><code>.text{breakpoint.abbr}-start</code></li>
- <li><code>.text{breakpoint.abbr}-center</code></li>
- <li><code>.text{breakpoint.abbr}-end</code></li>
+ <li><code>.{breakpoint.abbr}text-start</code></li>
+ <li><code>.{breakpoint.abbr}text-center</code></li>
+ <li><code>.{breakpoint.abbr}text-end</code></li>
</Fragment>
)
})}