본문 바로가기
명함 만들기 캐릭터 모음 16가지 디자인 · PNG / SVG / PDF

결제 요약

돈이 빠져나가기 직전 마지막으로 멈추는 자리 — 얼마를 왜 내는지 한 화면에서 다 보여야 한다.

폼 · 패턴

실제 미리보기

출처

<div class="dc-pay">
  <header class="dc-pay__bar">
    <button class="dc-pay__back" type="button">
      <span aria-hidden="true">‹</span><span class="dc-sr">뒤로</span>
    </button>
    <h1 class="dc-pay__bartitle">결제하기</h1>
  </header>
  <div class="dc-pay__body">
    <section class="dc-pay__sec">
      <h2 class="dc-pay__h2">주문 상품 2개</h2>
      <div class="dc-pay__item">
        <span class="dc-pay__thumb" aria-hidden="true">🧤</span>
        <span class="dc-pay__itxt">
          <span class="dc-pay__iname">겨울 작업 장갑 5켤레</span>
          <span class="dc-pay__imeta">L 사이즈 · 1개</span>
        </span>
        <span class="dc-pay__iprice">12,900원</span>
      </div>
      <div class="dc-pay__item">
        <span class="dc-pay__thumb" aria-hidden="true">🥾</span>
        <span class="dc-pay__itxt">
          <span class="dc-pay__iname">안전화 265mm</span>
          <span class="dc-pay__imeta">검정 · 1개</span>
        </span>
        <span class="dc-pay__iprice">25,900원</span>
      </div>
    </section>
    <section class="dc-pay__sec">
      <h2 class="dc-pay__h2">결제 수단</h2>
      <button class="dc-pay__pick" type="button">
        <span class="dc-pay__picklbl">신한카드 1234 · 일시불</span>
        <span class="dc-pay__pickgo" aria-hidden="true">›</span>
      </button>
    </section>
    <section class="dc-pay__sec">
      <h2 class="dc-pay__h2">결제 금액</h2>
      <dl class="dc-pay__rows">
        <div class="dc-pay__row">
          <dt class="dc-pay__k">상품 금액</dt>
          <dd class="dc-pay__v">38,800원</dd>
        </div>
        <div class="dc-pay__row">
          <dt class="dc-pay__k">배송비</dt>
          <dd class="dc-pay__v">3,000원</dd>
        </div>
        <div class="dc-pay__row dc-pay__row--minus">
          <dt class="dc-pay__k">쿠폰 할인</dt>
          <dd class="dc-pay__v">-5,000원</dd>
        </div>
        <div class="dc-pay__row dc-pay__row--minus">
          <dt class="dc-pay__k">포인트 사용</dt>
          <dd class="dc-pay__v">-800원</dd>
        </div>
      </dl>
      <p class="dc-pay__total">
        <span class="dc-pay__tk">총 결제 금액</span>
        <span class="dc-pay__tv">36,000원</span>
      </p>
    </section>
    <label class="dc-pay__agree" for="dc-pay-agree">
      <input class="dc-pay__check" id="dc-pay-agree" type="checkbox" />
      <span class="dc-pay__agreetxt">주문 내용을 확인했고 결제에 동의합니다</span>
    </label>
  </div>
  <div class="dc-pay__bottom">
    <button class="dc-pay__go" type="button">36,000원 결제하기</button>
  </div>
</div>
.dc-pay { display:flex; flex-direction:column; height:660px; overflow:hidden; background:var(--dc-sunken); border:1px solid var(--dc-line); border-radius:var(--dc-r-md); font-family:var(--dc-font); }
.dc-pay__bar { flex:0 0 auto; display:flex; align-items:center; gap:var(--dc-1); padding:calc(var(--dc-safe-top) + var(--dc-2)) var(--dc-2) var(--dc-2); background:var(--dc-surface); border-bottom:1px solid var(--dc-line); }
.dc-pay__back { flex:0 0 auto; display:grid; place-items:center; width:44px; height:44px; border:0; border-radius:var(--dc-r-full); background:transparent; color:var(--dc-text); font-size:22px; line-height:1; }
.dc-pay__back:active { background:var(--dc-sunken); }
.dc-pay__bartitle { margin:0; font-size:16px; font-weight:700; color:var(--dc-text); }
.dc-pay__body { flex:1 1 auto; min-height:0; overflow-y:auto; display:flex; flex-direction:column; gap:var(--dc-3); padding:var(--dc-3); }
.dc-pay__sec { padding:var(--dc-4); border:1px solid var(--dc-line); border-radius:var(--dc-r-md); background:var(--dc-surface); }
.dc-pay__h2 { margin:0 0 var(--dc-3); font-size:14px; font-weight:800; color:var(--dc-text); }
.dc-pay__item { display:flex; align-items:center; gap:var(--dc-3); padding:var(--dc-2) 0; }
.dc-pay__item + .dc-pay__item { border-top:1px solid var(--dc-line); }
.dc-pay__thumb { flex:0 0 auto; display:grid; place-items:center; width:48px; height:48px; border-radius:var(--dc-r-sm); background:var(--dc-sunken); font-size:22px; }
.dc-pay__itxt { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:2px; }
.dc-pay__iname { font-size:14px; font-weight:700; line-height:1.4; color:var(--dc-text); }
.dc-pay__imeta { font-size:12px; color:var(--dc-text-mute); }
.dc-pay__iprice { flex:0 0 auto; font-size:14px; font-weight:700; color:var(--dc-text); }
.dc-pay__pick { display:flex; align-items:center; justify-content:space-between; gap:var(--dc-3); width:100%; min-height:48px; padding:0 var(--dc-3); border:1px solid var(--dc-line-field); border-radius:var(--dc-r-sm); background:var(--dc-surface); color:var(--dc-text); font-family:inherit; font-size:15px; font-weight:600; text-align:left; }
.dc-pay__pick:active { background:var(--dc-sunken); }
.dc-pay__picklbl { min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dc-pay__pickgo { flex:0 0 auto; color:var(--dc-text-mute); font-size:18px; }
.dc-pay__rows { display:flex; flex-direction:column; gap:var(--dc-2); margin:0; }
.dc-pay__row { display:flex; align-items:baseline; justify-content:space-between; gap:var(--dc-3); }
.dc-pay__k { margin:0; font-size:14px; color:var(--dc-text-sub); }
.dc-pay__v { margin:0; font-family:var(--dc-mono); font-size:14px; color:var(--dc-text); }
.dc-pay__row--minus .dc-pay__v { color:var(--dc-ok); }
.dc-pay__total { display:flex; align-items:baseline; justify-content:space-between; gap:var(--dc-3); margin:var(--dc-3) 0 0; padding-top:var(--dc-3); border-top:1px solid var(--dc-line-bold); }
.dc-pay__tk { font-size:15px; font-weight:800; color:var(--dc-text); }
.dc-pay__tv { font-size:20px; font-weight:800; letter-spacing:-.02em; color:var(--dc-text); }
.dc-pay__agree { display:flex; align-items:flex-start; gap:var(--dc-3); min-height:44px; padding:var(--dc-2); }
.dc-pay__check { flex:0 0 auto; width:20px; height:20px; margin-top:2px; accent-color:var(--dc-brand); }
.dc-pay__agreetxt { font-size:13px; line-height:1.6; color:var(--dc-text-sub); }
.dc-pay__fold { border:1px solid var(--dc-line); border-radius:var(--dc-r-sm); background:var(--dc-surface); }
.dc-pay__foldsum { display:flex; align-items:center; justify-content:space-between; gap:var(--dc-3); min-height:48px; padding:0 var(--dc-3); font-size:14px; font-weight:700; color:var(--dc-text); cursor:pointer; }
.dc-pay__foldbody { padding:0 var(--dc-3) var(--dc-3); }
.dc-pay__bottom { flex:0 0 auto; padding:var(--dc-3) var(--dc-4) calc(var(--dc-safe-bottom) + var(--dc-3)); background:var(--dc-surface); border-top:1px solid var(--dc-line); }
.dc-pay__go { width:100%; min-height:54px; border:0; border-radius:var(--dc-r-sm); background:var(--dc-brand); color:var(--dc-text-on); font-family:inherit; font-size:17px; font-weight:800; }
.dc-pay__go:active { background:var(--dc-brand-hi); }

이렇게 씁니다

  • 버튼 글자에 금액을 넣는다 — '결제하기' 보다 '36,000원 결제하기' 가 실수를 막는다
  • 총액은 가장 크게, 항목 금액은 그보다 작게 — 눈이 총액에 먼저 닿아야 한다
  • 할인은 빼는 금액임이 보이게 -5,000원 처럼 부호까지 적는다
  • 결제 수단은 여기서 바꿀 수 있게 한다 — 카드가 안 되면 되돌아가지 않고 고친다

주의할 점

  • 금액 숫자에 --dc-mono 를 쓰면 자리수가 흔들리지 않는다
  • 하단 결제 버튼에 --dc-safe-bottom 을 넣는다 — 홈 바에 가린 버튼은 두 번 눌리기 쉽다
  • 총액을 접어 두지 마라. 내역은 접어도 되지만 총액은 항상 보여야 한다

다음에 볼 것