Cart Summary

Order summary

  • Everyday Backpack Charcoal · 22L
    $89.00
  • Ceramic Pour-Over White
    $84.00
Subtotal
$173.00
Shipping
Free
Tax
$13.84
Total
$186.84
Checkout

Free returns within 30 days.

@use 'sprucecss/scss/spruce' as *;

.cart-summary {
  background-color: color('surface');
  border: config('border-width-base', $display) solid color('border');
  border-radius: radius('lg');
  padding: spacer-clamp('m', 2rem);
  @include layout-stack('m');

  &__title {
    font-size: font-size('h4');
  }

  &__items {
    list-style: none;
    padding: 0;
  }

  &__item {
    align-items: center;
    border-block-end: config('border-width-base', $display) solid color('border');
    display: grid;
    gap: spacer('s');
    grid-template-columns: 4rem 1fr auto;
    margin: 0 !important;
    padding-block: spacer('s');

    @include breakpoint('sm') {
      grid-template-columns: 4rem 1fr 5rem auto;
    }
  }

  &__thumb {
    block-size: 4rem;
    border-radius: radius('md');
    inline-size: 4rem;
    object-fit: cover;
  }

  &__info {
    display: flex;
    flex-direction: column;
    line-height: config('line-height-md', $typography);
  }

  &__name {
    color: color('heading');
    font-weight: 700;
  }

  &__meta,
  &__note {
    color: color('muted');
    font-size: config('font-size-sm', $typography);
  }

  &__qty {
    grid-column: 2;

    @include breakpoint('sm') {
      grid-column: auto;
    }
  }

  &__price {
    color: color('heading');
    font-weight: 700;
    grid-column: 3;
    grid-row: 1;

    @include breakpoint('sm') {
      grid-column: auto;
    }
  }

  &__totals {
    @include layout-stack('xs');

    div {
      display: flex;
      justify-content: space-between;
    }

    dt {
      font-weight: 400;
    }

    dd {
      color: color('heading');
      margin: 0;
    }
  }

  &__total {
    border-block-start: config('border-width-base', $display) solid color('border');
    font-size: config('font-size-lg', $typography);
    padding-block-start: spacer('s');

    dt,
    dd {
      color: color('heading');
      font-weight: 700;
    }
  }

  &__note {
    text-align: center;
  }
}
<section class="cart-summary" aria-labelledby="cart-summary-title">
    <h2 class="cart-summary__title" id="cart-summary-title">Order summary</h2>
    <ul class="cart-summary__items" role="list">
        <li class="cart-summary__item">
            <img class="cart-summary__thumb" src="https://images.unsplash.com/photo-1553062407-98eeb64c6a62?auto=format&fit=crop&w=128&h=128&q=70" alt="" width="64" height="64" loading="lazy">
            <div class="cart-summary__info">
                <span class="cart-summary__name">Everyday Backpack</span>
                <span class="cart-summary__meta">Charcoal · 22L</span>
            </div>
            <div class="cart-summary__qty">
                <label class="sr-only" for="qty-everyday">Quantity of Everyday Backpack</label>
                <input class="form-control form-control--sm" id="qty-everyday" type="number" min="1" value="1" inputmode="numeric">
            </div>
            <span class="cart-summary__price">$89.00</span>
        </li>
        <li class="cart-summary__item">
            <img class="cart-summary__thumb" src="https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?auto=format&fit=crop&w=128&h=128&q=70" alt="" width="64" height="64" loading="lazy">
            <div class="cart-summary__info">
                <span class="cart-summary__name">Ceramic Pour-Over</span>
                <span class="cart-summary__meta">White</span>
            </div>
            <div class="cart-summary__qty">
                <label class="sr-only" for="qty-ceramic">Quantity of Ceramic Pour-Over</label>
                <input class="form-control form-control--sm" id="qty-ceramic" type="number" min="1" value="2" inputmode="numeric">
            </div>
            <span class="cart-summary__price">$84.00</span>
        </li>
    </ul>
    <form class="cart-summary__coupon" onsubmit="return false;">
        <label class="sr-only" for="coupon-code">Discount code</label>
        <div class="form-group--stacked">
            <input class="form-control" id="coupon-code" type="text" placeholder="Discount code" autocomplete="off">
            <button class="btn btn--outline-primary" type="submit">Apply</button>
        </div>
    </form>
    <dl class="cart-summary__totals">
        <div><dt>Subtotal</dt><dd>$173.00</dd></div>
        <div><dt>Shipping</dt><dd>Free</dd></div>
        <div><dt>Tax</dt><dd>$13.84</dd></div>
        <div class="cart-summary__total"><dt>Total</dt><dd>$186.84</dd></div>
    </dl>
    <a class="btn btn--primary btn--lg btn--block" href="#">Checkout</a>
    <p class="cart-summary__note">Free returns within 30 days.</p>
</section>

Cart Summary

On this page

A shopping cart summary with line items, quantity inputs, a discount code field, the totals and the checkout button.

Technical Details

  • Every quantity input has a visually hidden, product-specific label ("Quantity of Everyday Backpack").
  • The totals are a description list; the grand total is emphasized with a top border.
  • The discount code uses Spruce's .form-group--stacked to attach the button to the input.
  • The line item grid rearranges on small screens: the quantity moves under the product name.

Documentation

Learn about Spruce CSS through our extensive documentation.

Components

Explore our UI library of accessible components built with Spruce CSS.

Blocks and Pages

Full-width page blocks and complete page templates, ready to copy.

Find us on GitHub

Did you find a bug? Have an idea or a question? Please open an issue to help us develop the project.