This hanging holder keeps three spare rolls tidy and within reach. A slim sage-green backing strip hangs from a wooden ring, and three round cup baskets are stitched to it in a neat vertical column.
Each basket has a flat sage base, then rows of plump cream puff stitches set in a staggered, honeycomb-like grid. Thin sage single-crochet rounds run between the puff rounds and outline every puff, so the cream fans pop against the green. A plain sage rim with a chain-look edge finishes the top.
The pattern uses US crochet terms. The finished holder is 4.9 in (12.4 cm) wide at the baskets and 16.5 in (41.9 cm) tall from the bottom edge to the top of the hanging loop. Each basket is 4.9 in (12.4 cm) across and 3.5 in (8.9 cm) tall.
Construction is simple: make three baskets in joined rounds, crochet one backing strip in rows, sew the baskets to the strip, add a two-round border, and work a hanging tab from the top that wraps around the wooden ring.
Finished Size and Construction
- Finished size: 4.9 in (12.4 cm) wide x 16.5 in (41.9 cm) tall, including the loop
- Skill level: Easy intermediate
- Terminology: US
- Yarn weight: Worsted (#4), cotton or cotton blend
- Hook: 5.0 mm (H-8)
- Number of pieces: 4 (3 baskets, 1 backing strip); the tab is worked directly from the strip
- Layout: 1 column of 3 baskets on the strip
- Basket size: 4.9 in (12.4 cm) diameter x 3.5 in (8.9 cm) tall
- Strip size before border: 3.4 in x 14 in (8.6 cm x 35.6 cm)
- Strip size after border: 3.9 in x 14.5 in (9.9 cm x 36.8 cm)
- Border depth: 0.25 in (0.6 cm) per side
Materials
Choose a smooth, firm cotton or cotton blend. Cotton holds the basket shape well and handles bathroom humidity. Avoid fuzzy or very soft acrylic, because the puffs lose definition and the baskets may slump.
- Sage green: 180 g / about 306 m (334 yd)
- Cream: 100 g / about 170 m (186 yd)
Quantities include a margin of roughly 20 percent for swatching and joining.
Tools:
- 5.0 mm (H-8) crochet hook
- 1 wooden ring, 2.5 in (6.4 cm) outer diameter
- Stitch markers
- Tapestry needle
- Scissors
- Measuring tape
- Rust-proof pins
Abbreviations (US Terms)
- ch – chain
- sc – single crochet
- inc – 2 sc in the same stitch
- sl st – slip stitch
- BLO – back loop only
- sk – skip
- sp – space
- st(s) – stitch(es)
- RS – right side
Puff stitch (puff): (Yo, insert hook in stitch, yo, pull up a loop to about 0.5 in (1.3 cm)) 4 times, yo, pull through all 9 loops on hook, ch 1 to close. The closing ch does not count as a stitch. Each puff counts as 1 st.
Gauge and Checkpoints
Gauge: 14 sc and 16 sc rows = 4 in (10.2 cm). One puff round is 0.5 in (1.3 cm) tall.
Make one basket first and check it before starting the others. Use these checkpoints:
- After Round 3 (18 sts): base about 1.6 in (4.1 cm) across
- After Round 6 (36 sts): base about 3.3 in (8.4 cm) across
- After Round 9 (54 sts): base 4.9 in (12.4 cm) across, circumference about 15.4 in (39.1 cm)
- After Round 16: wall 2.5 in (6.4 cm) tall from the BLO ridge
- After Round 20: wall 3.25 in (8.3 cm) tall; basket 3.5 in (8.9 cm) tall overall
A standard roll needs at least 4.5 in (11.4 cm) of inside width. If the base is too small, go up 0.5 mm in hook size. If it is larger than 5.1 in (13 cm), go down 0.5 mm. Do not add or remove rounds, because the puff repeat depends on 54 sts.

Basket (Make 3)
Join every round with a sl st to the first st. The ch 1 at the start of a sc round does not count as a stitch. Carry the unused color loosely up the inside of the wall instead of cutting it.
Base (sage):
Round 1: Make a magic ring, ch 1, 6 sc in ring, join. (6 sts)
Round 2: Ch 1, inc in each st around, join. (12 sts)
Round 3: Ch 1, sc in next st, inc in next st 6 times, join. (18 sts)
Round 4: Ch 1, sc in next 2 sts, inc 6 times, join. (24 sts)
Round 5: Ch 1, sc in next 3 sts, inc 6 times, join. (30 sts)
Round 6: Ch 1, sc in next 4 sts, inc 6 times, join. (36 sts)
Round 7: Ch 1, sc in next 5 sts, inc 6 times, join. (42 sts)
Round 8: Ch 1, sc in next 6 sts, inc 6 times, join. (48 sts)
Round 9: Ch 1, sc in next 7 sts, inc 6 times, join. (54 sts)
Wall:
Round 10 (sage): Ch 1, sc in BLO of each st around, join. (54 sts) This creates the crisp fold where the wall turns upward.
Color-change rule: At the end of every sage round, join to the first sc, then sl st into the next sc. Drop sage to the inside and pull cream through the loop on your hook. This moves each puff round over by 1 st and creates the staggered grid.
Round 11 (cream, puff round): Ch 2 (does not count), puff in the same st, ch 1, sk next st, puff in next st, ch 1, sk next st 26 times. Join with sage to the top of the first puff. (27 puffs + 27 ch-1 sps = 54 sts)
Round 12 (sage): Ch 1, sc in the top of each puff and 1 sc in each ch-1 sp around, join. (27 sc in puffs + 27 sc in sps = 54 sts) The sc worked into the spaces form the sage lines that frame each puff.
Round 13 (cream): Follow the color-change rule, then repeat Round 11. Each puff now sits above a ch-1 sp from Round 11. (54 sts)
Round 14 (sage): Repeat Round 12. (54 sts)
Round 15 (cream): Follow the color-change rule, then repeat Round 11. (54 sts) Join with sage and fasten off cream.
Round 16 (sage): Repeat Round 12. (54 sts)
Rounds 17–19 (sage rim): Ch 1, sc in each st around, join. (54 sts each)
Round 20 (sage): Sl st loosely in each st around. (54 sl sts) This makes the chain-look top edge. Fasten off and weave in the ends on the inside.
Backing Strip (Make 1)
Row 1 (sage): Ch 13, sc in the 2nd ch from the hook and in each ch across. (12 sts)
Rows 2–56: Ch 1, turn, sc in each st across. (12 sts each)
The strip should measure 3.4 in x 14 in (8.6 cm x 35.6 cm). Place a marker on Row 1 so you know which end is the bottom. Do not fasten off if you prefer to work the border right away. Otherwise, fasten off and rejoin later.
Make All Pieces
- Baskets: 3, each using sage for Rounds 1–10, 12, 14, and 16–20, and cream for Rounds 11, 13, and 15
- Backing strip: 1, all sage
- Hanging tab: sage, worked after the border
Layout (front view, rows counted from the bottom of the strip):
( wooden ring )
[ tab ]
+-------------------+
| top margin | rows 52–56
| BASKET 3 | rows 38–51
| gap | rows 34–37
| BASKET 2 | rows 20–33
| gap | rows 16–19
| BASKET 1 | rows 2–15
| bottom margin | row 1
+-------------------+
Each basket covers 14 strip rows, or 3.5 in (8.9 cm). The gaps are 1 in (2.5 cm), and the top margin is 1.25 in (3.2 cm) plus the border.
Joining
Sew the baskets on before working the border. Use a long tail of sage and a tapestry needle.
Contact zone: On each basket, choose 8 wall sts at the back, including the color-change jog so the seam line stays hidden. Mark the first and last of these 8 sts. They span about 2.3 in (5.8 cm). Center the contact zone on the strip with about 0.55 in (1.4 cm) of strip showing on each side before the border. After the border, that is 0.8 in (2.0 cm).
Stitch-to-stitch logic: Whipstitch up each marked vertical line, matching basket rounds to strip rows:
- Base edge (Round 9): 1 strip row
- Round 10: 1 row
- Each puff round (11, 13, 15): 2 rows
- Each sage sc round (12, 14, 16): 1 row
- Rim Rounds 17–19 with Round 20: 3 rows
That gives 1 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 3 = 14 rows, which matches the layout exactly.
Then whipstitch across the bottom, joining the 8 base-edge sts to the strip, and across the top, joining 8 Round 19 sts. That makes a firm rectangle of stitching.
Tension: Pull each stitch snug, but not so tight that the strip puckers. The strip should lie flat behind the basket.
Checkpoint: After all three baskets are sewn on, the strip should still be 14 in (35.6 cm) long. If it has shortened, the vertical seams are too tight. Undo and resew them.
Border
Border gauge: The strip has 14 sc and 16 rows per 4 in (10.2 cm), so the border uses 7 sc for every 8 row ends. That keeps the edges flat.
Round 1 (sage, RS facing): Join at the top right corner (last st of Row 56).
- Top: 3 sc in the corner st, sc in the next 10 sts, 3 sc in the last st.
- Long side: Working down the row ends of Rows 55 to 2, sc in each row end, but skip the row ends of Rows 49, 41, 33, 25, 17, and 9. That makes 54 – 6 = 48 sc.
- Bottom: 3 sc in the first foundation st, sc in the next 10 sts, 3 sc in the last st.
- Second long side: Work up the row ends of Rows 2 to 55, skipping Rows 9, 17, 25, 33, 41, and 49, for 48 sc.
- Join to the first sc.
Per-side counts (corner centers included): Top and bottom are 1 + 1 + 10 + 1 + 1 = 14 sts. Each long side is 1 + 1 + 48 + 1 + 1 = 52 sts. The round total is 14 + 14 + 52 + 52 – 4 shared corners = 128 sts.
Round 2: Sl st in BLO of each st around. (128 sl sts) Join and fasten off.
Why the math works: The body is 12 sts wide, and each corner adds 2 sc around its center st, so each 3.4 in (8.6 cm) end grows to 14 sts. Each 54-row side gets 7 sc per 8 rows, which matches the gauge ratio, so the edges neither ruffle nor pull in. The border adds 0.25 in (0.6 cm) all around, so the strip becomes 3.9 in x 14.5 in (9.9 cm x 36.8 cm).
Hanging tab: With RS facing, join sage in the 5th st of the 14-st top side (counting from the right corner).
- Row 1: Ch 1, sc in the same st and in the next 5 sts. (6 sts)
- Rows 2–20: Ch 1, turn, sc in each st across. (6 sts each)
The tab measures 1.7 in x 5 in (4.3 cm x 12.7 cm). Pass it through the wooden ring and fold it to the back. Overlap the last 1 in (2.5 cm) onto the back of the strip, then whipstitch it around all four sides. The loop rises 2 in (5.1 cm) above the strip, for a total length of 16.5 in (41.9 cm).
Final Blocking
- Lightly mist the whole holder with water.
- Lay the strip flat on a blocking mat with the baskets facing up.
- Pin the strip to 3.9 in x 14.5 in (9.9 cm x 36.8 cm), keeping the edges straight.
- Stuff each basket with a toilet roll or a rolled towel 4.5 in (11.4 cm) wide. This rounds out the walls.
- Pinch each puff gently so the fan shape stands up.
- Let everything dry completely. Remove the pins, then the rolls.
Final Quality-Control Checklist
- Each basket has 54 sts in every wall round and 27 puffs in each puff round.
- The puffs are staggered, with each one centered above a sage space.
- Each base measures 4.9 in (12.4 cm), and each basket is 3.5 in (8.9 cm) tall.
- The baskets sit on rows 2–15, 20–33, and 38–51, centered side to side.
- The color-change jogs are hidden at the back.
- The border has 128 sts, with 14 on each short side and 52 on each long side.
- The strip lies flat at 3.9 in x 14.5 in (9.9 cm x 36.8 cm).
- The tab is sewn securely and the ring hangs straight.
- All ends are woven in on the inside or back.
Troubleshooting
Puffs look flat or messy: Pull each loop up to the same height before closing the puff, and always ch 1 to lock it.
Puffs stack instead of staggering: You skipped the sl st into the next sc before a puff round. Rip back and follow the color-change rule.
Basket flares at the top: Your rim is loose. Work Rounds 17–19 with a 4.5 mm hook.
Roll does not fit: The base is under 4.5 in (11.4 cm) inside. Remake it with a larger hook. Do not add stitches.
Strip edge ruffles: You worked too many sc in the row ends. Recount for 48 sc per long side.
Baskets droop forward: Add the top seam across 8 sts of Round 19, or tack the rim at two more points.
Care
Hand wash in cool water with mild soap, press out the water in a towel, and reshape the baskets with rolls inside to dry flat. Avoid the dryer, which can shrink cotton and flatten the puffs.

Final Notes
The measurement chain is short and reliable. First, 14 sc = 4 in (10.2 cm) gives a 54-st base 4.9 in (12.4 cm) across. Wall Rounds 10–20 take each basket to 3.5 in (8.9 cm). Next, a 12-st, 56-row strip measures 3.4 in x 14 in (8.6 cm x 35.6 cm), with each basket covering exactly 14 rows. The 0.25 in (0.6 cm) border brings the strip to 3.9 in x 14.5 in (9.9 cm x 36.8 cm). Finally, the tab loop adds 2 in (5.1 cm), for a finished length of 16.5 in (41.9 cm). If you check your gauge at the first basket, everything else falls into place.
Happy crocheting!