Line 201: | Line 201: | ||
border-bottom-right-radius: 0.4rem; | border-bottom-right-radius: 0.4rem; | ||
} | } | ||
+ | |||
+ | |||
+ | .card { | ||
+ | position: relative; | ||
+ | display: flex; | ||
+ | flex-direction: column; | ||
+ | min-width: 0; | ||
+ | word-wrap: break-word; | ||
+ | background-color: $card-bg; | ||
+ | background-clip: border-box; | ||
+ | border: $card-border-width solid $card-border-color; | ||
+ | @include border-radius($card-border-radius); | ||
+ | |||
+ | > hr { | ||
+ | margin-right: 0; | ||
+ | margin-left: 0; | ||
+ | } | ||
+ | |||
+ | > .list-group:first-child { | ||
+ | .list-group-item:first-child { | ||
+ | @include border-top-radius($card-border-radius); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | > .list-group:last-child { | ||
+ | .list-group-item:last-child { | ||
+ | @include border-bottom-radius($card-border-radius); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | .card-body { | ||
+ | // Enable `flex-grow: 1` for decks and groups so that card blocks take up | ||
+ | // as much space as possible, ensuring footers are aligned to the bottom. | ||
+ | flex: 1 1 auto; | ||
+ | padding: $card-spacer-x; | ||
+ | } | ||
+ | |||
+ | .card-title { | ||
+ | margin-bottom: $card-spacer-y; | ||
+ | } | ||
+ | |||
+ | .card-subtitle { | ||
+ | margin-top: -($card-spacer-y / 2); | ||
+ | margin-bottom: 0; | ||
+ | } | ||
+ | |||
+ | .card-text:last-child { | ||
+ | margin-bottom: 0; | ||
+ | } | ||
+ | |||
+ | .card-link { | ||
+ | @include hover { | ||
+ | text-decoration: none; | ||
+ | } | ||
+ | |||
+ | + .card-link { | ||
+ | margin-left: $card-spacer-x; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // | ||
+ | // Optional textual caps | ||
+ | // | ||
+ | |||
+ | .card-header { | ||
+ | padding: $card-spacer-y $card-spacer-x; | ||
+ | margin-bottom: 0; // Removes the default margin-bottom of <hN> | ||
+ | background-color: $card-cap-bg; | ||
+ | border-bottom: $card-border-width solid $card-border-color; | ||
+ | |||
+ | &:first-child { | ||
+ | @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0); | ||
+ | } | ||
+ | |||
+ | + .list-group { | ||
+ | .list-group-item:first-child { | ||
+ | border-top: 0; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | .card-footer { | ||
+ | padding: $card-spacer-y $card-spacer-x; | ||
+ | background-color: $card-cap-bg; | ||
+ | border-top: $card-border-width solid $card-border-color; | ||
+ | |||
+ | &:last-child { | ||
+ | @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // | ||
+ | // Header navs | ||
+ | // | ||
+ | |||
+ | .card-header-tabs { | ||
+ | margin-right: -($card-spacer-x / 2); | ||
+ | margin-bottom: -$card-spacer-y; | ||
+ | margin-left: -($card-spacer-x / 2); | ||
+ | border-bottom: 0; | ||
+ | } | ||
+ | |||
+ | .card-header-pills { | ||
+ | margin-right: -($card-spacer-x / 2); | ||
+ | margin-left: -($card-spacer-x / 2); | ||
+ | } | ||
+ | |||
+ | // Card image | ||
+ | .card-img-overlay { | ||
+ | position: absolute; | ||
+ | top: 0; | ||
+ | right: 0; | ||
+ | bottom: 0; | ||
+ | left: 0; | ||
+ | padding: $card-img-overlay-padding; | ||
+ | } | ||
+ | |||
+ | .card-img { | ||
+ | width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch | ||
+ | @include border-radius($card-inner-border-radius); | ||
+ | } | ||
+ | |||
+ | // Card image caps | ||
+ | .card-img-top { | ||
+ | width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch | ||
+ | @include border-top-radius($card-inner-border-radius); | ||
+ | } | ||
+ | |||
+ | .card-img-bottom { | ||
+ | width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch | ||
+ | @include border-bottom-radius($card-inner-border-radius); | ||
+ | } | ||
+ | |||
+ | |||
+ | // Card deck | ||
+ | |||
+ | .card-deck { | ||
+ | display: flex; | ||
+ | flex-direction: column; | ||
+ | |||
+ | .card { | ||
+ | margin-bottom: $card-deck-margin; | ||
+ | } | ||
+ | |||
+ | @include media-breakpoint-up(sm) { | ||
+ | flex-flow: row wrap; | ||
+ | margin-right: -$card-deck-margin; | ||
+ | margin-left: -$card-deck-margin; | ||
+ | |||
+ | .card { | ||
+ | display: flex; | ||
+ | // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4 | ||
+ | flex: 1 0 0%; | ||
+ | flex-direction: column; | ||
+ | margin-right: $card-deck-margin; | ||
+ | margin-bottom: 0; // Override the default | ||
+ | margin-left: $card-deck-margin; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // | ||
+ | // Card groups | ||
+ | // | ||
+ | |||
+ | .card-group { | ||
+ | display: flex; | ||
+ | flex-direction: column; | ||
+ | |||
+ | // The child selector allows nested `.card` within `.card-group` | ||
+ | // to display properly. | ||
+ | > .card { | ||
+ | margin-bottom: $card-group-margin; | ||
+ | } | ||
+ | |||
+ | @include media-breakpoint-up(sm) { | ||
+ | flex-flow: row wrap; | ||
+ | // The child selector allows nested `.card` within `.card-group` | ||
+ | // to display properly. | ||
+ | > .card { | ||
+ | // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4 | ||
+ | flex: 1 0 0%; | ||
+ | margin-bottom: 0; | ||
+ | |||
+ | + .card { | ||
+ | margin-left: 0; | ||
+ | border-left: 0; | ||
+ | } | ||
+ | |||
+ | // Handle rounded corners | ||
+ | @if $enable-rounded { | ||
+ | &:first-child { | ||
+ | @include border-right-radius(0); | ||
+ | |||
+ | .card-img-top, | ||
+ | .card-header { | ||
+ | border-top-right-radius: 0; | ||
+ | } | ||
+ | .card-img-bottom, | ||
+ | .card-footer { | ||
+ | border-bottom-right-radius: 0; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | &:last-child { | ||
+ | @include border-left-radius(0); | ||
+ | |||
+ | .card-img-top, | ||
+ | .card-header { | ||
+ | border-top-left-radius: 0; | ||
+ | } | ||
+ | .card-img-bottom, | ||
+ | .card-footer { | ||
+ | border-bottom-left-radius: 0; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | &:only-child { | ||
+ | @include border-radius($card-border-radius); | ||
+ | |||
+ | .card-img-top, | ||
+ | .card-header { | ||
+ | @include border-top-radius($card-border-radius); | ||
+ | } | ||
+ | .card-img-bottom, | ||
+ | .card-footer { | ||
+ | @include border-bottom-radius($card-border-radius); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | &:not(:first-child):not(:last-child):not(:only-child) { | ||
+ | @include border-radius(0); | ||
+ | |||
+ | .card-img-top, | ||
+ | .card-img-bottom, | ||
+ | .card-header, | ||
+ | .card-footer { | ||
+ | @include border-radius(0); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // | ||
+ | // Columns | ||
+ | // | ||
+ | |||
+ | .card-columns { | ||
+ | .card { | ||
+ | margin-bottom: $card-columns-margin; | ||
+ | } | ||
+ | |||
+ | @include media-breakpoint-up(sm) { | ||
+ | column-count: $card-columns-count; | ||
+ | column-gap: $card-columns-gap; | ||
+ | orphans: 1; | ||
+ | widows: 1; | ||
+ | |||
+ | .card { | ||
+ | display: inline-block; // Don't let them vertically span multiple columns | ||
+ | width: 100%; // Don't let their width change | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // | ||
+ | // Accordion | ||
+ | // | ||
+ | |||
+ | .accordion { | ||
+ | .card:not(:first-of-type):not(:last-of-type) { | ||
+ | border-bottom: 0; | ||
+ | border-radius: 0; | ||
+ | } | ||
+ | |||
+ | .card:not(:first-of-type) { | ||
+ | .card-header:first-child { | ||
+ | border-radius: 0; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | .card:first-of-type { | ||
+ | border-bottom: 0; | ||
+ | border-bottom-right-radius: 0; | ||
+ | border-bottom-left-radius: 0; | ||
+ | } | ||
+ | |||
+ | .card:last-of-type { | ||
+ | border-top-left-radius: 0; | ||
+ | border-top-right-radius: 0; | ||
+ | } | ||
+ | } | ||
+ | |||
Revision as of 14:02, 10 September 2018