<divclass="invoice"><divclass="invoice__header"><imgclass="invoice__logo"src="/img/cone-logo.svg"alt="Cone"height="48"width="48"><h1class="invoice__title">
Invoice
<spanclass="invoice__serial-number">SN: 123456789</span></h1></div><dlclass="invoice__highlighted"><div><dt>Payment</dt><dd>Bank transfer</dd></div><div><dt>Issued</dt><dd><timedatetime="2026-09-13">September 13, 2026</time></dd></div><div><dt>Due</dt><dd><timedatetime="2026-09-27">September 27, 2026</time></dd></div></dl><divclass="invoice__meta"><divclass="invoice__meta-block"><h2>Invoiced to</h2><address>
Mavis Schmeler <br/>
1904 Coolidge St <br/>
Brownsville, Texas 78521 <br/>
United States <br/></address></div><divclass="invoice__meta-block invoice__meta-block--align-end"><h2>Pay to</h2><address><strong>Miller, Romaguera and Spinka</strong><br/>
853 Burwell Heights Road <br/>
Nederland, Texas 77627 <br/>
United States <br/><strong>EIN:</strong> 25-3243963 <br/><strong>Bank Account Number:</strong> 23961707
</address></div></div><divclass="table-responsive"><tableclass="table table--rounded table--striped table--clear-border invoice__table"><captionclass="sr-only">Invoiced items and totals</caption><thead><tr><thscope="col">Item</th><thclass="invoice__number"scope="col">Qty</th><thclass="invoice__number"scope="col">Unit price</th><thclass="invoice__number"scope="col">Amount</th></tr></thead><tbody><tr><td>Website design (landing page)</td><tdclass="invoice__number">1</td><tdclass="invoice__number">$500.00</td><tdclass="invoice__number">$500.00</td></tr><tr><td>Component development</td><tdclass="invoice__number">2</td><tdclass="invoice__number">$250.00</td><tdclass="invoice__number">$500.00</td></tr><tr><td>Accessibility audit (hours)</td><tdclass="invoice__number">4</td><tdclass="invoice__number">$100.00</td><tdclass="invoice__number">$400.00</td></tr></tbody><tfoot><trclass="summary-row"><thcolspan="3"scope="row">Subtotal</th><tdclass="invoice__number">$1,400.00</td></tr><trclass="summary-row"><thcolspan="3"scope="row">Tax (27%)</th><tdclass="invoice__number">$378.00</td></tr><trclass="summary-row summary-row--total"><thcolspan="3"scope="row">Total due</th><tdclass="invoice__number">$1,778.00</td></tr></tfoot></table></div><divclass="invoice__actions"><buttonclass="btn btn--primary btn--sm"type="button"data-invoice-print>Print or save as PDF</button></div><divclass="invoice__footer"><imgclass="invoice__footer-logo"src="/img/cone-logo.svg"alt="Cone"height="48"width="48"/><ahref="mailto:hello@conedevelopment.com">hello@conedevelopment.com</a><ahref="tel:+1-512-555-5555">+1-512-555-5555</a></div></div>
document.querySelectorAll('[data-invoice-print]').forEach((button)=>{// The print dialog also offers "Save as PDF"; the print styles size the invoice to A4.
button.addEventListener('click',()=> window.print());});
Invoice
On this page
A print-ready invoice: header with the serial number, payment details, the addresses, an itemized table with the totals and a footer with the contact details. It looks good on screen and prints (or saves as PDF) on an A4 page.
Anatomy
.invoice__header with the logo and the title (__title, __serial-number).
.invoice__highlighted is a description list for the payment method and the dates (time elements).
.invoice__meta holds the two address blocks (__meta-block, --align-end).
.invoice__table is a Spruce table: the items in tbody, the subtotal, tax and total in tfoot. Numbers use .invoice__number.
.invoice__actions has a print button, hidden when printing; .invoice__footer has the contact details.
Accessibility
The table has a (visually hidden) caption, column headers with scope="col" and the total rows use th scope="row", so every amount is read with its label.
The tax row says what it is ("Tax (27%)") and shows the amount, not only the rate.
Technical Details
The numbers are aligned to the end with tabular-nums, so the digits line up.
@page sets an A4 portrait page with no margin, and the print styles size the invoice to 21 × 29.7 cm with print-color-adjust: exact for the backgrounds. The print button calls window.print(); the dialog offers "Save as PDF" too.
The legal requirements of an invoice differ by country (tax IDs, wording, numbering); use this as a starting point.
Documentation
Learn about Spruce CSS through our extensive documentation.