Recreation of a check from brunch at a diner using CSS Grid.
A Pen by Jules Forrest on CodePen.
Recreation of a check from brunch at a diner using CSS Grid.
A Pen by Jules Forrest on CodePen.
<link href="https://fonts.googleapis.com/css?family=Homemade+Apple|Old+Standard+TT:700|Share+Tech+Mono" rel="stylesheet"> | |
<div class="background"> | |
<div class="check"> | |
<h1>GuestCheck™</h1> | |
<div class="meta"> | |
<div class="meta-item"> | |
<h2 class="meta-item-label" h2>Date</h2> | |
</div> | |
<div class="meta-item"> | |
<h2 class="meta-item-label" 2>Table</h2> | |
</div> | |
<div class="meta-item"> | |
<h2 class="meta-item-label">Guests</h2> | |
</div> | |
<div class="meta-item"> | |
<h2 class="meta-item-label">Server</h2> | |
</div> | |
<div class="meta-item"> | |
<h2 class="check-number">46126</h2> | |
</div> | |
</div> | |
<h3 class="item-types"> | |
appt-soup/sal-entree-veg/pot-dessert-bev | |
</h3> | |
<div class="order-list-container"> | |
<div class="order-list writing"> | |
<h3 class="tax">Tax</h3> | |
<h3 class="total">Total</h3> | |
<h3 class="thank-you">Thank you</h3> | |
<h3 class="ordered-item c">C</h3> | |
<h3 class="ordered-item c-price">2.99</h3> | |
<h3 class="ordered-item smgf">sm gf</h3> | |
<h3 class="ordered-item smgf-price">2.19</h3> | |
<h3 class="ordered-item tea">tea</h3> | |
<h3 class="ordered-item tea-price">3.09</h3> | |
<h3 class="ordered-item relleno">1 relleno</h3> | |
<h3 class="ordered-item relleno-price">12.75</h3> | |
<h3 class="ordered-item green-ranch">1 green ranch</h3> | |
<h3 class="ordered-item green-price">11.35</h3> | |
<h3 class="ordered-item bisc">bisc</h3> | |
<h3 class="ordered-item bisc-price">2.99</h3> | |
<h3 class="ordered-item tax-writing">2.48</h3> | |
<h3 class="ordered-item total-writing">37.84</h3> | |
</div> | |
<div class="order-list grid-lines"> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
<div class="grid-item"></div> | |
</div> | |
</div> | |
<div class="company-info"> | |
<h4>525</h4> | |
<h4 class="small-caps">GuestCheck™</h4> | |
<h4>nationalchecking.com</h4> | |
<h4 class="small-caps usa">made in the USA</h4> | |
</div> | |
<div class="perforation"></div> | |
<h4 class="guest-receipt">Guest Receipt</h4> | |
<div class="guest-receipt-meta"> | |
<div class="meta-item"> | |
<h2 class="meta-item-label" h2>Date</h2> | |
</div> | |
<div class="meta-item"> | |
<h2 class="meta-item-label">Amount</h2> | |
</div> | |
<div class="meta-item"> | |
<h2 class="meta-item-label">Guests</h2> | |
</div> | |
<div class="meta-item"> | |
<h2 class="check-number">46126</h2> | |
</div> | |
</div> | |
</div> | |
</div> |
:root { | |
--gray: #413f4f; | |
} | |
body { | |
background-color: #76e5b3; | |
} | |
.background { | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
min-height: 100vh; | |
min-width: 100vw; | |
} | |
.check { | |
width: 350px; | |
height: 615px; | |
background-color: white; | |
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.34); | |
margin: 16px 0; | |
} | |
h1 { | |
font-family: "Old Standard TT", serif; | |
font-variant: small-caps; | |
text-align: center; | |
font-size: 42px; | |
color: var(--gray); | |
margin: 10px 0 2px; | |
letter-spacing: -1px; | |
} | |
.meta { | |
margin: 0 16px; | |
display: grid; | |
grid-template-columns: 1fr 1fr 1fr 1fr 2fr; | |
} | |
.guest-receipt-meta { | |
margin: 4px 16px 0 16px; | |
display: grid; | |
grid-template-columns: 1fr 1fr 1fr 2fr; | |
} | |
.meta-item { | |
border-top: 1px solid var(--gray); | |
border-left: 1px solid var(--gray); | |
border-bottom: 1px solid var(--gray); | |
} | |
.meta-item:nth-last-child(1) { | |
border-right: 1px solid var(--gray); | |
} | |
.meta-item-label { | |
font-size: 10px; | |
text-align: center; | |
font-family: arial; | |
color: var(--gray); | |
padding: 2px 0 18px; | |
} | |
.check-number { | |
color: #ff5d5d; | |
font-family: "share tech mono", menlo; | |
font-size: 24px; | |
text-align: center; | |
padding-top: 2px; | |
opacity: 0.8; | |
} | |
.item-types { | |
font-family: arial; | |
text-align: center; | |
font-weight: bold; | |
text-transform: uppercase; | |
font-size: 12px; | |
color: var(--gray); | |
margin: 4px 0 -1px; | |
} | |
.order-list { | |
display: grid; | |
grid-template-columns: 1fr 4fr 1fr 1fr; | |
grid-template-rows: repeat(18, 23px); | |
} | |
.grid-item:nth-child(1), | |
.grid-item:nth-child(2), | |
.grid-item:nth-child(3), | |
.grid-item:nth-child(4) { | |
border-top: 2px solid var(--gray); | |
} | |
.grid-item:nth-child(4n + 1) { | |
border-bottom: 1px solid var(--gray); | |
border-right: 1px solid var(--gray); | |
} | |
.grid-item:nth-child(4n + 2) { | |
border-bottom: 1px solid var(--gray); | |
border-right: 1px solid var(--gray); | |
} | |
.grid-item:nth-child(4n + 3) { | |
border-bottom: 1px solid var(--gray); | |
border-right: 1px solid var(--gray); | |
} | |
.grid-item:nth-child(4n) { | |
border-bottom: 1px solid var(--gray); | |
} | |
.grid-item:nth-last-child(1), | |
.grid-item:nth-last-child(2), | |
.grid-item:nth-last-child(3), | |
.grid-item:nth-last-child(4) { | |
border-bottom: 2px solid var(--gray); | |
} | |
.company-info { | |
display: flex; | |
justify-content: space-between; | |
font-size: 11px; | |
padding: 2px 16px; | |
} | |
.small-caps { | |
font-variant: small-caps; | |
} | |
.usa { | |
font-family: arial; | |
font-weight: bold; | |
font-style: italic; | |
color: var(--gray); | |
} | |
.perforation { | |
border-top: 1px dashed #b0b5b8; | |
margin: 8px 0; | |
} | |
.guest-receipt { | |
font-family: arial; | |
font-size: 12px; | |
font-weight: bold; | |
font-style: italic; | |
color: var(--gray); | |
margin: 12px 16px 0 16px; | |
} | |
.order-list-container { | |
background-color: #e3faf0; | |
position: relative; | |
padding: 4px 16px 2px 16px; | |
} | |
.writing { | |
position: absolute; | |
z-index: 2; | |
width: 318px; | |
font-family: arial; | |
color: var(--gray); | |
opacity: 0.8; | |
} | |
.tax { | |
grid-column: 2/3; | |
grid-row: 17/18; | |
text-align: right; | |
font-size: 12px; | |
align-self: end; | |
padding: 4px 6px; | |
} | |
.total { | |
grid-column: 2/3; | |
grid-row: 18/19; | |
text-align: right; | |
font-size: 13px; | |
align-self: end; | |
font-weight: bold; | |
padding: 4px 6px; | |
} | |
.thank-you { | |
grid-column: 2/3; | |
grid-row: 18/19; | |
text-align: left; | |
font-size: 13px; | |
align-self: end; | |
font-weight: bold; | |
padding: 4px 6px; | |
} | |
.ordered-item { | |
font-family: "homemade apple"; | |
font-size: 24px; | |
} | |
.c { | |
grid-column: 3/4; | |
padding-top: 10px; | |
transform: scale(1.02); | |
} | |
.c-price { | |
grid-column: 4/5; | |
padding-top: 6px; | |
transform: scale(1.3) skewy(-3deg); | |
} | |
.smgf { | |
grid-row: 3/4; | |
grid-column: 2/4; | |
text-align: right; | |
padding-right: 18px; | |
transform: skew(-5deg) scale(1.1); | |
} | |
.smgf-price { | |
grid-row: 3/4; | |
grid-column: 4/5; | |
transform: scale(1.08) skewy(-3deg); | |
} | |
.tea { | |
grid-row: 4/5; | |
grid-column: 2/4; | |
text-align: right; | |
padding-right: 27px; | |
padding-top: 9px; | |
} | |
.tea-price { | |
grid-row: 4/5; | |
grid-column: 4/5; | |
padding-top: 10px; | |
transform: scale(1.1) skewy(-2deg); | |
} | |
.relleno { | |
grid-column: 2/3; | |
grid-row: 6/7; | |
padding-top: 4px; | |
padding-left: 12px; | |
transform: scale(1.2) skewy(-2deg) skewx(8deg) translatey(2px); | |
} | |
.relleno-price { | |
grid-column: 3/5; | |
grid-row: 6/7; | |
padding-top: 4px; | |
text-align: right; | |
padding-right: 7px; | |
} | |
.green-ranch { | |
grid-column: 2/4; | |
grid-row: 8/9; | |
padding-top: 4px; | |
padding-left: 6px; | |
transform: scale(1.08) skewy(-3deg); | |
} | |
.green-price { | |
grid-column: 4/5; | |
grid-row: 8/9; | |
transform: scale(1.2) skewy(-7deg) skewx(-5deg); | |
} | |
.bisc { | |
grid-column: 2/3; | |
grid-row: 11/12; | |
padding-top: 7px; | |
padding-right: 3px; | |
text-align: right; | |
} | |
.bisc-price { | |
grid-column: 4/5; | |
grid-row: 11/12; | |
padding-top: 9px; | |
} | |
.tax-writing { | |
grid-column: 4/5; | |
grid-row: 17/18; | |
transform: scale(1.3) skewy(-6deg) translateY(-5px); | |
} | |
.total-writing { | |
grid-column: 4/5; | |
grid-row: 18/19; | |
transform: scale(1.5) skewy(-4deg) translateX(-12px); | |
} |