This hanging toilet paper holder keeps three spare rolls in plain sight in a tidy column. Three chocolate-brown baskets hang one above the other on two soft pink straps. A wooden ring at the top slips over any wall hook or towel hook.
The look is warm and a little sweet. The brown walls are dense, textured single crochet. Each basket has pink bands at the base and the top rim, and a pink heart on the front. It suits a farmhouse, boho, or Valentine-themed bathroom without feeling fussy.
This pattern uses US crochet terms. The finished holder is about 5 in (12.7 cm) wide and about 18 in (45.7 cm) tall from the bottom of the lowest basket to the top of the ring. Each basket is 5 in (12.7 cm) across and 4 in (10.2 cm) tall.
To build it, you crochet three baskets from the bottom up in joined rounds and make three small hearts in rows. Then you crochet two long straps. You sew the hearts on, sew the straps up the sides of the stacked baskets, and wrap the strap ends around the ring.
Finished Size and Construction
- Finished size: about 5 in (12.7 cm) wide × 18 in (45.7 cm) tall
- Skill level: Easy
- Terminology: US
- Yarn weight: Worsted (#4)
- Hooks: 5.0 mm (H-8) for baskets and straps; 4.0 mm (G-6) for hearts
- Number of pieces: 8 (3 baskets, 3 hearts, 2 straps), plus 1 wooden ring
- Layout: 3 baskets stacked vertically, 1 column
- Piece size (basket): 5 in (12.7 cm) diameter × 4 in (10.2 cm) tall
- Size before border: wall 3.5 in (8.9 cm) tall after Rnd 23
- Border depth: 0.5 in (1.3 cm), 2 pink rounds
Materials
Choose a smooth or slightly tweedy worsted-weight acrylic or cotton blend. Acrylic keeps its shape well against a humid bathroom wall. Cotton feels sturdier but sags a little more over time.
- Color A, Chocolate Brown: 100 g (about 180 m)
- Color B, Soft Pink: 50 g (about 90 m)
These quantities include a margin of about 20% for gauge swatches and differences in tension.
Tools:
– 5.0 mm (H-8) crochet hook
– 4.0 mm (G-6) crochet hook
– 1 wooden ring, 2.5 in (6.4 cm) outer diameter
– Tapestry needle
– Stitch markers (at least 6)
– Locking pins or clips
– Measuring tape
– Scissors
– Spray bottle (for blocking)
Abbreviations (US Terms)
- ch: chain
- sl st: slip stitch
- sc: single crochet
- hdc: half double crochet
- dc: double crochet
- inc: 2 sc in the same stitch
- blo: back loop only
- MR: magic ring
- st(s): stitch(es)
- Rnd: round
Special stitch – reverse single crochet (rev sc, also called crab stitch): Work from left to right (right to left if you crochet left-handed). Insert the hook into the next stitch to the right, yarn over, pull up a loop, yarn over, and pull through both loops. This makes a beaded, rope-like edge.
Gauge and Checkpoints
Gauge: 14 sc × 16 rnds = 4 in (10.2 cm) with the 5.0 mm hook, worked in joined rounds. That is 3.5 sts and 4 rounds per inch.
Make one complete basket before you make the others. It works as your gauge swatch.
Checkpoints:
1. After Rnd 9 (flat base): 54 sts, about 4.75 in (12.1 cm) across, lying flat with no ruffles or cupping.
2. After Rnd 23: wall 3.5 in (8.9 cm) tall, measured from the pink ridge.
3. After Rnd 25: wall 4 in (10.2 cm) tall and 5 in (12.7 cm) across. A roll should slide in easily.
4. Strap after Row 2: 17.4 in (44.2 cm) long.
If your basket is too big (over 5.25 in, or 13.3 cm, across), go down one hook size. If it is too small and a roll will not fit, go up one hook size. Standard rolls are about 4.25 in (10.8 cm) across. Mega rolls need a 6 in (15.2 cm) basket, which means adding one increase round (Rnd 10 at 60 sts) and moving every later round to 60 sts.

Basket (Make 3)
Work in joined rounds. Finish each round with a sl st into the first sc. Start the next round with ch 1, which does not count as a stitch, and work the first sc into the same stitch as the join. Keep the joins lined up. That line is the back of the basket.
Color changes: Work the joining sl st of the old round with the new color. Leave a 6 in (15.2 cm) tail to weave in.
Base
With Color A and the 5.0 mm hook:
- Rnd 1: MR, ch 1, 6 sc in ring, join. (6)
- Rnd 2: inc in each st around. (12)
- Rnd 3: (sc 1, inc) 6 times. (18)
- Rnd 4: (sc 2, inc) 6 times. (24)
- Rnd 5: (sc 3, inc) 6 times. (30)
- Rnd 6: (sc 4, inc) 6 times. (36)
- Rnd 7: (sc 5, inc) 6 times. (42)
- Rnd 8: (sc 6, inc) 6 times. (48)
- Rnd 9: (sc 7, inc) 6 times. (54) Join with Color B.
Checkpoint: a flat circle with 54 sts, about 4.75 in (12.1 cm) across. If it looks hexagonal, stagger the increases on Rnds 6–9 by starting each of those rounds with half the usual number of plain sc.
Pink Base Band
- Rnd 10 (conversion round): with Color B, ch 1, sc blo in each st around, join. (54 = 54 worked 1-per-stitch + 0 added) The unworked front loops make a clean ridge, and the fabric turns upward to start the wall.
- Rnd 11: sc in each st around. (54) Join with Color A.
Brown Wall
- Rnds 12–23: with Color A, sc in each st around. (54) That is 12 rounds, about 3 in (7.6 cm).
Checkpoint: Rnds 10–23 make a wall about 3.5 in (8.9 cm) tall. The sides should be straight. Do not decrease or increase. Join Color B on the last join.
The top pink rim is covered in the Border section below. Finish all three baskets with it before assembly.
Heart Appliqué (Make 3)
The smaller hook makes the hearts firmer and keeps them flat. Work in rows with Color B and the 4.0 mm hook. The point is at the bottom.
- Row 1: ch 2, 3 sc in the 2nd ch from the hook. (3)
- Row 2: ch 1, turn, inc in first st, sc 1, inc in last st. (5)
- Row 3: ch 1, turn, inc, sc 3, inc. (7)
- Row 4: ch 1, turn, sc across. (7)
- Row 5: ch 1, turn, inc, sc 5, inc. (9)
- Row 6 (lobes): ch 1, turn. Work these into the 9 sts: sc in st 1, hdc in st 2, 3 dc in st 3, hdc in st 4, sl st in st 5 (the center dip), hdc in st 6, 3 dc in st 7, hdc in st 8, sc in st 9. (13 sts)
Fasten off and leave a 12 in (30.5 cm) tail for sewing. Each heart measures about 2 in (5.1 cm) wide × 1.75 in (4.4 cm) tall.
Strap (Make 2)
With Color B and the 5.0 mm hook:
- Foundation: ch 62.
- Row 1: sc in the 2nd ch from the hook and in each ch across. (61)
- Row 2: ch 1, turn, sc across. (61)
Fasten off and leave a 24 in (61.0 cm) tail. Each strap is about 17.4 in (44.2 cm) long and 0.5 in (1.3 cm) wide.
If the strap comes out shorter than 17.4 in (44.2 cm), your foundation chain was tight. Remake it with a looser chain or a hook one size larger, keeping the stitch count at 61.
Strap map (counted from the bottom end):
– Sts 1–14: Basket 3 (bottom), 4 in (10.2 cm)
– Sts 15–17: gap, about 0.9 in (2.3 cm)
– Sts 18–31: Basket 2 (middle), 4 in (10.2 cm)
– Sts 32–34: gap, about 0.9 in (2.3 cm)
– Sts 35–48: Basket 1 (top), 4 in (10.2 cm)
– Sts 49–61: free end, 3.7 in (9.4 cm): about 2.3 in (5.8 cm) of rise plus a 1.4 in (3.6 cm) fold around the ring
Place a stitch marker at sts 14, 18, 31, 35, and 48 on each strap.
Make All Pieces
- Color A: 3 basket bases and walls (Rnds 1–9 and 12–23)
- Color B: 3 basket bands and rims (Rnds 10–11 and 24–25), 3 hearts, 2 straps
Layout grid:
( RING )
/ \
strap strap
|[ Basket 1 + heart ]|
| gap |
|[ Basket 2 + heart ]|
| gap |
|[ Basket 3 + heart ]|
Joining
Hearts first. Find the front center of each basket. It is directly opposite the join seam, at stitch 28 of 54. Pin a heart there so it is centered on Rnds 14–21, which are 7 rounds and about 1.75 in (4.4 cm) tall. Whipstitch around the edge of the heart through the outer loops of each heart stitch. Sew into the brown fabric only, so no pink shows inside the basket.
Strap positions. On every basket, place markers at stitch 14 and stitch 41. These are 27 sts apart, so they sit exactly on opposite sides, halfway between the heart and the back seam.
Stitch-to-stitch logic. Each basket wall (Rnds 10–25) is 16 rounds, or 4 in (10.2 cm). Each strap section for a basket is 14 sts, also 4 in (10.2 cm). Sew 7 strap sts along every 8 rounds of the wall. In practice, skip one round in each half of the wall. Line strap st 1 up with Rnd 10 of the bottom basket, and line strap st 14 up with Rnd 25.
Method. Stand the baskets in a stack, with the bottom basket first. Pin a strap at stitch 14 on all three baskets, following the strap map. Whipstitch both long edges of the strap to the wall. Leave the gap stitches (15–17 and 32–34) unsewn so the baskets stay slightly apart. Repeat with the second strap at stitch 41.
Tension advice. Sew snugly but do not cinch. If you pull too hard, the wall puckers and the strap ends up shorter than the basket, which makes the stack tilt. After every basket, lay the piece flat and check that the strap lies smooth.
Ring. Pass the last 5 sts of each strap (sts 57–61) from front to back through the wooden ring. Fold them down against the strap and whipstitch them securely across both rows. Both straps should rise the same 8 sts (sts 49–56) from the top rim to the ring.
Size checkpoint: hold it up by the ring. The holder should measure about 18 in (45.7 cm) from the base of Basket 3 to the top of the ring, and all three baskets should hang level.
Border
The “border” on this piece is the pink top rim of each basket. Work it right after Rnd 23.
Border gauge: the same as the body, 14 sc = 4 in (10.2 cm). Use the 5.0 mm hook and do not change hooks.
- Rnd 24 (trim round): with Color B, ch 1, sc in each st around, join. (54 = 54 worked 1-per-stitch + 0 added)
- Rnd 25 (edging round): ch 1, rev sc in each st around, join to the first rev sc. (54 = 54 worked 1-per-stitch + 0 added)
Fasten off and weave in the ends.
A round piece has no corners, so the side and corner rules for squares do not apply. Each border round has one stitch for each of the 54 sts below it.
Why the math works: the wall has 54 sts and the rim has 54 sts, so the edge neither flares nor pulls in. Rev sc tends to tighten, so keep your loops relaxed. If the rim draws in, redo Rnd 25 with the next larger hook. The two pink rounds add 0.5 in (1.3 cm) and bring the wall from 3.5 in (8.9 cm) to 4 in (10.2 cm).
Final Blocking
- Weave in all ends inside the baskets, running each tail through stitches of its own color.
- Fill each basket with a roll wrapped in a hand towel so the walls are pushed out to 5 in (12.7 cm) across.
- Mist the walls and rims lightly until they are damp, not soaked.
- Shape the base flat and square up the pink ridge at Rnd 10 with your fingers.
- Press each heart flat with a damp palm and open out the lobes.
- Hang the holder from the ring to dry, so the straps settle at their working length.
- Let it dry completely, at least 12 hours, before you put the rolls in for good.
Final Quality-Control Checklist
- [ ] Every basket has 54 sts in every round from Rnd 9 to Rnd 25.
- [ ] Every base lies flat at about 4.75 in (12.1 cm) across.
- [ ] Every wall is 4 in (10.2 cm) tall and 5 in (12.7 cm) across.
- [ ] All join seams face the wall.
- [ ] The hearts are centered at the front and no pink stitching shows inside.
- [ ] The straps sit at sts 14 and 41 on every basket.
- [ ] The gaps between baskets are even, about 0.9 in (2.3 cm).
- [ ] The strap ends are sewn securely around the ring.
- [ ] The holder hangs level and is about 18 in (45.7 cm) tall.
- [ ] All ends are woven in and trimmed.
Troubleshooting
The base ruffles. Your tension is too loose, or you added extra increases. Recount each round (6, 12, 18, and so on) and try a smaller hook.
The base cups upward too early. You are crocheting too tightly. Go up a hook size for Rnds 1–9 only.
The walls flare outward. Check that every wall round has exactly 54 sts. Stray increases often happen at the join.
Rolls won’t fit. Your gauge is too tight. Remake with a larger hook, or use the 60-stitch variation from the Gauge section.
The holder tilts. One strap is sewn tighter than the other. Unpick it and resew with the 7-sts-to-8-rounds spacing.
The hearts curl. Block them flat before sewing, or work Row 6 more loosely.
The color changes jog. Always change color on the joining sl st, not the last sc.
Care
Hand wash in cool water, press out the water gently, and reshape the baskets around a towel to dry. Avoid tumble drying, because heat can loosen the straps.

Final Notes
The measurement chain is simple:
– Gauge: 14 sc = 4 in (10.2 cm)
– Base: 54 sts, 4.75 in (12.1 cm) across
– Wall before the rim: 3.5 in (8.9 cm)
– Finished basket: 4 in (10.2 cm) tall, 5 in (12.7 cm) wide
– Strap: 61 sts = 17.4 in (44.2 cm), sewn 14 sts per basket with 3-st gaps
– Finished holder: about 18 in (45.7 cm) tall
If your first basket hits its checkpoints, everything after it falls into place.
Happy crocheting!