This hanging holder stacks three spare toilet rolls in a narrow column, so it’s useful in a small bathroom. It’s made of three round puff-stitch baskets on a single braided cord that hangs from one wall peg or hook.
The colors are warm cream, rust and soft sage-teal. Each basket has rust V-shaped puff clusters, a band of teal puffs, small cream puffs in between, and a row of rust scallop shells near the rim. The look is boho with a vintage feel, and it works well next to plants, wood and white towels.
The pattern uses US crochet terms. Each basket is 5 in (12.7 cm) across and 4 in (10.2 cm) tall. The assembled holder is about 21 in (53.3 cm) tall from the bottom of the lowest basket to the top of the hanging point.
For each basket, you crochet a flat double crochet base, turn up the wall with a back-loop round, and work the colorwork bands in joined rounds. You then finish with a two-round border. After that, you make one long Romanian cord and sew it up two opposite sides of all three baskets.
Finished Size and Construction
- Finished size: 5 in (12.7 cm) wide x 21 in (53.3 cm) tall, hanging
- 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 cord)
- Layout: 3 baskets stacked vertically, 1.5 in (3.8 cm) gap between them
- Piece size: each basket 5 in (12.7 cm) diameter x 4 in (10.2 cm) tall
- Size before border: 5 in (12.7 cm) diameter x 3.5 in (8.9 cm) tall
- Border depth: 0.5 in (1.3 cm)
Materials
Use a smooth worsted-weight cotton or cotton blend. Cotton holds its shape in a damp bathroom and shows puff stitches clearly. Pure acrylic also works, but the baskets will be softer and may sag a little. The meter figures below assume about 85 m per 50 g.
- Cream (Color A): 150 g, about 255 m. Used for the bases, the plain wall rounds, the small puffs, the borders and the cord.
- Rust (Color B): 40 g, about 68 m. Used for the V-puff band and the shell band.
- Sage-teal (Color C): 25 g, about 43 m. Used for the second V-puff band.
Tools:
– 5.0 mm (H-8) crochet hook
– Tapestry needle
– 2 stitch markers
– Scissors
– Measuring tape
– Pins (rustproof)
– Spray bottle
These quantities include a margin of about 15% for gauge differences and swatching.
Abbreviations (US Terms)
- ch – chain
- sl st – slip stitch
- sc – single crochet
- dc – double crochet
- BLO – back loop only
- st(s) – stitch(es)
- sk – skip
- sp – space
- rev sc – reverse single crochet (crab stitch)
- MR – magic ring
Special stitches
- Puff: (Yarn over, insert hook in the stitch, yarn over, pull up a loop to about 0.5 in) 3 times; yarn over and pull through all 7 loops. Close with a firm ch 1. The closing ch does not count as a stitch.
- V-puff: (Puff, ch 1, puff) all in the same stitch. Counts as 3 sts: puff, ch, puff.
- Shell: 5 dc in the same stitch.
- Romanian cord: Ch 2, sc in the 2nd ch from the hook. Turn the work clockwise like a page, insert the hook into the vertical loop now on the left, and sc. Turn clockwise again, insert under the 2 loops on the left, and sc. Repeat the turn and sc until the cord is the length you need.
Gauge and Checkpoints
Gauge: 15 sc and 18 rounds = 4 in (10.2 cm). In dc rounds, each round adds about 0.5 in (1.3 cm) to the diameter of the base.
Make one complete basket before starting the others. It works as your gauge swatch and shows whether all three baskets will fit a standard roll.
Checkpoints:
- After base Round 2: diameter 2 in (5.1 cm)
- After base Round 5: diameter 5 in (12.7 cm), circumference about 15.7 in (39.9 cm)
- After wall Round 11: wall height about 2.75 in (7.0 cm), measured from the back-loop ridge
- After wall Round 14: wall height 3.5 in (8.9 cm)
- After the border: wall height 4 in (10.2 cm)
If the base is too big, go down to a 4.5 mm (US 7) hook. If it’s too small, go up to a 5.5 mm (I-9) hook. Your base should be at least 4.75 in (12.1 cm) across so it holds a roll of about 4.5 in (11.4 cm) diameter. Use the same hook for the walls as for the base.

Basket (Make 3)
Work in joined rounds and do not turn. Start each round with ch 1; this ch never counts as a stitch. Join each round with a sl st to the first stitch. To change color, fasten off the old color and join the new color with a sl st in the first stitch of the next round. Carry no yarn across the back, and weave in ends on the inside.
Base (Color A)
Round 1: Make an MR, ch 2 (does not count as a st), work 12 dc into the ring, pull the ring snug, and join. (12 sts)
Round 2: Ch 2, 2 dc in each st around, join. (24 sts)
Round 3: Ch 2, 2 dc in next st, dc in next st, repeat 12 times, join. (36 sts)
Round 4: Ch 2, 2 dc in next st, dc in next 2 sts, repeat 12 times, join. (48 sts)
Round 5: Ch 2, 2 dc in next st, dc in next 3 sts, repeat 12 times, join. (60 sts)
Leave a little of the MR open so you get the small center hole shown in the photo. Check that the base is 5 in (12.7 cm) across and lies flat.
Wall
Round 6 (A): Ch 1, sc in BLO of each st around, join. (60 sts)
The unused front loops make a ridge at the bottom edge, and the wall turns up from here. Put a marker in st 1 and another in st 31. These marks show where the cord will be sewn later.
Round 7 (A): Ch 1, sc in each st around, join. (60 sts) Fasten off A.
Round 8 (B): Join B in st 1. Ch 1, sc in next st, sk 1, V-puff in next st, sk 1, repeat 15 times, join. (60 sts: 15 sc + 15 V-puffs of 3 sts each) Fasten off B.
This round makes the rust heart-shaped clusters. Each repeat uses 4 stitches from Round 7, so 15 repeats x 4 = 60.
Round 9 (A): Join A in the first sc. Ch 1, puff in sc, ch 1, sc in ch-1 sp of next V-puff, ch 1, repeat 15 times, join. (60 sts: 15 puffs + 15 sc + 30 ch) Fasten off A.
Each cream puff sits between two rust V-puffs.
Round 10 (C): Join C in the first puff. Ch 1, sc in puff, sk ch, V-puff in sc, sk ch, repeat 15 times, join. (60 sts: 15 sc + 15 V-puffs) Fasten off C.
The teal V-puffs sit above the cream sc, so they are offset from the rust V-puffs below.
Round 11 (A): Join A in the first sc. Repeat Round 9. (60 sts) Fasten off A.
Checkpoint: the wall should be about 2.75 in (7.0 cm) tall.
Round 12 (B): Join B in the first puff. Ch 1, sc in puff, sk ch, shell in sc, sk ch, repeat 15 times, join. (90 sts: 15 sc + 15 shells of 5 dc) Fasten off B.
This round has 30 more stitches than Round 11 because each shell turns 1 stitch into 5. The extra stitches make the scallops flare slightly, as in the photo.
Round 13 (A): Join A in the first sc. Ch 1, sc in sc, sk first dc of shell, sc in each of next 3 dc, sk last dc of shell, repeat 15 times, join. (60 sts)
This round works 4 sc per repeat into 4 of every 6 stitches. You skip the 2 outer dc of each shell, so the count goes from 90 back to 60.
Round 14 (A): Ch 1, sc in each st around, join. (60 sts)
Checkpoint: the wall should be 3.5 in (8.9 cm) tall. Keep A attached for the border.
Make All Pieces
Baskets: Make 3 identical baskets. Each one needs about 37 g of A, 12 g of B and 7 g of C before the border. Move the st 1 and st 31 markers up into Round 14 so they’re ready for the border and the joining.
Cord (Color A): Make one Romanian cord 44 in (111.8 cm) long. It should be about 0.4 in (1.0 cm) wide. Measure it hanging, not stretched. Fasten off and leave a 12 in (30.5 cm) tail at each end.
Layout grid (front view):
/\ <- cord peak over peg
/ \ (6.5 in / 16.5 cm of cord per side)
|[ BASKET 1 ]| 4 in / 10.2 cm
| | 1.5 in / 3.8 cm gap
|[ BASKET 2 ]| 4 in / 10.2 cm
| | 1.5 in / 3.8 cm gap
|[ BASKET 3 ]| 4 in / 10.2 cm
\__________/ cord ends tucked 0.5 in / 1.3 cm under base
Border
Border gauge: the border is the same as the wall, 15 sc = 4 in (10.2 cm). It adds 0.5 in (1.3 cm) of height over 2 rounds.
Work the border on each basket before joining. The markers at st 1 and st 31 split the rim into 2 sides of 30 sts each.
Round 15 (A): Ch 1, sc in each st around, join. (60 sts: 30 per side)
Round 16 (A): Ch 1, rev sc in each st around, working left to right, join. (60 sts: 30 per side) Fasten off and weave in.
Why the math works: The base ends at 60 sts, and every wall round except the shell round is 60 sts. That means the wall goes straight up instead of flaring or pulling in. All the colorwork repeats are 4 stitches wide (15 x 4 = 60), so they fit the round exactly. The border keeps the same 60, so the rim stays the same diameter as the base. The rev sc round gives the rolled, rope-like cream edge seen in the photo.
Joining
Method: Whipstitch the cord flat against the outside of each basket with A and a tapestry needle.
Stitch-to-stitch logic:
- Fold the cord in half and put a pin at the center. This is the peak that goes over the peg.
- From the center, measure 6.5 in (16.5 cm) down each side and pin. This is where each side meets the top rim of Basket 1.
- Line up the cord with the st 1 column on one side and the st 31 column on the other. These columns are exactly opposite each other.
- Sew the cord to each basket for its full 4 in (10.2 cm) height. Start at the border rim and work down to the Round 6 ridge, taking 1 whipstitch into each wall round on that column.
- Leave 1.5 in (3.8 cm) of free cord between the bottom of one basket and the rim of the next.
- Below Basket 3, tuck 0.5 in (1.3 cm) of cord under the base and sew it to the Round 5 edge.
Each half of the cord comes to 22 in (55.9 cm): 6.5 in + 4 in + 1.5 in + 4 in + 1.5 in + 4 in + 0.5 in.
Tension advice: Sew firmly enough that the cord doesn’t gap away from the wall, but don’t pull so hard that the wall puckers. Stitch through the cord’s back loops so the stitches don’t show from the front.
Size checkpoint: Hang the holder before trimming the tails. From the peak to the bottom of Basket 3 it should measure about 21 in (53.3 cm), and the baskets should hang level. If one basket tilts, move that cord section up or down by one round.
Final Blocking
- Lightly mist each basket with water until it is damp but not soaked.
- Slide a roll of toilet paper wrapped in a plastic bag, or a jar of the same size, into each basket.
- Push the puffs and shells into shape with your fingers so all the V-puffs point the same way.
- Flatten each base on a towel so it doesn’t bulge.
- Leave the baskets to dry completely on their forms.
- Hang the holder from a peg while the cord is still slightly damp so it straightens.
Final Quality-Control Checklist
- Every base is 5 in (12.7 cm) across and lies flat.
- Every wall round has 60 sts, except Round 12, which has 90.
- 15 rust V-puffs, 15 teal V-puffs and 15 shells on each basket.
- The rust and teal V-puffs are offset from each other.
- The border is 0.5 in (1.3 cm) deep and the rim measures 5 in (12.7 cm).
- The cord is sewn on the st 1 and st 31 columns of every basket.
- Both gaps between baskets are 1.5 in (3.8 cm).
- All ends are woven in on the inside.
Troubleshooting
The base cups or ruffles: If it cups, your tension is too tight, so loosen up or go up a hook size. If it ruffles, your tension is too loose.
The puffs look flat: Pull each loop up to about 0.5 in (1.3 cm), and close every puff with a firm ch 1.
The stitch count is off in Round 9 or 11: You probably worked into a ch-1 sp in the round below. Only work into puffs, sc and V-puff spaces.
The shells flare too much: Check that Round 13 skips both outer dc of each shell.
The baskets lean forward: The cord columns aren’t opposite each other. Count 30 sts between the markers and sew again.
The roll won’t fit: Your base is under 4.75 in (12.1 cm). Go up a hook size.
Care
Hand wash in cool water and lay flat to dry, with a roll inside each basket to hold the shape. Don’t tumble dry, because cotton can shrink and pull the puffs out of shape.

Final Notes
All the measurements build on each other. With the right gauge, 60 base sts make a 5 in (12.7 cm) base. The wall keeps those 60 sts for a 3.5 in (8.9 cm) colorwork section, and the 0.5 in (1.3 cm) border brings each basket to 4 in (10.2 cm). Three baskets with two 1.5 in (3.8 cm) gaps make the 15 in (38.1 cm) stack. The 44 in (111.8 cm) cord adds the hanging peak, for a total of about 21 in (53.3 cm). If you check each measurement as you go, the three tiers will hang straight and hold standard rolls.
Happy crocheting!