<article class="card card--cta card--blog">
    <div class="card__body">
        <header class="card__heading">
            <h3 class="card__title">
                <a href="#" class="card__link" aria-describedby="women-leaders-in-bay-restoration-and-those-who-inspired-them">Women leaders in Bay restoration and those who inspired them</a>
            </h3>
            <span class="card__postDate u-step--2">December 2, 2022</span>
        </header>
        <p>Six woman environmentalists share their role models</p>
        <span class="card__pseudoLink" id="women-leaders-in-bay-restoration-and-those-who-inspired-them">Read story<span class="appendedIcon">&zwj;<i class="fas fa-angle-right"></i></span></span>
    </div>
    <figure class="card__imageCont">
        <img srcset="https://placehold.co/410x249,
              https://placehold.co/820x498 2x" src="https://placehold.co/820x498" class="card__image" alt="Black and white photo of Dr. Patrick holding a book." />
    </figure>
</article>

<link media="all" rel="stylesheet" href="/card/card.css" />
<script src="/card/card.js"></script>
<article class="card card--cta card--{{ _self.name }}">
  <div class="card__body">
    <header class="card__heading">
      <h3 class="card__title">
        <a href="#" class="card__link" aria-describedby="{{ slug }}">{{ title }}</a>
        {% if subTitle %}<br /><i lang="la" class="card__subtitle">{{ subTitle }}</i>{% endif %}
      </h3>
      <span class="card__postDate u-step--2">{{ postDate }}</span>
    </header>
    {{ cardBody|raw }}
    <span class="card__pseudoLink" id="{{ slug }}">{% render "@icon--appended" with linkIconArgs %}</span>
  </div>
  <figure class="card__imageCont">
    <img
      srcset="https://placehold.co/410x249,
              https://placehold.co/820x498 2x"
      src="https://placehold.co/820x498"
      class="card__image"
      alt="{{ cardImgAlt }}"
    />
    {% if cardImgCredit %}<figcaption class="card__imgCaption selectableContent">Photo courtesy of {{ cardImgCredit }}</figcaption>{% endif %}
  </figure>
</article>

{% import "_macros.twig" as h %}
{{ h.componentAssets('card') }}
{
  "title": "Women leaders in Bay restoration and those who inspired them",
  "slug": "women-leaders-in-bay-restoration-and-those-who-inspired-them",
  "subTitle": null,
  "badge": null,
  "cardBody": "<p>Six woman environmentalists share their role models</p>",
  "cardImgAlt": "Black and white photo of Dr. Patrick holding a book.",
  "linkIconArgs": {
    "text": "Read story",
    "iconClass": "fas fa-angle-right"
  },
  "footerIconArgs": false,
  "postDate": "December 2, 2022"
}
  • Content:
    @use "../_layout/mixins";
    
    .card {
      --card-bg: var(--neutral--light);
      display: flex;
      flex-direction: column;
      max-width: var(--cardMaxWidth, 400px);
    }
    .card--selectableContent {
      @at-root .selectableContent,
        & p {
        position: relative;
        z-index: calc(var(--z) * 11);
      }
      .card__imgCaption {
        pointer-events: auto;
      }
    }
    .card__header {
      background-color: var(--neutral--darker);
      color: var(--neutral--ultraLight);
      padding: 1rem;
      display: flex;
      flex: 1;
      align-items: center;
      justify-content: center;
    }
    .card__heading {
      display: flex;
      flex-direction: column;
      gap: 0.5em;
    }
    .card__banner {
      background-image: var(--cardBannerImage);
      background-size: cover;
      aspect-ratio: 19/6;
    
      @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
        background-image: var(--cardBannerImage2x);
      }
    }
    .card__postDate {
      order: -1;
      margin: 0;
    }
    .card__body {
      padding: 1em;
      background-color: var(--card-bg);
      border: 1px solid var(--neutral--dark);
      flex: 1;
      margin: 0;
    
      :where(& > *:not(:first-child)) {
        margin-block: 0.7em 0;
      }
    }
    .card__title {
      font-size: var(--step-2);
      margin: 0;
    }
    .card__description {
      margin-block-start: 0;
    }
    .card__link {
      background-image: none;
    }
    .card__subtitle {
      font-size: var(--step-1);
      font-style: italic;
      line-height: 1.4;
      font-weight: var(--normal-weight);
    }
    .card__attributes {
      margin-block-start: 0;
    }
    .card__badge {
      position: absolute;
      top: 0;
      left: 0;
      max-width: 100%;
      background-color: rgba(255, 205, 50, 0.8); //accent with 80% alpha
      pointer-events: none;
      margin: 0;
      padding: var(--step--1);
      border-radius: 0 0 10px 0;
      font-size: calc(0.9 * var(--step--1));
      font-weight: var(--cardBadgeFontWeight, var(--normal-weight));
      line-height: 1;
      text-transform: uppercase;
      z-index: calc(var(--z) * 11);
    }
    .card__pseudoLink {
      @include mixins.link();
      @include mixins.blockLink($color: var(--blue--dark));
      display: inline-block;
    }
    .card__moreLink {
      font-size: var(--step-09);
      @include mixins.blockLink();
      display: inline-block;
    }
    .card__imageCont {
      order: -1;
      background-color: var(--neutral--ultraDark);
    }
    .card__image {
      @include mixins.responsiveImg();
      width: 100%;
      vertical-align: top;
    }
    .card__imgCaption {
      font-size: var(--step--2);
      font-style: italic;
      padding: 0.2rem 1rem 0;
      background-color: var(--card-bg);
      border-inline: 1px solid var(--neutral--dark);
      margin-block-end: -0.4rem;
      position: relative;
      pointer-events: none;
    }
    .card__footer {
      --footer-bg: var(--neutral--dark);
      --footer-color: var(--neutral--ultraDark);
      background-color: var(--footer-bg);
      padding: 0.7em 1em;
      text-align: center;
      color: var(--footer-color);
    }
    .card__category {
      font-size: var(--step--1);
      line-height: 0.8;
      text-transform: uppercase;
      display: flex;
      justify-content: center;
      align-items: center;
    
      .prependedIcon {
        font-size: var(--step-1);
      }
    }
    
    .card--cta {
      position: relative;
    
      .card__link {
        &:after {
          content: "";
          z-index: calc(var(--z) * 10);
          @include mixins.fillParent();
        }
      }
    
      .card__image {
        transition: opacity 0.2s ease-out;
      }
      .card__footer {
        transition: color 0.2s ease-out, background-color 0.2s ease-out;
      }
      .card__body,
      .card__imgCaption {
        transition: background-color 0.2s ease-out;
      }
    
      &:hover {
        --card-bg: var(--neutral--dark);
    
        .card__image {
          opacity: 0.4;
        }
        .card__footer {
          --footer-bg: var(--neutral--ultraDark);
          --footer-color: var(--neutral--ultraLight);
        }
      }
    }
    
    .card--public-access {
      .card__title {
        font-weight: var(--normal-weight);
        text-align: center;
      }
    }
    .card--fact {
      .card__title {
        text-align: center;
        color: var(--white);
        font-size: var(--step-3);
        text-shadow: 0 2px 3px var(--neutral--ultraDark);
      }
      .card__link {
        color: inherit;
      }
      .card__banner--inverse {
        .card__title {
          color: var(--type);
          font-size: var(--step-4);
          font-weight: var(--normal-weight);
          text-shadow: none;
        }
      }
    }
    
  • URL: /components/raw/card/card.scss
  • Filesystem Path: src/components/card/card.scss
  • Size: 4.1 KB

Fact Card

Add .card__banner--inverse if the banner image is a lighter color to set the card title to a dark color and alternate style.