card.md 18 KB
Newer Older
Mark Otto's avatar
cards  
Mark Otto committed
1
---
Mark Otto's avatar
Mark Otto committed
2
layout: docs
Mark Otto's avatar
cards  
Mark Otto committed
3
title: Cards
4
group: components
Mark Otto's avatar
cards  
Mark Otto committed
5
6
7
8
---

A **card** is a flexible and extensible content container. It includes options for headers and footers, a wide variety of content, contextual background colors, and powerful display options.

Mark Otto's avatar
Mark Otto committed
9
If you're familiar with Bootstrap 3, cards replace our old panels, wells, and thumbnails. Similar functionality to those components is available as modifier classes for cards.
Mark Otto's avatar
cards  
Mark Otto committed
10

Mark Otto's avatar
Mark Otto committed
11
12
13
14
15
## Contents

* Will be replaced with the ToC, excluding the "Contents" header
{:toc}

16
## Example
Mark Otto's avatar
cards  
Mark Otto committed
17

18
Cards require a small amount of markup and classes to provide you with as much control as possible. These classes and markup are flexible though and can typically be remixed and extended with ease. For example, if your card has no flush content like images, feel free to put the `.card-block` class on the `.card` element to consolidate your markup.
Mark Otto's avatar
cards  
Mark Otto committed
19
20
21

{% example html %}
<div class="card">
XhmikosR's avatar
XhmikosR committed
22
  <img class="card-img-top" data-src="holder.js/100px180/" alt="Card image cap">
23
24
25
26
27
  <div class="card-block">
    <h4 class="card-title">Card title</h4>
    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
    <a href="#" class="btn btn-primary">Button</a>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
28
29
30
</div>
{% endexample %}

31
## Content types
Mark Otto's avatar
Mark Otto committed
32

33
Cards support a wide variety of content, including images, text, list groups, links, and more. Mix and match multiple content types to create the card you need.
Mark Otto's avatar
Mark Otto committed
34

35
36
{% example html %}
<div class="card">
XhmikosR's avatar
XhmikosR committed
37
  <img class="card-img-top" data-src="holder.js/100px180/?text=Image cap" alt="Card image cap">
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  <div class="card-block">
    <h4 class="card-title">Card title</h4>
    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
  </div>
  <ul class="list-group list-group-flush">
    <li class="list-group-item">Cras justo odio</li>
    <li class="list-group-item">Dapibus ac facilisis in</li>
    <li class="list-group-item">Vestibulum at eros</li>
  </ul>
  <div class="card-block">
    <a href="#" class="card-link">Card link</a>
    <a href="#" class="card-link">Another link</a>
  </div>
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
53

Mark Otto's avatar
Mark Otto committed
54
{% example html %}
55
<div class="card">
XhmikosR's avatar
XhmikosR committed
56
  <img class="card-img-top" data-src="holder.js/100px180/?text=Image cap" alt="Card image cap">
57
58
59
  <div class="card-block">
    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
  </div>
Mark Otto's avatar
Mark Otto committed
60
</div>
61
62
63
{% endexample %}

{% example html %}
64
65
66
67
68
<div class="card card-block">
  <h4 class="card-title">Card title</h4>
  <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
  <a href="#" class="card-link">Card link</a>
  <a href="#" class="card-link">Another link</a>
Mark Otto's avatar
Mark Otto committed
69
</div>
70
71
72
73
74
75
76
77
{% endexample %}

{% example html %}
<div class="card">
  <div class="card-block">
    <h4 class="card-title">Card title</h4>
    <h6 class="card-subtitle text-muted">Support card subtitle</h6>
  </div>
XhmikosR's avatar
XhmikosR committed
78
  <img data-src="holder.js/100px180/?text=Image" alt="Card image">
79
80
81
82
83
  <div class="card-block">
    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
    <a href="#" class="card-link">Card link</a>
    <a href="#" class="card-link">Another link</a>
  </div>
Mark Otto's avatar
Mark Otto committed
84
85
86
</div>
{% endexample %}

87
88
## Sizing

89
Constrain the width of cards via custom CSS, our predefined grid classes, or with custom styles using our grid mixins.
Mark Otto's avatar
Mark Otto committed
90
91
92

Using the grid:

Mark Otto's avatar
Mark Otto committed
93
94
95
{% example html %}
<div class="row">
  <div class="col-sm-6">
96
    <div class="card card-block">
Mark Otto's avatar
Mark Otto committed
97
98
99
100
101
102
      <h3 class="card-title">Special title treatment</h3>
      <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
      <a href="#" class="btn btn-primary">Go somewhere</a>
    </div>
  </div>
  <div class="col-sm-6">
103
    <div class="card card-block">
Mark Otto's avatar
Mark Otto committed
104
105
106
107
108
109
110
111
      <h3 class="card-title">Special title treatment</h3>
      <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
      <a href="#" class="btn btn-primary">Go somewhere</a>
    </div>
  </div>
</div>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
112
113
114
Using custom widths:

{% example html %}
115
<div class="card card-block" style="width: 18rem;">
Mark Otto's avatar
Mark Otto committed
116
117
118
119
120
121
122
  <h3 class="card-title">Special title treatment</h3>
  <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
  <a href="#" class="btn btn-primary">Go somewhere</a>
</div>
{% endexample %}

## Text alignment
Mark Otto's avatar
cards  
Mark Otto committed
123

124
You can quickly change the text alignment of any card—in its entirety or specific parts—with our [text align classes]({{ site.baseurl }}/components/utilities/#text-alignment).
Mark Otto's avatar
cards  
Mark Otto committed
125
126

{% example html %}
127
<div class="card card-block">
Mark Otto's avatar
cards  
Mark Otto committed
128
129
130
131
132
  <h4 class="card-title">Special title treatment</h4>
  <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
  <a href="#" class="btn btn-primary">Go somewhere</a>
</div>

133
<div class="card card-block text-xs-center">
Mark Otto's avatar
cards  
Mark Otto committed
134
135
136
137
138
  <h4 class="card-title">Special title treatment</h4>
  <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
  <a href="#" class="btn btn-primary">Go somewhere</a>
</div>

139
<div class="card card-block text-xs-right">
Mark Otto's avatar
cards  
Mark Otto committed
140
141
142
143
144
145
  <h4 class="card-title">Special title treatment</h4>
  <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
  <a href="#" class="btn btn-primary">Go somewhere</a>
</div>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
146
## Header and footer
Mark Otto's avatar
cards  
Mark Otto committed
147
148
149
150
151
152
153
154

Add an optional header and/or footer within a card.

{% example html %}
<div class="card">
  <div class="card-header">
    Featured
  </div>
155
156
157
  <div class="card-block">
    <h4 class="card-title">Special title treatment</h4>
    <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
158
159
160
161
162
163
164
165
166
167
168
    <a href="#" class="btn btn-primary">Go somewhere</a>
  </div>
</div>
{% endexample %}

{% example html %}
<div class="card">
  <h3 class="card-header">Featured</h3>
  <div class="card-block">
    <h4 class="card-title">Special title treatment</h4>
    <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
169
170
    <a href="#" class="btn btn-primary">Go somewhere</a>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
171
</div>
Mark Otto's avatar
Mark Otto committed
172
{% endexample %}
Mark Otto's avatar
cards  
Mark Otto committed
173

Mark Otto's avatar
Mark Otto committed
174
{% example html %}
Mark Otto's avatar
cards  
Mark Otto committed
175
176
177
178
<div class="card">
  <div class="card-header">
    Quote
  </div>
179
180
181
182
183
184
  <div class="card-block">
    <blockquote class="card-blockquote">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
      <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
    </blockquote>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
185
186
187
188
</div>
{% endexample %}

{% example html %}
189
<div class="card text-xs-center">
Mark Otto's avatar
cards  
Mark Otto committed
190
191
192
  <div class="card-header">
    Featured
  </div>
193
194
195
196
197
  <div class="card-block">
    <h4 class="card-title">Special title treatment</h4>
    <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
    <a href="#" class="btn btn-primary">Go somewhere</a>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
198
199
200
201
202
203
  <div class="card-footer text-muted">
    2 days ago
  </div>
</div>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
204
## Image caps
Mark Otto's avatar
cards  
Mark Otto committed
205
206
207
208
209

Similar to headers and footers, cards include top and bottom image caps.

{% example html %}
<div class="card">
XhmikosR's avatar
XhmikosR committed
210
  <img class="card-img-top" data-src="holder.js/100px180/" alt="Card image cap">
211
212
213
214
215
  <div class="card-block">
    <h4 class="card-title">Card title</h4>
    <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
    <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
216
217
</div>
<div class="card">
218
219
220
221
222
  <div class="card-block">
    <h4 class="card-title">Card title</h4>
    <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
    <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
  </div>
XhmikosR's avatar
XhmikosR committed
223
  <img class="card-img-bottom" data-src="holder.js/100px180/" alt="Card image cap">
Mark Otto's avatar
cards  
Mark Otto committed
224
225
226
</div>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
227
## Image overlays
Mark Otto's avatar
cards  
Mark Otto committed
228

229
Turn an image into a card background and overlay your card's text. Depending on the image, you may or may not need `.card-inverse` (see below).
Mark Otto's avatar
cards  
Mark Otto committed
230
231
232

{% example html %}
<div class="card card-inverse">
XhmikosR's avatar
XhmikosR committed
233
  <img class="card-img" data-src="holder.js/100px270/#55595c:#373a3c/text:Card image" alt="Card image">
Mark Otto's avatar
cards  
Mark Otto committed
234
235
236
237
238
239
240
241
  <div class="card-img-overlay">
    <h4 class="card-title">Card title</h4>
    <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
    <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
  </div>
</div>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
242
## Inverted text
Mark Otto's avatar
cards  
Mark Otto committed
243

244
245
Cards include a class for quickly toggling **the text color**. By default, cards use dark text and assume a light background. **Add `.card-inverse` for white text** and specify the `background-color` and `border-color` to go with it.

246
You can also use `.card-inverse` with the [contextual backgrounds variants](#background-variants).
Mark Otto's avatar
cards  
Mark Otto committed
247
248
249

{% example html %}
<div class="card card-inverse" style="background-color: #333; border-color: #333;">
250
251
252
253
254
  <div class="card-block">
    <h3 class="card-title">Special title treatment</h3>
    <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
    <a href="#" class="btn btn-primary">Button</a>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
255
256
257
</div>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
258
## Background variants
Mark Otto's avatar
cards  
Mark Otto committed
259

260
Cards include their own variant classes for quickly changing the `background-color` and `border-color` of a card. **Darker colors require the use of `.card-inverse`.**
Mark Otto's avatar
cards  
Mark Otto committed
261
262

{% example html %}
263
<div class="card card-inverse card-primary text-xs-center">
264
265
266
267
268
269
  <div class="card-block">
    <blockquote class="card-blockquote">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
      <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
    </blockquote>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
270
</div>
271
<div class="card card-inverse card-success text-xs-center">
272
273
274
275
276
277
  <div class="card-block">
    <blockquote class="card-blockquote">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
      <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
    </blockquote>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
278
</div>
279
<div class="card card-inverse card-info text-xs-center">
280
281
282
283
284
285
  <div class="card-block">
    <blockquote class="card-blockquote">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
      <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
    </blockquote>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
286
</div>
287
<div class="card card-inverse card-warning text-xs-center">
288
289
290
291
292
293
  <div class="card-block">
    <blockquote class="card-blockquote">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
      <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
    </blockquote>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
294
</div>
295
<div class="card card-inverse card-danger text-xs-center">
296
297
298
299
300
301
  <div class="card-block">
    <blockquote class="card-blockquote">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
      <footer>Someone famous in <cite title="Source Title">Source Title</cite></footer>
    </blockquote>
  </div>
Mark Otto's avatar
cards  
Mark Otto committed
302
303
304
</div>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
305
## Groups
Mark Otto's avatar
cards  
Mark Otto committed
306

Heinrich Fenkart's avatar
Heinrich Fenkart committed
307
Use card groups to render cards as a single, attached element with equal width and height columns. By default, card groups use `display: table;` and `table-layout: fixed;` to achieve their uniform sizing. However, enabling [flexbox mode]({{ site.baseurl }}/getting-started/flexbox) can switch that to use `display: flex;` and provide the same effect.
Mark Otto's avatar
cards  
Mark Otto committed
308

309
310
Only applies to small devices and above.

Mark Otto's avatar
cards  
Mark Otto committed
311
312
313
{% example html %}
<div class="card-group">
  <div class="card">
XhmikosR's avatar
XhmikosR committed
314
    <img class="card-img-top" data-src="holder.js/100px180/" alt="Card image cap">
315
316
317
318
319
    <div class="card-block">
      <h4 class="card-title">Card title</h4>
      <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
      <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
    </div>
Mark Otto's avatar
cards  
Mark Otto committed
320
321
  </div>
  <div class="card">
XhmikosR's avatar
XhmikosR committed
322
    <img class="card-img-top" data-src="holder.js/100px180/" alt="Card image cap">
323
324
325
326
327
    <div class="card-block">
      <h4 class="card-title">Card title</h4>
      <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
      <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
    </div>
Mark Otto's avatar
cards  
Mark Otto committed
328
329
  </div>
  <div class="card">
XhmikosR's avatar
XhmikosR committed
330
    <img class="card-img-top" data-src="holder.js/100px180/" alt="Card image cap">
331
332
333
334
335
    <div class="card-block">
      <h4 class="card-title">Card title</h4>
      <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
      <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
    </div>
Mark Otto's avatar
cards  
Mark Otto committed
336
337
338
339
  </div>
</div>
{% endexample %}

340
## Decks
Mark Otto's avatar
cards  
Mark Otto committed
341

342
343
Need a set of equal width and height cards that aren't attached to one another? Use card decks. By default, card decks require two wrapping elements: `.card-deck-wrapper` and a `.card-deck`. We use table styles for the sizing and the gutters on `.card-deck`. The `.card-deck-wrapper` is used to negative margin out the `border-spacing` on the `.card-deck`.

344
345
Only applies to small devices and above.

Heinrich Fenkart's avatar
Heinrich Fenkart committed
346
**ProTip!** If you enable [flexbox mode]({{ site.baseurl }}/getting-started/flexbox/), you can remove the `.card-deck-wrapper`.
Mark Otto's avatar
cards  
Mark Otto committed
347
348

{% example html %}
349
350
<div class="card-deck-wrapper">
  <div class="card-deck">
Mark Otto's avatar
cards  
Mark Otto committed
351
    <div class="card">
XhmikosR's avatar
XhmikosR committed
352
      <img class="card-img-top" data-src="holder.js/100px200/" alt="Card image cap">
353
354
355
356
357
      <div class="card-block">
        <h4 class="card-title">Card title</h4>
        <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
        <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
      </div>
Mark Otto's avatar
cards  
Mark Otto committed
358
359
    </div>
    <div class="card">
XhmikosR's avatar
XhmikosR committed
360
      <img class="card-img-top" data-src="holder.js/100px200/" alt="Card image cap">
361
362
363
364
365
      <div class="card-block">
        <h4 class="card-title">Card title</h4>
        <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
        <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
      </div>
Mark Otto's avatar
cards  
Mark Otto committed
366
367
    </div>
    <div class="card">
XhmikosR's avatar
XhmikosR committed
368
      <img class="card-img-top" data-src="holder.js/100px200/" alt="Card image cap">
369
370
371
372
373
      <div class="card-block">
        <h4 class="card-title">Card title</h4>
        <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
        <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
      </div>
Mark Otto's avatar
cards  
Mark Otto committed
374
375
376
377
378
    </div>
  </div>
</div>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
379
## Columns
Mark Otto's avatar
cards  
Mark Otto committed
380

381
Cards can be organized into [Masonry](http://masonry.desandro.com)-like columns with just CSS by wrapping them in `.card-columns`. Only applies to small devices and above.
382

383
**Heads up!** This is **not available in IE9 and below** as they have no support for the [`column-*` CSS properties](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_multi-column_layouts).
Mark Otto's avatar
cards  
Mark Otto committed
384
385
386
387

{% example html %}
<div class="card-columns">
  <div class="card">
XhmikosR's avatar
XhmikosR committed
388
    <img class="card-img-top" data-src="holder.js/100px160/" alt="Card image cap">
389
390
391
392
    <div class="card-block">
      <h4 class="card-title">Card title that wraps to a new line</h4>
      <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
    </div>
Mark Otto's avatar
cards  
Mark Otto committed
393
  </div>
394
  <div class="card card-block">
Mark Otto's avatar
cards  
Mark Otto committed
395
396
    <blockquote class="card-blockquote">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
397
398
399
400
401
      <footer>
        <small class="text-muted">
          Someone famous in <cite title="Source Title">Source Title</cite>
        </small>
      </footer>
Mark Otto's avatar
cards  
Mark Otto committed
402
403
404
    </blockquote>
  </div>
  <div class="card">
XhmikosR's avatar
XhmikosR committed
405
    <img class="card-img-top" data-src="holder.js/100px160/" alt="Card image cap">
406
407
408
409
410
    <div class="card-block">
      <h4 class="card-title">Card title</h4>
      <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
      <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
    </div>
Mark Otto's avatar
cards  
Mark Otto committed
411
  </div>
412
  <div class="card card-block card-inverse card-primary text-xs-center">
Mark Otto's avatar
cards  
Mark Otto committed
413
    <blockquote class="card-blockquote">
414
415
416
417
418
419
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat.</p>
      <footer>
        <small>
          Someone famous in <cite title="Source Title">Source Title</cite>
        </small>
      </footer>
Mark Otto's avatar
cards  
Mark Otto committed
420
421
    </blockquote>
  </div>
422
  <div class="card card-block text-xs-center">
Mark Otto's avatar
cards  
Mark Otto committed
423
424
425
426
    <h4 class="card-title">Card title</h4>
    <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
    <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
  </div>
427
  <div class="card">
XhmikosR's avatar
XhmikosR committed
428
    <img class="card-img" data-src="holder.js/100px260/" alt="Card image">
429
  </div>
430
  <div class="card card-block text-xs-right">
Mark Otto's avatar
cards  
Mark Otto committed
431
432
    <blockquote class="card-blockquote">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
433
434
435
436
437
      <footer>
        <small class="text-muted">
          Someone famous in <cite title="Source Title">Source Title</cite>
        </small>
      </footer>
Mark Otto's avatar
cards  
Mark Otto committed
438
439
    </blockquote>
  </div>
440
  <div class="card card-block">
Mark Otto's avatar
cards  
Mark Otto committed
441
442
443
444
445
446
    <h4 class="card-title">Card title</h4>
    <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
    <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
  </div>
</div>
{% endexample %}