Card Patterns
Article Card
This is an article card with a read-more call-to-action.
HTML
<div class="card-grid">
<div class="article-card">
<div class="title">Using CSS to Style HTML</div>
<div class="author">Mary Shelley</div>
<div class="snippet">Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Exercitationem aspernatur, vero molestiae
quas fugiat nam dolor doloremque architecto, reiciendis
tempore assumenda.</div>
<button class="read-more">Read more...</button>
</div>
<div class="article-card">
<div class="title">Learning JavaScript</div>
<div class="author">H. P. Lovecraft</div>
<div class="snippet">Amet repudiandae facere obcaecati
doloribus dolorem quam adipisci beatae maiores quas,
voluptate corrupti autem exercitationem ipsam dolor
repellendus at, deleniti sed cumque?</div>
<button class="read-more">Read more...</button>
</div>
<div class="article-card">
<div class="title">My Favorite HTML Elements</div>
<div class="author">Edgar Allan Poe</div>
<div class="snippet">Possimus cupiditate enim illo
commodi ipsam, ab, aperiam sapiente tenetur, assumenda
pariatur esse? Officia, minima? Nostrum perferendis
amet laborum dicta quaerat.</div>
<button class="read-more">Read more...</button>
</div>
<div class="article-card">
<div class="title">All the CSS Things</div>
<div class="author">e. e. cummings</div>
<div class="snippet">Sit quas dolor perspiciatis nihil
enim tempore veniam rerum repellendus possimus fugit
aspernatur assumenda ducimus, accusamus ex beatae
iusto quam suscipit odit.</div>
<button class="read-more">Read more...</button>
</div>
</div>
CSS
/* all cards */
.card-grid {
display: flex;
flex-flow: row wrap;
justify-content: space-evenly;
gap: 1rem;
}
/* each card */
.article-card {
border: thin solid var(--main-dark-color);
border-radius: 0.25rem;
width: 300px;
display: flex;
flex-flow: column nowrap;
justify-content: space-between;
padding: 1rem;
background-color: var(--main-med-light-color);
box-shadow: 2px 2px 6px var(--main-dark-color);
}
/* card title */
.title {
font-size: 1.85rem;
color: var(--main-med-dark-color);
height: 150px;
width: 100%;
margin-top: .5rem;
padding: 1rem;
}
/* author */
.author {
margin: 0.5rem;
font-style: italic;
}
/* portion of article */
.snippet {
margin: 0.5rem;
}
/* read more button */
.read-more {
width: 10rem;
align-self: center;
background-color: var(--main-dark-color);
color: var(--main-light-color);
border: none;
padding: 0.5rem;
}
/* read more button on hover */
.read-more:hover {
background-color: var(--main-med-dark-color);
}
/* read more button on focus */
.read-more:focus {
outline: dashed 3px var(--main-med-dark-color);
}
Example
Using CSS to Style HTML
Mary Shelley
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Exercitationem aspernatur, vero molestiae quas fugiat nam dolor doloremque architecto, reiciendis tempore assumenda.
Learning JavaScript
H. P. Lovecraft
Amet repudiandae facere obcaecati doloribus dolorem quam adipisci beatae maiores quas, voluptate corrupti autem exercitationem ipsam dolor repellendus at, deleniti sed cumque?
My Favorite HTML Elements
Edgar Allan Poe
Possimus cupiditate enim illo commodi ipsam, ab, aperiam sapiente tenetur, assumenda pariatur esse? Officia, minima? Nostrum perferendis amet laborum dicta quaerat.
All the CSS Things
e. e. cummings
Sit quas dolor perspiciatis nihil enim tempore veniam rerum repellendus possimus fugit aspernatur assumenda ducimus, accusamus ex beatae iusto quam suscipit odit.
Product Card
This is a product card with an add-to-cart call-to-action.
HTML
<div class="card-grid">
<div class="product-card">
<div class="product-img"><img src="images/
dima-solomin-QxETQsRocGg-unsplash.jpg"
alt="cute coffee cup"></div>
<div class="product-title">Cute Travel Coffee Cup</div>
<div class="product-price">$8.99</div>
<div class="product-desc">White travel cup with lid,
person on cup wearing pink shirt and green skirt</div>
<button class="cart">Add to Cart</button>
</div>
<div class="product-card">
<div class="product-img"><img src="images/
shana-van-roosbroek-SZS3-YLuFcc-unsplash.jpg" alt="compact car"></div>
<div class="product-title">Compact Car</div>
<div class="product-price">$5,000</div>
<div class="product-desc">Silver compact
car with 50k miles, in good condition</div>
<button class="cart">Add to Cart</button>
</div>
<div class="product-card">
<div class="product-img"><img src="images/
fotis-fotopoulos-Y5JEQKQhfmM-unsplash.jpg" alt="cerulean vase"></div>
<div class="product-title">Cerulean Vase</div>
<div class="product-price">$899</div>
<div class="product-desc">2-foot cerulean vase</div>
<button class="cart">Add to Cart</button>
</div>
<div class="product-card">
<div class="product-img"><img src="images/
mak-Ojoz3wIa_yk-unsplash.jpg" alt="green and orange traffic cones"></div>
<div class="product-title">Traffic Cones</div>
<div class="product-price">$36.99</div>
<div class="product-desc">Six traffic cones, 3 orange, 3 green</div>
<button class="cart">Add to Cart</button>
</div>
</div>
CSS
.card-grid {
display: flex;
flex-flow: row wrap;
justify-content: space-evenly;
gap: 1rem;
}
.product-card {
width: 240px;
height: 450px;
display: grid;
grid-template-rows: 240px auto auto auto 3em;
background-color: var(--main-med-light-color);
}
.product-img {
grid-row: 1;
}
.product-title {
grid-row: 2;
font-size: 1.3em;
text-align: center;
}
.product-price {
grid-row: 3;
font-size: 1.2em;
text-align: center;
color: var(--main-med-dark-color);
}
.product-desc {
grid-row: 4;
text-align: center;
padding-left: .5em;
padding-right: .5em;
}
button.cart {
grid-row: 5;
padding: .5em;
border: none;
background-color: var(--main-dark-color);
color: var(--main-light-color);
font-size: 1.3em;
font-weight: bold;
}
button.cart:hover, button.cart:focus {
background-color: var(--main-med-dark-color);
}
Example

Cute Travel Coffee Cup
$8.99
White travel cup with lid, person on cup wearing pink shirt and green skirt

Compact Car
$5,000
Silver compact car with 50k miles, in good condition

Cerulean Vase
$899
2-foot cerulean vase

Traffic Cones
$36.99
Six traffic cones, 3 orange, 3 green
Profile Card
This is a profile card with an image and person details.
HTML
<div class="card-grid">
<div class="profile-card">
<div class="profile-img"><img src="images/
manja-vitolic-gKXKBY-C-Dk-unsplash.jpg"
alt="white and black cat with green background"></div>
<div class="profile-name">Sushi</div>
<div class="profile-desc">I love playing with every kind
of toy and meeting new humans. I prefer to be the only
pet in your home.</div>
<div class="profile-co">Humane Society of Arizona</div>
<button class="adopt">Adopt Me</button>
</div>
<div class="profile-card">
<div class="profile-img"><img src="images/
cedric-vt-IuJc2qh2TcA-unsplash.jpg" alt="gray tabby
with sky in the background"></div>
<div class="profile-name">Bacon Bit</div>
<div class="profile-desc">Cuddling with my humans is my
favorite hobby. I'm comfy in a home with kids and other
animals.</div>
<div class="profile-co">Humane Society of New Mexico</div>
<button class="adopt">Adopt Me</button>
</div>
<div class="profile-card">
<div class="profile-img"><img src="images/
kabo-p6yH8VmGqxo-unsplash.jpg" alt="orange and white cat
with orange background"></div>
<div class="profile-name">Oglethorpe</div>
<div class="profile-desc">I'm a rebel without
a clue. I have a strong personality and opinions. I'm
playful and spontaneous.</div>
<div class="profile-co">Flagstaff Animal Control</div>
<button class="adopt">Adopt Me</button>
</div>
<div class="profile-card">
<div class="profile-img"><img src="images/
raoul-droog-yMSecCHsIBc-unsplash.jpg" alt="gray cat wearing
sunglasses"></div>
<div class="profile-name">Leeloo Dallas</div>
<div class="profile-desc">I'm not of this world, and I'm
the savior of humanity. All I need is love, attention,
and a warm windowsill.</div>
<div class="profile-co">Lucky Angel Animal Rescue</div>
<button class="adopt">Adopt Me</button>
</div>
</div>
CSS
/* all cards */
.card-grid {
display: flex;
flex-flow: row wrap;
justify-content: space-evenly;
gap: 1rem;
}
/* each profile card */
.profile-card {
width: 250px;
display: grid;
grid-template-rows: 250px 2em auto .5em 3em;
row-gap: 1em;
background-color: var(--main-med-light-color);
box-shadow: 2px 2px 8px var(--main-med-dark-color);
}
.profile-img {
grid-row: 1;
}
.profile-name {
grid-row: 2;
font-size: 1.3em;
text-align: center;
}
.profile-desc {
grid-row: 3;
text-align: center;
align-self: center;
padding: .5em 1em;
background-color: var(--main-med-color);
color: var(--main-dark-color);
}
.profile-co {
grid-row: 4;
font-size: .8em;
font-style: italic;
text-align: center;
align-self: center;
padding-left: .5em;
padding-right: .5em;
}
button.adopt {
grid-row: 5;
border: none;
font-size: 1.2em;
background-color: var(--main-med-dark-color);
color: var(--main-light-color);
font-weight: bold;
}
button.adopt:hover, button.adopt:focus {
background-color: var(--main-dark-color);
}
Example

Sushi
I love playing with every kind of toy and meeting new humans. I prefer to be the only pet in your home.
Humane Society of Arizona

Bacon Bit
Cuddling with my humans is my favorite hobby. I'm comfy in a home with kids and other animals.
Humane Society of New Mexico

Oglethorpe
I'm a rebel without a clue. I have a strong personality and opinions. I'm playful and spontaneous.
Flagstaff Animal Control

Leeloo Dallas
I'm not of this world, and I'm the savior of humanity. All I need is love, attention, and a warm windowsill.
Lucky Angel Animal Rescue