12 Kids Grazing Table Ideas: Fun Birthday Party Spreads

Table of Contents

The rainbow fruit skewer table from the pin, with a shopping list that scales for 10, 20, 30 or 50 guests, then eleven more spreads: snack cups, cracker stacks, roll-ups, a first birthday table, a budget table and one for a crowd.

  • 12 spreads, one method
  • Shopping list for 20, 30 or 50
  • First birthday and budget tables
  • Nut-free and halal
A kids birthday grazing table from above on red and white gingham: rainbow fruit skewers of strawberry, mandarin, pineapple, green grape, blueberries and red grape laid diagonally on a long wooden board, light blue bowls of candy-coated chocolates, cheddar cubes, mini pretzel twists, round crackers, rolled turkey bites, a stand of cupcakes with sky-blue frosting, red, yellow and teal balloons at the edge, bright daylight

The table from the pin: rainbow fruit skewers on a wooden board, cheddar cubes, pretzel twists, candy cups and cupcakes on red gingham.

A kids grazing table is the easiest birthday food there is: no plates to fill, nothing to cut, and children help themselves. The skill is in the quantities and the layout. The featured table below comes with a shopping list that scales from 10 guests to 50, and the eleven ideas after it cover every kind of party.

In this post:

  • Why a grazing table works for kids
  • The rainbow skewer table, for 10 to 50 guests
  • Five rules for a table that looks like the pin
  • How much food per guest
  • Where everything goes
  • Six themes for the same table
  • 11 more spreads: savory, sweet and every kind of party
  • Budget swaps, little-kid safety and 14 FAQs

Jump to the Shopping List →

Why a Grazing Table Works for a Kids Birthday

Children serve themselves

Bite-size food at their height, in colors they recognize. Nothing needs a knife, a plate or an adult to hand it out, so the party runs while the grown-ups talk.

One shopping list, any guest count

The card below scales from 10 guests to 50, and the how-much table under it gives per-guest amounts, so nothing runs out and little goes home.

Most of it is made the day before

Cheese cubed, roll-ups rolled, dips portioned, cupcakes frosted. Only the skewers are threaded the morning of, and they keep four hours in the fridge.

Twelve tables, one method

Rainbow rows, bowls first, crunch in the gaps. The same steps build a first birthday table, a budget one or a spread for 50; only the food changes.

The Rainbow Fruit Skewer Grazing Table: Shopping List and Setup

Number 1 of 12, and the table on the pin. The card is set for 20 guests; tap 10, 30 or 50 and every quantity changes.

Rainbow Fruit Skewer Grazing Table

The table from the pin: rainbow fruit skewers on a wooden board, cheddar cubes, rolled turkey bites, crackers, pretzels, candy cups and cupcakes. Tap a guest count and the shopping list scales; print the card and take it to the store.

<p class="kg-rc-lbl">How many guests?</p>
<div class="kg-tabs">
  <label for="kgsA">10</label>
  <label for="kgsB">20</label>
  <label for="kgsC">30</label>
  <label for="kgsD">50</label>
</div>

<ul class="kg-meta">
  <li><span>Prep</span>1 hour, day before</li>
  <li><span>Assemble</span>45 minutes</li>
  <li><span>Serves</span><b class="svA">10 guests</b><b class="svB">20 guests</b><b class="svC">30 guests</b><b class="svD">50 guests</b></li>
  <li><span>Table</span><b class="svA">3-ft board or tray</b><b class="svB">4- to 5-ft table</b><b class="svC">6-ft table</b><b class="svD">two 6-ft tables</b></li>
</ul>

Ingredients

  • 15304575 Rainbow skewers: 6-inch blunt bamboo skewers or party picks
  • ¾ lb (15)1½ lb (30)2¼ lb (45)3¾ lb (75) strawberries, hulled
  • 24610 mandarins, segmented (or cantaloupe chunks)
  • 1½ cups3 cups4½ cups7½ cups pineapple, 1-inch chunks
  • ½ lb1 lb1½ lb2½ lb seedless green and red grapes
  • ½ cup1 cup1½ cups2½ cups blueberries
  • 8 oz1 lb1½ lb2½ lb The board: cheddar or colby jack, ¾-inch cubes
  • 6 oz12 oz18 oz30 oz halal turkey or chicken deli slices
  • 2 oz4 oz6 oz10 oz cream cheese, softened (for the roll-ups)
  • 24610 mini cucumbers (sticks for the roll-ups, rounds for the board)
  • ½ lb1 lb1½ lb2½ lb baby carrots
  • 8 oz1 lb1½ lb2½ lb round butter crackers
  • 6 oz12 oz18 oz30 oz mini pretzel twists
  • ¾ cup1½ cups2¼ cups3¾ cups ranch or Greek yogurt dip
  • 6 oz12 oz18 oz30 oz Sweets: candy-coated chocolates
  • 4 oz8 oz12 oz20 oz halal-gelatin or pectin gummy bears
  • 12243660 cupcakes (or the birthday cake)

Skewers: blunt-ended bamboo or paper party picks; for under-5s, serve the same fruit in cups. Under-4s: quarter grapes lengthwise and halve blueberries. Deli slices: halal turkey or chicken; check the label. Gummies: halal gelatin or pectin.

Instructions

  1. Prep the day before Wash the fruit and dry it on towels. Cube the cheese and cut the pineapple. For the roll-ups, spread each deli slice with cream cheese, roll it around a cucumber stick, wrap tight and chill. Portion the dips and fill the candy cups.
  2. Thread the skewers The morning of, up to 4 hours ahead: strawberry through the hull end, mandarin segment, pineapple, green grape, three blueberries, red grape. Lay them on a tray, cover with a damp paper towel and chill.
  3. Cover the table Red gingham or kraft paper over a folding table, the largest wooden board in the middle, a cake stand at one back corner for the cupcakes and an upturned bowl under a tray for height.
  4. Bowls first Set the dips, candy cups and pretzel bowls across the board before any food goes down, spaced so every part of the table has one.
  5. Lay the skewers Line them diagonally along the front of the board in rainbow order, all pointing the same way. They are the centerpiece, and they sit at kid height.
  6. Fill the board Halve the roll-ups and stand them cut side up beside the cheese. Run the cheese cubes in a curve, fan the crackers, and put the carrots and cucumber rounds next to the ranch.
  7. Close the gaps Push pretzels and crackers into every gap until no board shows. Cupcakes go on the stand at the back, candy cups beside them.
  8. Serve and refill Put it out 15 minutes before guests arrive, with half the skewers and roll-ups held back in the fridge. Refill at the one-hour mark; cold food goes back in after 2 hours.

Download the Recipe Card (PNG) →

Five Rules for a Kids Grazing Table That Looks Like the Pin

Extreme close-up of rainbow fruit skewers on a wooden board: a red strawberry, an orange mandarin segment, a yellow pineapple chunk, a green grape, three blueberries and a red grape on each, glistening, red and white gingham blurred behind, bright natural light, shallow depth of field

Up close: strawberry, mandarin, pineapple, green grape, blueberries and red grape, in the same order on every skewer.

1

Rainbow order does the decorating

Red, orange, yellow, green, blue, purple, on the skewers or in rows. Color in order looks planned; the same food heaped at random looks like leftovers.

2

Bowls first, then the board, then the gaps

Place every bowl before any food goes down, then the big items, then crackers and pretzels pushed into each gap so no board shows.

3

Kid height at the front, sweets at the back

Skewers, cheese and roll-ups along the front edge where small hands reach. Cupcakes and candy at the back or on a stand, so the savory goes first.

4

Nothing to cut, nothing to build

Every item is one or two bites and picks up with fingers. No knives on the table, no cheese wedges, no whole fruit.

5

Two hours out, then refill

Put out half and keep the rest chilled on trays. After two hours (one hour above 90°F) cold food goes back in and the refill trays come out.

How Much Food for a Kids Grazing Table: 10, 20, 30 or 50 Guests

The same amounts as the card, side by side:

GuestsTableFruit skewersRoll-up bitesCheeseCrackers + pretzelsCupcakes
Guests10Table3-ft board or trayFruit skewers15Roll-up bites24Cheese8 ozCrackers + pretzelsabout 1 lbCupcakes12
Guests20Table4- to 5-ft tableFruit skewers30Roll-up bites48Cheese1 lbCrackers + pretzels1¾ lbCupcakes24
Guests30Table6-ft tableFruit skewers45Roll-up bites72Cheese1½ lbCrackers + pretzels2½ lbCupcakes36
Guests50TableTwo 6-ft tablesFruit skewers75Roll-up bites120Cheese2½ lbCrackers + pretzels4½ lbCupcakes60
GuestsPer guestTable—Fruit skewers1½Roll-up bites2 to 3Cheeseabout ¾ ozCrackers + pretzelsabout 1½ ozCupcakes1, plus spares

These amounts are for a party between meals. If the party runs over lunch, add one hearty item: pinwheels, shape-cut sandwiches or mini pizzas (numbers 4 to 6), about three pieces a child.

How to Lay Out a Kids Grazing Table

A kids grazing table being set up, seen from above: a long wooden board on red gingham with light blue bowls of ranch, candy and pretzels already placed, a row of rainbow fruit skewers along the front, a tray of rolled turkey bites and a bowl of cheddar cubes waiting beside the board, crackers still stacked in their sleeves, bright daylight

Halfway there: the bowls placed first, the skewers in rows, and the crackers and pretzels still to fill the gaps.

Think of it as a line, not a pile. Guests start at one end and leave at the other:

ZoneWhat goes thereWhy
ZoneFront edgeWhat goes thereFruit skewers, cheese cubes, roll-up bitesWhyKid height; the fresh food is reached first
ZoneMiddleWhat goes thereCrackers, pretzels, carrots and cucumber around the dipsWhyCrunch fills the gaps and frames the bowls
ZoneStart of the lineWhat goes thereSnack cups or small plates, napkins, wipesWhyGuests pick up a cup and move along
ZoneBack, or on a standWhat goes thereCupcakes and candy cupsWhySeen from across the room, reached last
ZoneFar endWhat goes thereDrinks and the birthday cakeWhyKeeps spills away from the board
ZoneThe fridgeWhat goes thereHalf the skewers and roll-ups on traysWhyThe refill at the one-hour mark

Six Themes for the Same Table

The layout stays the same; the colors, cutters and cloth change. Tap one:Rainbow (as written)DinosaurUnicornUnder the seaSports dayTea party

Rainbow Birthday

The table above: rainbow skewers, red gingham, sky-blue bowls and balloons in the same colors. It suits any age, and any child who cannot pick a theme.

Dinosaur Dig

Kraft paper, green grapes, kiwi, broccoli “trees” and cucumber, chocolate pudding cups under cookie-crumb “dirt” with a toy dinosaur pushed in, pretzel-stick bones and dinosaur-cut sandwiches.

Pastel Unicorn

Pastels instead of the rainbow: strawberries, pineapple, green grapes and blueberries with a pink strawberry-yogurt dip, white-chocolate pretzels in pastel sprinkles, star-cut cheese and cupcakes swirled pink, lilac and mint.

Under the Sea

A blue cloth, blueberries and blue candy in bowls, fish-shaped crackers in a “school”, cucumber ribbons as seaweed, mandarin segments as tiny fish and cupcakes with blue frosting waves.

Sports Day

A green cloth marked like a field, popcorn, pretzels and cheese in team-color cups, round crackers as balls, sandwiches cut into rectangles and cupcakes topped with candy balls.

Tea Party

Mismatched saucers instead of boards, crustless finger sandwiches, strawberries, mini scones with jam, heart-cut cheese and juice poured from a teapot. The calmest of the six, and the best for under-sevens.

Savory Kids Grazing Table Ideas

Five spreads built around crackers, cheese and roll-ups. Numbers 2 to 6:

2

Snack Cup Station Germ-friendly

Clear cups filled the morning of, so every child takes their own: ranch or hummus in the bottom with carrot, cucumber and pepper sticks standing in it, fruit cups, pretzel-and-cheese cups and popcorn cups for the big kids. A name sticker on each, and nothing gets double-dipped.

3

Build-Your-Own Cracker Stacks Lunch-friendly

Round crackers, cheddar and colby slices cut into circles with a cookie cutter, halal turkey circles, cucumber rounds and cherry tomato halves, laid in rows so children stack their own. The homemade version of the boxed cracker kits, for a fraction of the price.

4

Rolled Deli Bites and Pinwheels Make ahead

Halal turkey or chicken slices spread with cream cheese, rolled around a cucumber stick and halved. Pinwheels too: a large tortilla with cream cheese, turkey and spinach, rolled tight, chilled an hour and sliced into eight. Both keep a day, wrapped, in the fridge.

5

Shape-Cut Sandwich Board Lunch-friendly

Soft-bread sandwiches cut with star, heart and dinosaur cookie cutters: cheese, egg salad, chicken salad, and jam with sunflower seed butter as a nut-free sweet one. Stack them by filling with a small label, and save the offcuts for the adults.

6

Mini Pizza Board Warm

English muffin or mini naan halves with tomato sauce and mozzarella, baked at 425°F for 8 to 10 minutes, halved and served warm, with bowls of peppers, sweetcorn, olives and halal beef or chicken pepperoni for a build-your-own second round.

Sweet Spreads: Candy Cups and Cupcakes

A kids birthday party food table against a white wall: a tiered stand of cupcakes with sky-blue and yellow frosting, a row of clear cups filled with colorful candy, a wooden grazing board of cheese cubes, crackers, rolled turkey bites and fruit skewers in front, red, yellow and teal balloons, paper bunting, red gingham cloth, bright cheerful light

The party end of the table: cupcakes on a stand, candy cups in a row and the grazing board in front, with balloons in the same colors.

Numbers 7 and 8, kept at the back of the table:

7

Candy Cup Corner Big kids

Clear cups filled one color each, so the candy makes its own rainbow: candy-coated chocolates, halal or pectin gummy bears, chocolate-covered raisins, sprinkle-dipped pretzels. One small cup per child instead of open bowls, at the back of the table, with hard candy and lollipops kept away from under-4s.

8

Cupcake and Cookie Dessert Board Day before

Cupcakes on a tiered stand in two frosting colors from the theme, beside a board of mini cookies, chocolate-dipped pretzel rods in sprinkles, sprinkle-dipped strawberries and crispy rice treats cut into squares. It can replace the cake or sit beside it.

A Grazing Table for Every Kind of Party

Morning, first birthday, budget, big crowd. Numbers 9 to 12:

9

Pancake Breakfast Board Morning party

For a morning party: silver-dollar pancakes and waffle quarters kept warm in a low oven, berries, banana coins, yogurt cups, a small jug of maple syrup, whipped cream, sprinkles and halal chicken breakfast sausages. Children build their own stacks; the adults get coffee.

10

First Birthday Grazing Table Baby-safe

Two halves. A low tray of soft food for the babies (banana, ripe avocado, steamed carrot and sweet potato sticks, quartered blueberries, puffs, yogurt melts) and the full table for older children and adults, with the smash cake in the middle. Nothing hard, round or sticky on the baby side.

11

Budget DIY Grazing Table Budget

Whole fruit cut at home (clementines, bananas, watermelon, apples in lemon water), block cheese cubed yourself, stovetop popcorn, pretzels, carrots and a yogurt dip, on kraft paper over a folding table. One splurge, berries or cupcakes, in the middle. The swap table below has the rest.

12

The 50-Guest Party Table Big party

Two 6-foot tables end to end with the food set out double-sided, the same layout repeated on each so neither end runs out first. Half the food on the table, half on trays in the fridge, and one adult on refills at the one-hour mark.

Budget Swaps

Instead ofUseWhy
Instead ofPre-cut fruit traysUseWhole fruit cut at homeWhyYou pay a lot for the cutting
Instead ofBerries for everythingUseClementines, grapes, bananas, watermelonWhyBerries as the one splurge in the middle
Instead ofPre-sliced cheeseUseBlock cheddar, cubed or cut with a cookie cutterWhyCheaper, and the shapes look planned
Instead ofA deli platterUsePinwheels: tortillas, cream cheese, a few turkey slicesWhyOne pack of turkey goes much further
Instead ofCandy by the bagUsePopcorn tossed with sprinkles and a little candyWhyFills cups for very little
Instead ofBoards and plattersUseKraft paper on a folding table, parchment under moist foodWhyLooks like the pin, nothing to buy
Instead ofBakery cupcakesUseA home-baked sheet cake cut in squaresWhySame frosting, one pan

Little-Kid and Allergy Safety

Watch forDo this
Watch forWhole grapes, cherry tomatoes, blueberriesDo thisQuarter grapes and tomatoes lengthwise and halve blueberries for under-4s
Watch forPopcorn, whole nuts, hard candy, lollipopsDo thisLeave them off for under-4s, or keep them at a separate big-kid end
Watch forCheese cubes and deli rollsDo thisThin strips for toddlers instead of cubes and rounds
Watch forSkewersDo thisBlunt ends and an adult nearby; for under-5s, the same fruit in cups
Watch forNutsDo thisKeep the table nut-free, check cracker and chocolate labels, and say so on a small sign
Watch forGelatinDo thisGummies made with halal gelatin or pectin
Watch forHeatDo thisTwo hours out at most, one hour above 90°F; trays over ice outdoors

Make Ahead: The Timeline

WhenWhatNotes
When2 days aheadWhatShop; bake the cupcakes and freeze them unfrosted; make the dipsNotesDips in lidded tubs in the fridge
WhenThe day beforeWhatWash and dry fruit, cube cheese, roll the deli bites and pinwheels, cut pineapple, fill candy cups, frost cupcakesNotesWrapped tight and chilled
WhenMorning ofWhatSegment mandarins, thread skewers (up to 4 hours ahead), fill snack cupsNotesSkewers under a damp paper towel in the fridge
When1 hour beforeWhatCover the table, set bowls and stands, lay crackers and pretzelsNotesDry food first
When15 minutes beforeWhatSkewers, cheese, roll-ups and dips go outNotesHalf out, half on refill trays
WhenAt 1 hourWhatRefill from the fridge and clear empty bowlsNotesCold food back in at 2 hours

More grazing tables on the site:

Troubleshooting

ProblemLikely causeFix
ProblemFruit weeping onto the boardLikely causeWashed fruit not dried, or cut too earlyFixDry on towels; thread the morning of
ProblemStrawberries split on the skewerLikely causePushed through the sideFixThread through the hull end, point outward
ProblemRoll-ups unrollingLikely causeCut before chillingFixWrap tight, chill 1 hour, cut with a sharp knife
ProblemSoft crackersLikely causeNext to wet fruit, or out too longFixCrackers on the dry side; refill instead of setting all out
ProblemBoard looks sparseLikely causeGaps between itemsFixPretzels and crackers into every gap; no board should show
ProblemSweets gone firstLikely causeCandy at the frontFixSweets at the back or on a stand, savory along the edge
ProblemToo much left overLikely causePlanned like a meal for a snack-time partyFixUse the per-guest row; refill trays, not a fuller table
ProblemMessy after 30 minutesLikely causeNo cups or plates at the startFixSnack cups or small plates and wipes at one end

Nutrition (approximate, per guest)

Calories~420

Protein~12g

Carbs~50g

Fat~20g

One guest’s share of the savory and fruit on the card (1½ skewers, 2 roll-up bites, cheese, crackers, pretzels, carrots and dip), before cupcakes and candy.

Kids Grazing Table: FAQs

What do you put on a kids grazing table?

Bite-size food children can pick up: fruit skewers or cut fruit, cheese cubes, crackers, pretzels, roll-up bites or pinwheels, carrot and cucumber sticks with a dip, and a few sweets such as cupcakes and candy cups. Rainbow colors, nothing that needs cutting, and the sweets at the back. How much food do I need for a kids grazing table for 20?

For a party between meals: about 30 fruit skewers, 48 roll-up bites, 1 lb of cheese, 1¾ lb of crackers and pretzels, 1½ lb of carrots and cucumber with dips, and 24 cupcakes. The card above has the full list; tap 30 or 50 for bigger parties. How much food for a grazing table for 50 guests?

Roughly 75 fruit skewers, 120 roll-up bites, 2½ lb of cheese, 4½ lb of crackers and pretzels and 60 cupcakes, on two 6-foot tables with half held back in the fridge. If the party runs through lunch, add pinwheels or sandwiches at three pieces a child. How do you make a cheap kids grazing table?

Cut whole fruit and block cheese yourself, lean on popcorn, pretzels, carrots, bananas and clementines, make pinwheels instead of buying a deli tray, and lay it all on kraft paper over a folding table. Keep one splurge, berries or cupcakes, in the middle. How far ahead can I make a grazing table?

Most of it the day before: cheese cubed, roll-ups and pinwheels rolled, dips made, cupcakes frosted, candy cups filled. Thread the skewers the morning of, up to four hours ahead, and set up the table in the last hour. How long can a grazing table sit out?

Two hours for cheese, deli bites, dips and cut fruit, or one hour above 90°F, then back into the fridge. Crackers, pretzels, popcorn and candy can stay out. Putting out half and refilling keeps the table full and safe. How do you make a grazing table for a first birthday?

Split it: a low tray of soft, baby-safe food (banana, avocado, steamed carrot and sweet potato sticks, quartered blueberries, puffs) for the babies, and the full table for older children and adults, with the smash cake in the middle. Number 10 above has the list. Are fruit skewers safe for toddlers?

Not on sticks. For under-5s, serve the same fruit in cups, with grapes quartered lengthwise and blueberries halved for under-4s. For older children, use blunt-ended skewers or paper party picks and keep an adult near the table. What is the difference between a grazing table and a charcuterie board?

A charcuterie board is built around cured meats and cheese for adults. A kids grazing table is a whole table of finger food, mostly fruit, cheese, crackers and sweets, with mild deli roll-ups instead of cured meats, set up so children serve themselves. How do I keep the fruit from browning?

Use fruit that does not brown for the skewers: strawberries, grapes, pineapple, mandarins, blueberries, kiwi and melon. Apples and bananas need a quick dip in lemon water or go out last. Dry everything well so the board stays dry. What are nut-free grazing table ideas?

Everything on this list can be nut-free: fruit, cheese, crackers, pretzels, roll-ups, popcorn and cupcakes. Check cracker, chocolate and candy labels for “may contain” warnings, use sunflower seed butter instead of peanut butter, and put a small sign on the table. What theme should a kids grazing table be?

Rainbow is the easiest and suits any age, because the fruit does the decorating. Dinosaur, unicorn, under the sea, sports day and tea party versions are in the theme tabs above; the layout stays the same and only the colors and cutter shapes change. What do you set a grazing table on?

A folding table covered with kraft paper or a gingham cloth, wooden boards and trays on top, and parchment under any moist food. Add height with a cake stand and an upturned bowl under a tray. A 6-foot table holds food for about 30 guests. How do I keep a grazing table cold outdoors?

Set the dips, roll-ups and cheese on trays over ice, keep the table in the shade, put out smaller amounts and refill from a cooler every 30 to 45 minutes. Above 90°F, nothing cold sits out longer than an hour.

https://assets.pinterest.com/ext/embed.html?id=1038220520365969538

Save the pin so the shopping list, the how-much table and all 12 spreads are one tap away.

More Grazing Tables

An all-fruit table, a lunch version, the budget guide, grazing cups, the smash cake and a table for 100.

All Fruit

Fruit Grazing Table

The rainbow without the crackers. See the table → Lunch Party Grazing Table with Sandwiches For a party that runs over lunch. See the table → Budget Cheap Grazing Table Ideas More ways to spend less. See the ideas → Individual Grazing Cups The snack-cup station, in full. See the cups → First Birthday Sugar-Free Smash Cake For the middle of number 10. See the recipe → Big Crowd Grazing Table for 100 People When 50 is not enough. See the plan →

Bowls first, rainbow rows, crunch in the gaps, half held back for the refill. The table looks like the pin and the party runs itself.

Pin this kids grazing table plan for the next birthday.

Save This Grazing Table on Pinterest →

[v(‘–sky’, ‘#f0f6fa’), v(‘–sky-b’, ‘#d2e6ef’), v(‘–sky-d’, ‘#3a6c85’)]

] }; } /* ———- DOM reading ———————————————— */ function txt(el) { if (!el) { return ”; } return (el.textContent || ”).replace(/\s+/g, ‘ ‘).replace(/ /g, ‘ ‘).trim(); } /* Reads only what is actually on screen. The serving-size amounts are hidden with CSS, and different posts use different class names for them (.svA..svD, .sv1..sv4), so visibility is the honest test rather than any class name. */ function visibleText(el, skip) { var out = ”; /* display is the only test. visibility and off-screen positioning are how print-only cards hide themselves, and those nodes are exactly the ones we DO want to read. The root is never tested for the same reason. */ function walk(n, isRoot) { if (n === skip) { return; } if (n.nodeType === 3) { out += n.nodeValue; return; } if (n.nodeType !== 1) { return; } if (!isRoot) { var st; try { st = getComputedStyle(n); } catch (e) { st = null; } if (st && st.display === ‘none’) { return; } } for (var i = 0; lt(i, n.childNodes.length); i++) { walk(n.childNodes[i], false); } } walk(el, true); return out.replace(new RegExp(‘\\s+’, ‘g’), ‘ ‘) .replace(new RegExp(‘\\u00a0’, ‘g’), ‘ ‘).trim(); } function visibleAmount(li) { var amt = li.querySelector(‘.kg-amt’); return amt ? visibleText(amt) : ”; } function ingredientText(li) { return visibleText(li, li.querySelector(‘.kg-amt’)); } /* Fallback for cards that predate the chassis markup: map whatever headings, lists and label/value pairs are actually there. */ function readGeneric(card) { var blocks = [], used = []; var metaBox = card.querySelector(‘[class*=”meta”]’); if (metaBox) { var cells = metaBox.children, chips = []; for (var i = 0; lt(i, cells.length); i++) { var lb = cells[i].querySelector(‘[class*=”lbl”],[class*=”label”]’); var vl = cells[i].querySelector(‘[class*=”val”]’); if (lb && vl) { chips.push({ label: txt(lb), value: visibleText(vl) }); } } if (chips.length) { used.push(metaBox); } var pending = chips; } var nodes = card.querySelectorAll(‘h1,h2,h3,h4,ul,ol,p,div’); var titled = false, subDone = false; for (var n = 0; lt(n, nodes.length); n++) { var el = nodes[n], tag = el.tagName.toLowerCase(); var inMeta = false; for (var u = 0; lt(u, used.length); u++) { if (used[u].contains(el)) { inMeta = true; } } if (inMeta) { continue; } if (tag === ‘h1’ || tag === ‘h2’ || tag === ‘h3’ || tag === ‘h4’) { var ht = txt(el); if (!ht) { continue; } if (!titled) { blocks.push({ t: ‘title’, text: ht }); titled = true; if (pending && pending.length) { blocks.push({ t: ‘chips’, items: pending }); pending = null; } } else { blocks.push({ t: ‘h’, text: ht }); } continue; } if (tag === ‘ul’ || tag === ‘ol’) { if (el.parentNode && (el.parentNode.tagName === ‘LI’)) { continue; } var lis = el.children, items = []; for (var l = 0; lt(l, lis.length); l++) { var s2 = visibleText(lis[l]); if (s2) { items.push(s2); } } if (items.length) { blocks.push({ t: ‘list’, ordered: tag === ‘ol’, items: items }); } continue; } if (tag === ‘div’ || tag === ‘p’) { /* one strapline, and only after the title — anything before it is the card’s own brand line, which the renderer already draws */ if (el.children.length || !titled || subDone) { continue; } var pt = visibleText(el); if (!pt || lt(pt.length, 12) || gt(pt.length, 220)) { continue; } blocks.push({ t: ‘sub’, text: pt }); subDone = true; } } if (pending && pending.length) { /* no heading came first — put the chips in anyway */ blocks.push({ t: ‘chips’, items: pending }); } return blocks; } /* Walks the card and emits a flat block list the renderer understands. */ function readCard(card) { var blocks = []; var head = card.querySelector(‘.kg-rc-head’); var body = card.querySelector(‘.kg-rc-body’); if (!head && !body) { return readGeneric(card); } if (head) { var h3 = head.querySelector(‘h3’); if (h3) { blocks.push({ t: ‘title’, text: txt(h3) }); } var ps = head.querySelectorAll(‘p’); for (var i = 0; lt(i, ps.length); i++) { var s = txt(ps[i]); /* skip the widget’s own instruction line */ if (s && gt(s.length, 24) && s.indexOf(‘?’) !== s.length – 1) { blocks.push({ t: ‘sub’, text: s }); break; } } var meta = head.querySelectorAll(‘.kg-meta li’); if (meta.length) { var chips = []; for (var m = 0; lt(m, meta.length); m++) { var lab = meta[m].querySelector(‘span’); var val = visibleText(meta[m], lab); if (val) { chips.push({ label: txt(lab), value: val }); } } if (chips.length) { blocks.push({ t: ‘chips’, items: chips }); } } } if (!body) { return blocks; } var kids = body.children; for (var n = 0; lt(n, kids.length); n++) { var el = kids[n], tag = el.tagName.toLowerCase(); if (tag === ‘h4’) { blocks.push({ t: ‘h’, text: txt(el) }); continue; } if (el.className && el.className.indexOf && has(el.className, ‘kg-sec-lbl’)) { blocks.push({ t: ‘lbl’, text: txt(el) }); continue; } if (el.className && el.className.indexOf && has(el.className, ‘kg-pc-grid’)) { var cols = el.querySelectorAll(‘.kg-pc-col’), cdata = []; for (var c2 = 0; lt(c2, cols.length); c2++) { var lis = cols[c2].querySelectorAll(‘li’), items = []; for (var l2 = 0; lt(l2, lis.length); l2++) { items.push(txt(lis[l2])); } cdata.push({ head: txt(cols[c2].querySelector(‘h5’)), items: items }); } blocks.push({ t: ‘cols’, cols: cdata }); continue; } if (tag === ‘ul’ && has(el.className, ‘kg-ing’)) { var ing = el.querySelectorAll(‘li’), ilist = []; for (var a = 0; lt(a, ing.length); a++) { ilist.push({ amt: visibleAmount(ing[a]), text: ingredientText(ing[a]) }); } blocks.push({ t: ‘ing’, items: ilist }); continue; } if (tag === ‘ol’ && has(el.className, ‘kg-steps’)) { var st = el.querySelectorAll(‘li’); for (var b = 0; lt(b, st.length); b++) { blocks.push({ t: ‘step’, n: b + 1, head: txt(st[b].querySelector(‘h4’)), text: txt(st[b].querySelector(‘p’)) }); } continue; } if (tag === ‘ol’ || tag === ‘ul’) { var g = el.querySelectorAll(‘li’), glist = []; for (var d = 0; lt(d, g.length); d++) { glist.push(txt(g[d])); } blocks.push({ t: ‘list’, ordered: tag === ‘ol’, items: glist }); continue; } if (tag === ‘p’) { var pt = txt(el); if (pt) { blocks.push({ t: ‘p’, text: pt }); } } } return blocks; } /* ———- drawing primitives —————————————- */ function rr(ctx, x, y, w, h, r) { if (gt(r, w / 2)) { r = w / 2; } if (gt(r, h / 2)) { r = h / 2; } ctx.beginPath(); ctx.moveTo(x + r, y); ctx.arcTo(x + w, y, x + w, y + h, r); ctx.arcTo(x + w, y + h, x, y + h, r); ctx.arcTo(x, y + h, x, y, r); ctx.arcTo(x, y, x + w, y, r); ctx.closePath(); } function wrap(ctx, text, maxw) { var words = String(text).split(‘ ‘), lines = [], cur = ”; for (var i = 0; lt(i, words.length); i++) { var probe = cur ? cur + ‘ ‘ + words[i] : words[i]; if (gt(ctx.measureText(probe).width, maxw) && cur) { lines.push(cur); cur = words[i]; } else { cur = probe; } } if (cur) { lines.push(cur); } return lines; } /* ———- the renderer ———————————————- */ function draw(card, opts, F, pageH, continuous, twoCol) { if (!pageH) { pageH = PH; } var P = pal(document.querySelector(‘.kg-blog’) || document.body); var blocks = readCard(card); var pages = [], ctx = null, y = 0, pageNo = 0; /* M and CW shadow the module-level page margin and content width, so every block below draws into whichever column is current without knowing that columns exist at all. */ var M0 = PAGE_M, FULLW = PAGE_CW, GUT = f(26); var colW = twoCol ? (FULLW – GUT) / 2 : FULLW; var M = M0, CW = FULLW; var col = 0, colTop = 0, inCols = false; function f(n) { return Math.round(n * F * 10) / 10; } var lastY = 0; function stripe(c, x, yy, w, h) { var g = c.createLinearGradient(x, 0, x + w, 0); g.addColorStop(0, P.vanilla); g.addColorStop(0.34, P.line); g.addColorStop(0.68, P.amber); g.addColorStop(1, P.crumb); c.fillStyle = g; c.fillRect(x, yy, w, h); } function footer(c) { c.font = ‘600 11px ‘ + SANS; c.fillStyle = P.cocoa; c.textAlign = ‘left’; if (continuous) { /* one tall image: no page numbers, the domain sits centred at the foot */ c.textAlign = ‘center’; c.font = ‘700 12px ‘ + SANS; c.fillText(opts.site || ‘kitchenguide101.com’, PW / 2, pageH – 32); c.textAlign = ‘left’; return; } c.fillText(opts.site || ‘kitchenguide101.com’, M0, pageH – 34); c.textAlign = ‘right’; c.fillText(‘Page ‘ + pageNo, PW – M0, pageH – 34); c.textAlign = ‘left’; } function newPage() { var cv = document.createElement(‘canvas’); cv.width = PW * S; cv.height = pageH * S; var c = cv.getContext(‘2d’); c.scale(S, S); c.fillStyle = P.cream; c.fillRect(0, 0, PW, pageH); /* card frame */ c.save(); rr(c, PAD, PAD, PW – PAD * 2, pageH – PAD * 2, 22); c.fillStyle = P.white; c.fill(); c.lineWidth = 3; c.strokeStyle = P.amber; c.stroke(); c.clip(); stripe(c, PAD, PAD, PW – PAD * 2, 12); c.restore(); pages.push(cv); ctx = c; pageNo = pages.length; footer(c); y = PAD + 12 + f(34); return c; } function startCols() { inCols = true; colTop = y; setCol(0); } function setCol(i) { col = i; M = M0 + i * (colW + GUT); CW = colW; y = colTop; } function ensure(h) { /* a continuous card is one image: it grows, it never breaks */ if (continuous) { return; } if (!gt(y + h, pageH – FOOT – PAD)) { return; } if (twoCol && inCols && col === 0) { setCol(1); return; } { newPage(); ctx.font = ‘700 ‘ + f(11) + ‘px ‘ + SANS; ctx.fillStyle = P.cocoa; ctx.textAlign = ‘center’; ctx.fillText((opts.title || ‘Recipe’).toUpperCase() + ‘ · CONTINUED’, PW / 2, y); ctx.textAlign = ‘left’; y += f(26); } } newPage(); for (var i = 0; lt(i, blocks.length); i++) { var b = blocks[i]; if (b.t === ‘title’) { ctx.textAlign = ‘center’; ctx.font = ‘700 ‘ + f(12) + ‘px ‘ + SANS; ctx.fillStyle = P.cocoa; ctx.fillText((opts.brand || ‘KITCHEN GUIDE 101’).toUpperCase(), M + CW / 2, y); y += f(30); ctx.font = ‘700 ‘ + f(34) + ‘px ‘ + SERIF; ctx.fillStyle = P.choc; var tl = wrap(ctx, b.text, CW); for (var t1 = 0; lt(t1, tl.length); t1++) { ctx.fillText(tl[t1], M + CW / 2, y); y += f(40); } y += f(6); ctx.textAlign = ‘left’; continue; } if (b.t === ‘sub’) { ctx.textAlign = ‘center’; ctx.font = ‘400 ‘ + f(14) + ‘px ‘ + SANS; ctx.fillStyle = P.ink; var sl = wrap(ctx, b.text, CW – 40); for (var s1 = 0; lt(s1, sl.length); s1++) { ctx.fillText(sl[s1], M + CW / 2, y); y += f(21); } y += f(12); ctx.textAlign = ‘left’; continue; } if (b.t === ‘chips’) { var per = gt(b.items.length, 4) ? 3 : b.items.length; var rows = Math.ceil(b.items.length / per); var gap = f(12), chH = f(52), pitch = f(62); var cwid = (CW – gap * (per – 1)) / per; ensure(rows * pitch + f(10)); for (var ci = 0; lt(ci, b.items.length); ci++) { var row = Math.floor(ci / per), col = ci % per; var inRow = Math.min(per, b.items.length – row * per); /* centre a short final row instead of stretching it */ var rowW = inRow * cwid + (inRow – 1) * gap; var x0 = M + (CW – rowW) / 2; var cx = x0 + col * (cwid + gap); var cy = y + row * pitch; var tint = P.tints[ci % P.tints.length]; rr(ctx, cx, cy, cwid, chH, f(14)); ctx.fillStyle = tint[0]; ctx.fill(); ctx.lineWidth = 2; ctx.strokeStyle = tint[1]; ctx.stroke(); ctx.textAlign = ‘center’; ctx.font = ‘800 ‘ + f(9) + ‘px ‘ + SANS; ctx.fillStyle = tint[2]; ctx.fillText(b.items[ci].label.toUpperCase(), cx + cwid / 2, cy + f(19)); ctx.font = ‘800 ‘ + f(13) + ‘px ‘ + SANS; ctx.fillStyle = P.choc; var vv = b.items[ci].value; while (gt(ctx.measureText(vv).width, cwid – f(14)) && gt(vv.length, 4)) { vv = vv.slice(0, vv.length – 2); } ctx.fillText(vv, cx + cwid / 2, cy + f(38)); ctx.textAlign = ‘left’; } y += rows * pitch + f(10); continue; } if (b.t === ‘h’) { if (twoCol && !inCols) { startCols(); } ensure(f(56)); ctx.textAlign = ‘center’; ctx.font = ‘700 ‘ + f(19) + ‘px ‘ + SERIF; ctx.fillStyle = P.crumb; ctx.fillText(b.text, M + CW / 2, y + f(16)); y += f(28); ctx.strokeStyle = P.line; ctx.lineWidth = 2; ctx.setLineDash([4, 5]); ctx.beginPath(); ctx.moveTo(M, y); ctx.lineTo(M + CW, y); ctx.stroke(); ctx.setLineDash([]); y += f(20); ctx.textAlign = ‘left’; continue; } if (b.t === ‘lbl’) { ensure(f(34)); y += f(8); ctx.font = ‘800 ‘ + f(10) + ‘px ‘ + SANS; ctx.fillStyle = P.cocoa; ctx.fillText(b.text.toUpperCase(), M, y + f(10)); y += f(22); continue; } if (b.t === ‘ing’) { for (var ii = 0; lt(ii, b.items.length); ii++) { var it = b.items[ii]; ctx.font = ‘800 ‘ + f(13) + ‘px ‘ + SANS; var aw = it.amt ? ctx.measureText(it.amt).width + f(8) : 0; ctx.font = ‘400 ‘ + f(13) + ‘px ‘ + SANS; var lines = wrap(ctx, it.text, CW – f(30) – aw); var hgt = Math.max(f(24), lines.length * f(19) + f(8)); ensure(hgt); ctx.strokeStyle = P.amber; ctx.lineWidth = 2.5; rr(ctx, M + 1, y + f(2), f(13), f(13), 4); ctx.stroke(); var tx = M + f(30); if (it.amt) { ctx.font = ‘800 ‘ + f(13) + ‘px ‘ + SANS; ctx.fillStyle = P.cocoa; ctx.fillText(it.amt, tx, y + f(13)); tx += aw; } ctx.font = ‘400 ‘ + f(13) + ‘px ‘ + SANS; ctx.fillStyle = P.ink; for (var li2 = 0; lt(li2, lines.length); li2++) { ctx.fillText(lines[li2], li2 === 0 ? tx : M + f(30), y + f(13) + li2 * f(19)); } y += hgt; if (lt(ii, b.items.length – 1)) { ctx.strokeStyle = P.line; ctx.lineWidth = 1.5; ctx.setLineDash([2, 4]); ctx.beginPath(); ctx.moveTo(M, y – 4); ctx.lineTo(M + CW, y – 4); ctx.stroke(); ctx.setLineDash([]); } } y += f(14); continue; } if (b.t === ‘step’) { ctx.font = ‘700 ‘ + f(15) + ‘px ‘ + SANS; var hl = wrap(ctx, b.head, CW – f(44)); ctx.font = ‘400 ‘ + f(13) + ‘px ‘ + SANS; var bl = wrap(ctx, b.text, CW – f(44)); /* never orphan a step heading: keep it with at least two body lines */ ensure(hl.length * f(21) + Math.min(2, bl.length) * f(19) + f(16)); ctx.fillStyle = P.amber; ctx.beginPath(); ctx.arc(M + f(13), y + f(9), f(13), 0, Math.PI * 2); ctx.fill(); ctx.font = ‘800 ‘ + f(13) + ‘px ‘ + SANS; ctx.fillStyle = ‘#ffffff’; ctx.textAlign = ‘center’; ctx.fillText(String(b.n), M + f(13), y + f(14)); ctx.textAlign = ‘left’; ctx.font = ‘700 ‘ + f(15) + ‘px ‘ + SANS; ctx.fillStyle = P.choc; for (var h1 = 0; lt(h1, hl.length); h1++) { ctx.fillText(hl[h1], M + f(36), y + f(14) + h1 * f(21)); } y += hl.length * f(21) + f(4); ctx.font = ‘400 ‘ + f(13) + ‘px ‘ + SANS; ctx.fillStyle = P.ink; for (var b1 = 0; lt(b1, bl.length); b1++) { ensure(f(19)); ctx.fillText(bl[b1], M + f(36), y + f(12)); y += f(19); } y += f(14); continue; } if (b.t === ‘list’) { for (var g1 = 0; lt(g1, b.items.length); g1++) { ctx.font = ‘400 13px ‘ + SANS; var gl = wrap(ctx, b.items[g1], CW – 26); ensure(gl.length * 19 + 6); ctx.fillStyle = P.amber; if (b.ordered) { ctx.font = ‘800 12px ‘ + SANS; ctx.fillText(String(g1 + 1) + ‘.’, M, y + 12); } else { ctx.beginPath(); ctx.arc(M + 4, y + 8, 3.5, 0, Math.PI * 2); ctx.fill(); } ctx.font = ‘400 13px ‘ + SANS; ctx.fillStyle = P.ink; for (var g2 = 0; lt(g2, gl.length); g2++) { ctx.fillText(gl[g2], M + 22, y + 12 + g2 * 19); } y += gl.length * 19 + 6; } y += 10; continue; } if (b.t === ‘cols’) { var nCol = b.cols.length, cgap = 14; var colw = (CW – cgap * (nCol – 1)) / nCol; var maxItems = 0; for (var q = 0; lt(q, nCol); q++) { maxItems = Math.max(maxItems, b.cols[q].items.length); } var boxh = 44 + maxItems * 18; ensure(boxh + 14); for (var cc = 0; lt(cc, nCol); cc++) { var bx = M + cc * (colw + cgap); rr(ctx, bx, y, colw, boxh, 14); ctx.fillStyle = P.vanilla; ctx.fill(); ctx.lineWidth = 2; ctx.strokeStyle = P.line; ctx.stroke(); ctx.font = ‘800 12px ‘ + SANS; ctx.fillStyle = P.crumb; ctx.fillText(b.cols[cc].head, bx + 12, y + 22); ctx.font = ‘400 11px ‘ + SANS; ctx.fillStyle = P.ink; for (var ic = 0; lt(ic, b.cols[cc].items.length); ic++) { var line = b.cols[cc].items[ic]; while (gt(ctx.measureText(line).width, colw – 32) && gt(line.length, 6)) { line = line.slice(0, line.length – 2); } if (line !== b.cols[cc].items[ic]) { line += ‘…’; } ctx.fillStyle = P.amber; ctx.beginPath(); ctx.arc(bx + 14, y + 38 + ic * 18 – 4, 2.5, 0, Math.PI * 2); ctx.fill(); ctx.fillStyle = P.ink; ctx.fillText(line, bx + 22, y + 38 + ic * 18); } } y += boxh + 16; continue; } if (b.t === ‘p’) { ctx.font = ‘400 13px ‘ + SANS; var pl = wrap(ctx, b.text, CW); ensure(pl.length * 19 + 8); ctx.fillStyle = P.ink; for (var p1 = 0; lt(p1, pl.length); p1++) { ctx.fillText(pl[p1], M, y + 12); y += 19; } y += 8; } } /* closing line on the last page */ if (!continuous && !twoCol && lt(y, pageH – FOOT – PAD – f(30))) { ctx.textAlign = ‘center’; ctx.font = ‘600 ‘ + f(11) + ‘px ‘ + SANS; ctx.fillStyle = P.cocoa; ctx.fillText(‘Saved from ‘ + (opts.site || ‘kitchenguide101.com’), PW / 2, y + f(20)); ctx.textAlign = ‘left’; } lastY = y; return { pages: pages, lastY: lastY, fill: (lastY – PAD) / (pageH – PAD * 2) }; } /* Auto-fit: a card that spills a few lines onto a near-empty second page looks like a mistake. Try progressively tighter scales and keep the first one that saves a page. The floor is 0.85 — below that the print gets too small to be worth the saved page. */ function render(card, opts) { var steps = [1, 0.95, 0.9, 0.85]; var best = null; for (var i = 0; lt(i, steps.length); i++) { var r = draw(card, opts, steps[i]); if (!best || lt(r.pages.length, best.pages.length)) { best = r; } if (r.pages.length === 1) { return r.pages; } } return best.pages; } /* A4: a real page, two columns, and only shrunk if it genuinely will not fit. Two columns buy roughly twice the content per page, so most recipes land at full size where the single-column version had to squeeze. */ function renderA4(card, opts) { var steps = [1, 0.95, 0.9, 0.85, 0.8, 0.75]; var best = null; for (var i = 0; lt(i, steps.length); i++) { var r = draw(card, opts, steps[i], PH, false, true); if (!best || lt(r.pages.length, best.pages.length)) { best = r; } if (r.pages.length === 1) { best = r; break; } } try { window.__kgCardPages = best.pages.length; } catch (e) {} return best.pages; } /* PNG wants one tall card rather than A4 pages, so measure the content first and then draw onto a canvas cut to exactly that height. */ function renderPNG(card, opts) { var probe = draw(card, opts, 1, 40000, true); var h = Math.ceil(probe.lastY + FOOT + PAD * 0.8); if (lt(h, 620)) { h = 620; } var out = draw(card, opts, 1, h, true); /* only pages[0] is saved, so a second page would mean silently lost content — the harness asserts this stays at 1 */ try { window.__kgCardPages = out.pages.length; } catch (e) {} return out.pages[0]; } window.kgRenderCard = render; window.kgRenderCardPNG = renderPNG; window.kgRenderCardA4 = renderA4; })(); (function(){ function fontsReady(cb){ try{ if(!document.fonts || !document.fonts.load){ cb(); return; } var jobs=[document.fonts.load(‘700 34px “Fredoka”‘), document.fonts.load(‘700 19px “Fredoka”‘), document.fonts.load(‘800 13px “Nunito Sans”‘), document.fonts.load(‘400 13px “Nunito Sans”‘)]; var done=false; function go(){ if(!done){ done=true; cb(); } } if(window.Promise){ Promise.all(jobs).then(go)[‘catch’](go); } setTimeout(go,1600); }catch(e){ cb(); } } function saveCanvas(cv,name,after){ function viaURL(){ try{ var a=document.createElement(‘a’); a.href=cv.toDataURL(‘image/png’); a.download=name; document.body.appendChild(a); a.click(); document.body.removeChild(a); }catch(e){} after(); } try{ if(!cv.toBlob){ viaURL(); return; } cv.toBlob(function(blob){ try{ if(!blob){ viaURL(); return; } var url=URL.createObjectURL(blob); var a=document.createElement(‘a’); a.href=url; a.download=name; document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(function(){ try{ URL.revokeObjectURL(url); }catch(e2){} },4000); }catch(e3){} after(); },’image/png’); }catch(e4){ viaURL(); } } function rescueSticky(){ try{ var nav=document.querySelector(‘.kg-blog .kg-nav’); if(!nav){return;} var el=nav.parentNode; while(el && el.nodeType===1 && el!==document.body){ var st=window.getComputedStyle(el); if(st.overflowX!==’visible’ && st.overflowX!==’clip’){ el.style.setProperty(‘overflow-y’,’visible’,’important’); el.style.setProperty(‘overflow-x’,’clip’,’important’); } if(st.transform && st.transform!==’none’){ el.style.setProperty(‘transform’,’none’,’important’); } if(st.filter && st.filter!==’none’){ el.style.setProperty(‘filter’,’none’,’important’); } if(st.contain && st.contain!==’none’){ el.style.setProperty(‘contain’,’none’,’important’); } el=el.parentNode; } }catch(e){} } function init(){ try{ rescueSticky(); }catch(e0){} try{ var btn=document.getElementById(‘kg-dl-btn’); var card=document.getElementById(‘kg-rc’)||document.getElementById(‘dlCard’); if(!btn||!card){return;} btn.addEventListener(‘click’,function(){ var original=btn.innerHTML; try{ btn.innerHTML=’Preparing your card…’; fontsReady(function(){ try{ if(!window.kgRenderCardA4){ /* never fail silently again: say so on the button itself */ btn.innerHTML=’Card tool did not load — please refresh’; setTimeout(function(){ btn.innerHTML=original; },3500); return; } /* The card is DRAWN, not photographed, so nothing here depends on scroll position, ancestor CSS, custom-property support or any external library. */ var pages=window.kgRenderCardA4(card,{ brand:’KITCHEN GUIDE 101′, site:’kitchenguide101.com’, title:’Rainbow Fruit Skewer Grazing Table’ }); var i=0; function next(){ if(i===pages.length){ btn.innerHTML=original; return; } var name=’kids-grazing-table-shopping-list.png’; if(pages.length!==1){ name=name.replace(‘.png’,’-‘+(i+1)+’.png’); } var cv=pages[i]; i++; saveCanvas(cv,name,function(){ setTimeout(next,400); }); } next(); }catch(e2){ btn.innerHTML=’Card could not be made — please refresh’; setTimeout(function(){ btn.innerHTML=original; },3500); } }); }catch(e3){ btn.innerHTML=original; } }); }catch(e4){} } try{ if(document.readyState===’loading’){ document.addEventListener(‘DOMContentLoaded’,init); } else{ init(); } }catch(e5){} })();

12 Kids Grazing Table Ideas: Fun Birthday Party Spreads

The rainbow fruit skewer table from the pin, with a shopping list that scales for 10, 20, 30 or 50 guests, then eleven more spreads: snack cups, cracker stacks, roll-ups, a first birthday table, a budget table and one for a crowd.

  • 12 spreads, one method
  • Shopping list for 20, 30 or 50
  • First birthday and budget tables
  • Nut-free and halal
A kids birthday grazing table from above on red and white gingham: rainbow fruit skewers of strawberry, mandarin, pineapple, green grape, blueberries and red grape laid diagonally on a long wooden board, light blue bowls of candy-coated chocolates, cheddar cubes, mini pretzel twists, round crackers, rolled turkey bites, a stand of cupcakes with sky-blue frosting, red, yellow and teal balloons at the edge, bright daylight

The table from the pin: rainbow fruit skewers on a wooden board, cheddar cubes, pretzel twists, candy cups and cupcakes on red gingham.

A kids grazing table is the easiest birthday food there is: no plates to fill, nothing to cut, and children help themselves. The skill is in the quantities and the layout. The featured table below comes with a shopping list that scales from 10 guests to 50, and the eleven ideas after it cover every kind of party.

In this post:

  • Why a grazing table works for kids
  • The rainbow skewer table, for 10 to 50 guests
  • Five rules for a table that looks like the pin
  • How much food per guest
  • Where everything goes
  • Six themes for the same table
  • 11 more spreads: savory, sweet and every kind of party
  • Budget swaps, little-kid safety and 14 FAQs

Why a Grazing Table Works for a Kids Birthday

Children serve themselves

Bite-size food at their height, in colors they recognize. Nothing needs a knife, a plate or an adult to hand it out, so the party runs while the grown-ups talk.

One shopping list, any guest count

The card below scales from 10 guests to 50, and the how-much table under it gives per-guest amounts, so nothing runs out and little goes home.

Most of it is made the day before

Cheese cubed, roll-ups rolled, dips portioned, cupcakes frosted. Only the skewers are threaded the morning of, and they keep four hours in the fridge.

Twelve tables, one method

Rainbow rows, bowls first, crunch in the gaps. The same steps build a first birthday table, a budget one or a spread for 50; only the food changes.

The Rainbow Fruit Skewer Grazing Table: Shopping List and Setup

Number 1 of 12, and the table on the pin. The card is set for 20 guests; tap 10, 30 or 50 and every quantity changes.

Rainbow Fruit Skewer Grazing Table

The table from the pin: rainbow fruit skewers on a wooden board, cheddar cubes, rolled turkey bites, crackers, pretzels, candy cups and cupcakes. Tap a guest count and the shopping list scales; print the card and take it to the store.

How many guests?

  • Prep1 hour, day before
  • Assemble45 minutes
  • Serves10 guests20 guests30 guests50 guests
  • Table3-ft board or tray4- to 5-ft table6-ft tabletwo 6-ft tables

Ingredients

  • 15304575 Rainbow skewers: 6-inch blunt bamboo skewers or party picks
  • ¾ lb (15)1½ lb (30)2¼ lb (45)3¾ lb (75) strawberries, hulled
  • 24610 mandarins, segmented (or cantaloupe chunks)
  • 1½ cups3 cups4½ cups7½ cups pineapple, 1-inch chunks
  • ½ lb1 lb1½ lb2½ lb seedless green and red grapes
  • ½ cup1 cup1½ cups2½ cups blueberries
  • 8 oz1 lb1½ lb2½ lb The board: cheddar or colby jack, ¾-inch cubes
  • 6 oz12 oz18 oz30 oz halal turkey or chicken deli slices
  • 2 oz4 oz6 oz10 oz cream cheese, softened (for the roll-ups)
  • 24610 mini cucumbers (sticks for the roll-ups, rounds for the board)
  • ½ lb1 lb1½ lb2½ lb baby carrots
  • 8 oz1 lb1½ lb2½ lb round butter crackers
  • 6 oz12 oz18 oz30 oz mini pretzel twists
  • ¾ cup1½ cups2¼ cups3¾ cups ranch or Greek yogurt dip
  • 6 oz12 oz18 oz30 oz Sweets: candy-coated chocolates
  • 4 oz8 oz12 oz20 oz halal-gelatin or pectin gummy bears
  • 12243660 cupcakes (or the birthday cake)

Skewers: blunt-ended bamboo or paper party picks; for under-5s, serve the same fruit in cups. Under-4s: quarter grapes lengthwise and halve blueberries. Deli slices: halal turkey or chicken; check the label. Gummies: halal gelatin or pectin.

Instructions

  1. Prep the day before

    Wash the fruit and dry it on towels. Cube the cheese and cut the pineapple. For the roll-ups, spread each deli slice with cream cheese, roll it around a cucumber stick, wrap tight and chill. Portion the dips and fill the candy cups.

  2. Thread the skewers

    The morning of, up to 4 hours ahead: strawberry through the hull end, mandarin segment, pineapple, green grape, three blueberries, red grape. Lay them on a tray, cover with a damp paper towel and chill.

  3. Cover the table

    Red gingham or kraft paper over a folding table, the largest wooden board in the middle, a cake stand at one back corner for the cupcakes and an upturned bowl under a tray for height.

  4. Bowls first

    Set the dips, candy cups and pretzel bowls across the board before any food goes down, spaced so every part of the table has one.

  5. Lay the skewers

    Line them diagonally along the front of the board in rainbow order, all pointing the same way. They are the centerpiece, and they sit at kid height.

  6. Fill the board

    Halve the roll-ups and stand them cut side up beside the cheese. Run the cheese cubes in a curve, fan the crackers, and put the carrots and cucumber rounds next to the ranch.

  7. Close the gaps

    Push pretzels and crackers into every gap until no board shows. Cupcakes go on the stand at the back, candy cups beside them.

  8. Serve and refill

    Put it out 15 minutes before guests arrive, with half the skewers and roll-ups held back in the fridge. Refill at the one-hour mark; cold food goes back in after 2 hours.

Five Rules for a Kids Grazing Table That Looks Like the Pin

Extreme close-up of rainbow fruit skewers on a wooden board: a red strawberry, an orange mandarin segment, a yellow pineapple chunk, a green grape, three blueberries and a red grape on each, glistening, red and white gingham blurred behind, bright natural light, shallow depth of field

Up close: strawberry, mandarin, pineapple, green grape, blueberries and red grape, in the same order on every skewer.

1

Rainbow order does the decorating

Red, orange, yellow, green, blue, purple, on the skewers or in rows. Color in order looks planned; the same food heaped at random looks like leftovers.

2

Bowls first, then the board, then the gaps

Place every bowl before any food goes down, then the big items, then crackers and pretzels pushed into each gap so no board shows.

3

Kid height at the front, sweets at the back

Skewers, cheese and roll-ups along the front edge where small hands reach. Cupcakes and candy at the back or on a stand, so the savory goes first.

4

Nothing to cut, nothing to build

Every item is one or two bites and picks up with fingers. No knives on the table, no cheese wedges, no whole fruit.

5

Two hours out, then refill

Put out half and keep the rest chilled on trays. After two hours (one hour above 90°F) cold food goes back in and the refill trays come out.

How Much Food for a Kids Grazing Table: 10, 20, 30 or 50 Guests

The same amounts as the card, side by side:

GuestsTableFruit skewersRoll-up bitesCheeseCrackers + pretzelsCupcakes
Guests10Table3-ft board or trayFruit skewers15Roll-up bites24Cheese8 ozCrackers + pretzelsabout 1 lbCupcakes12
Guests20Table4- to 5-ft tableFruit skewers30Roll-up bites48Cheese1 lbCrackers + pretzels1¾ lbCupcakes24
Guests30Table6-ft tableFruit skewers45Roll-up bites72Cheese1½ lbCrackers + pretzels2½ lbCupcakes36
Guests50TableTwo 6-ft tablesFruit skewers75Roll-up bites120Cheese2½ lbCrackers + pretzels4½ lbCupcakes60
GuestsPer guestTable—Fruit skewers1½Roll-up bites2 to 3Cheeseabout ¾ ozCrackers + pretzelsabout 1½ ozCupcakes1, plus spares

These amounts are for a party between meals. If the party runs over lunch, add one hearty item: pinwheels, shape-cut sandwiches or mini pizzas (numbers 4 to 6), about three pieces a child.

How to Lay Out a Kids Grazing Table

A kids grazing table being set up, seen from above: a long wooden board on red gingham with light blue bowls of ranch, candy and pretzels already placed, a row of rainbow fruit skewers along the front, a tray of rolled turkey bites and a bowl of cheddar cubes waiting beside the board, crackers still stacked in their sleeves, bright daylight

Halfway there: the bowls placed first, the skewers in rows, and the crackers and pretzels still to fill the gaps.

Think of it as a line, not a pile. Guests start at one end and leave at the other:

ZoneWhat goes thereWhy
ZoneFront edgeWhat goes thereFruit skewers, cheese cubes, roll-up bitesWhyKid height; the fresh food is reached first
ZoneMiddleWhat goes thereCrackers, pretzels, carrots and cucumber around the dipsWhyCrunch fills the gaps and frames the bowls
ZoneStart of the lineWhat goes thereSnack cups or small plates, napkins, wipesWhyGuests pick up a cup and move along
ZoneBack, or on a standWhat goes thereCupcakes and candy cupsWhySeen from across the room, reached last
ZoneFar endWhat goes thereDrinks and the birthday cakeWhyKeeps spills away from the board
ZoneThe fridgeWhat goes thereHalf the skewers and roll-ups on traysWhyThe refill at the one-hour mark

Six Themes for the Same Table

The layout stays the same; the colors, cutters and cloth change. Tap one:

Rainbow Birthday

The table above: rainbow skewers, red gingham, sky-blue bowls and balloons in the same colors. It suits any age, and any child who cannot pick a theme.

Dinosaur Dig

Kraft paper, green grapes, kiwi, broccoli “trees” and cucumber, chocolate pudding cups under cookie-crumb “dirt” with a toy dinosaur pushed in, pretzel-stick bones and dinosaur-cut sandwiches.

Pastel Unicorn

Pastels instead of the rainbow: strawberries, pineapple, green grapes and blueberries with a pink strawberry-yogurt dip, white-chocolate pretzels in pastel sprinkles, star-cut cheese and cupcakes swirled pink, lilac and mint.

Under the Sea

A blue cloth, blueberries and blue candy in bowls, fish-shaped crackers in a “school”, cucumber ribbons as seaweed, mandarin segments as tiny fish and cupcakes with blue frosting waves.

Sports Day

A green cloth marked like a field, popcorn, pretzels and cheese in team-color cups, round crackers as balls, sandwiches cut into rectangles and cupcakes topped with candy balls.

Tea Party

Mismatched saucers instead of boards, crustless finger sandwiches, strawberries, mini scones with jam, heart-cut cheese and juice poured from a teapot. The calmest of the six, and the best for under-sevens.

Savory Kids Grazing Table Ideas

Five spreads built around crackers, cheese and roll-ups. Numbers 2 to 6:

2

Snack Cup Station Germ-friendly

Clear cups filled the morning of, so every child takes their own: ranch or hummus in the bottom with carrot, cucumber and pepper sticks standing in it, fruit cups, pretzel-and-cheese cups and popcorn cups for the big kids. A name sticker on each, and nothing gets double-dipped.

3

Build-Your-Own Cracker Stacks Lunch-friendly

Round crackers, cheddar and colby slices cut into circles with a cookie cutter, halal turkey circles, cucumber rounds and cherry tomato halves, laid in rows so children stack their own. The homemade version of the boxed cracker kits, for a fraction of the price.

4

Rolled Deli Bites and Pinwheels Make ahead

Halal turkey or chicken slices spread with cream cheese, rolled around a cucumber stick and halved. Pinwheels too: a large tortilla with cream cheese, turkey and spinach, rolled tight, chilled an hour and sliced into eight. Both keep a day, wrapped, in the fridge.

5

Shape-Cut Sandwich Board Lunch-friendly

Soft-bread sandwiches cut with star, heart and dinosaur cookie cutters: cheese, egg salad, chicken salad, and jam with sunflower seed butter as a nut-free sweet one. Stack them by filling with a small label, and save the offcuts for the adults.

6

Mini Pizza Board Warm

English muffin or mini naan halves with tomato sauce and mozzarella, baked at 425°F for 8 to 10 minutes, halved and served warm, with bowls of peppers, sweetcorn, olives and halal beef or chicken pepperoni for a build-your-own second round.

Sweet Spreads: Candy Cups and Cupcakes

A kids birthday party food table against a white wall: a tiered stand of cupcakes with sky-blue and yellow frosting, a row of clear cups filled with colorful candy, a wooden grazing board of cheese cubes, crackers, rolled turkey bites and fruit skewers in front, red, yellow and teal balloons, paper bunting, red gingham cloth, bright cheerful light

The party end of the table: cupcakes on a stand, candy cups in a row and the grazing board in front, with balloons in the same colors.

Numbers 7 and 8, kept at the back of the table:

7

Candy Cup Corner Big kids

Clear cups filled one color each, so the candy makes its own rainbow: candy-coated chocolates, halal or pectin gummy bears, chocolate-covered raisins, sprinkle-dipped pretzels. One small cup per child instead of open bowls, at the back of the table, with hard candy and lollipops kept away from under-4s.

8

Cupcake and Cookie Dessert Board Day before

Cupcakes on a tiered stand in two frosting colors from the theme, beside a board of mini cookies, chocolate-dipped pretzel rods in sprinkles, sprinkle-dipped strawberries and crispy rice treats cut into squares. It can replace the cake or sit beside it.

A Grazing Table for Every Kind of Party

Morning, first birthday, budget, big crowd. Numbers 9 to 12:

9

Pancake Breakfast Board Morning party

For a morning party: silver-dollar pancakes and waffle quarters kept warm in a low oven, berries, banana coins, yogurt cups, a small jug of maple syrup, whipped cream, sprinkles and halal chicken breakfast sausages. Children build their own stacks; the adults get coffee.

10

First Birthday Grazing Table Baby-safe

Two halves. A low tray of soft food for the babies (banana, ripe avocado, steamed carrot and sweet potato sticks, quartered blueberries, puffs, yogurt melts) and the full table for older children and adults, with the smash cake in the middle. Nothing hard, round or sticky on the baby side.

11

Budget DIY Grazing Table Budget

Whole fruit cut at home (clementines, bananas, watermelon, apples in lemon water), block cheese cubed yourself, stovetop popcorn, pretzels, carrots and a yogurt dip, on kraft paper over a folding table. One splurge, berries or cupcakes, in the middle. The swap table below has the rest.

12

The 50-Guest Party Table Big party

Two 6-foot tables end to end with the food set out double-sided, the same layout repeated on each so neither end runs out first. Half the food on the table, half on trays in the fridge, and one adult on refills at the one-hour mark.

Budget Swaps

Instead ofUseWhy
Instead ofPre-cut fruit traysUseWhole fruit cut at homeWhyYou pay a lot for the cutting
Instead ofBerries for everythingUseClementines, grapes, bananas, watermelonWhyBerries as the one splurge in the middle
Instead ofPre-sliced cheeseUseBlock cheddar, cubed or cut with a cookie cutterWhyCheaper, and the shapes look planned
Instead ofA deli platterUsePinwheels: tortillas, cream cheese, a few turkey slicesWhyOne pack of turkey goes much further
Instead ofCandy by the bagUsePopcorn tossed with sprinkles and a little candyWhyFills cups for very little
Instead ofBoards and plattersUseKraft paper on a folding table, parchment under moist foodWhyLooks like the pin, nothing to buy
Instead ofBakery cupcakesUseA home-baked sheet cake cut in squaresWhySame frosting, one pan

Little-Kid and Allergy Safety

Watch forDo this
Watch forWhole grapes, cherry tomatoes, blueberriesDo thisQuarter grapes and tomatoes lengthwise and halve blueberries for under-4s
Watch forPopcorn, whole nuts, hard candy, lollipopsDo thisLeave them off for under-4s, or keep them at a separate big-kid end
Watch forCheese cubes and deli rollsDo thisThin strips for toddlers instead of cubes and rounds
Watch forSkewersDo thisBlunt ends and an adult nearby; for under-5s, the same fruit in cups
Watch forNutsDo thisKeep the table nut-free, check cracker and chocolate labels, and say so on a small sign
Watch forGelatinDo thisGummies made with halal gelatin or pectin
Watch forHeatDo thisTwo hours out at most, one hour above 90°F; trays over ice outdoors

Make Ahead: The Timeline

WhenWhatNotes
When2 days aheadWhatShop; bake the cupcakes and freeze them unfrosted; make the dipsNotesDips in lidded tubs in the fridge
WhenThe day beforeWhatWash and dry fruit, cube cheese, roll the deli bites and pinwheels, cut pineapple, fill candy cups, frost cupcakesNotesWrapped tight and chilled
WhenMorning ofWhatSegment mandarins, thread skewers (up to 4 hours ahead), fill snack cupsNotesSkewers under a damp paper towel in the fridge
When1 hour beforeWhatCover the table, set bowls and stands, lay crackers and pretzelsNotesDry food first
When15 minutes beforeWhatSkewers, cheese, roll-ups and dips go outNotesHalf out, half on refill trays
WhenAt 1 hourWhatRefill from the fridge and clear empty bowlsNotesCold food back in at 2 hours

More grazing tables on the site:

Troubleshooting

ProblemLikely causeFix
ProblemFruit weeping onto the boardLikely causeWashed fruit not dried, or cut too earlyFixDry on towels; thread the morning of
ProblemStrawberries split on the skewerLikely causePushed through the sideFixThread through the hull end, point outward
ProblemRoll-ups unrollingLikely causeCut before chillingFixWrap tight, chill 1 hour, cut with a sharp knife
ProblemSoft crackersLikely causeNext to wet fruit, or out too longFixCrackers on the dry side; refill instead of setting all out
ProblemBoard looks sparseLikely causeGaps between itemsFixPretzels and crackers into every gap; no board should show
ProblemSweets gone firstLikely causeCandy at the frontFixSweets at the back or on a stand, savory along the edge
ProblemToo much left overLikely causePlanned like a meal for a snack-time partyFixUse the per-guest row; refill trays, not a fuller table
ProblemMessy after 30 minutesLikely causeNo cups or plates at the startFixSnack cups or small plates and wipes at one end

Nutrition (approximate, per guest)

Calories~420
Protein~12g
Carbs~50g
Fat~20g

One guest’s share of the savory and fruit on the card (1½ skewers, 2 roll-up bites, cheese, crackers, pretzels, carrots and dip), before cupcakes and candy.

Kids Grazing Table: FAQs

What do you put on a kids grazing table?

Bite-size food children can pick up: fruit skewers or cut fruit, cheese cubes, crackers, pretzels, roll-up bites or pinwheels, carrot and cucumber sticks with a dip, and a few sweets such as cupcakes and candy cups. Rainbow colors, nothing that needs cutting, and the sweets at the back.

How much food do I need for a kids grazing table for 20?

For a party between meals: about 30 fruit skewers, 48 roll-up bites, 1 lb of cheese, 1¾ lb of crackers and pretzels, 1½ lb of carrots and cucumber with dips, and 24 cupcakes. The card above has the full list; tap 30 or 50 for bigger parties.

How much food for a grazing table for 50 guests?

Roughly 75 fruit skewers, 120 roll-up bites, 2½ lb of cheese, 4½ lb of crackers and pretzels and 60 cupcakes, on two 6-foot tables with half held back in the fridge. If the party runs through lunch, add pinwheels or sandwiches at three pieces a child.

How do you make a cheap kids grazing table?

Cut whole fruit and block cheese yourself, lean on popcorn, pretzels, carrots, bananas and clementines, make pinwheels instead of buying a deli tray, and lay it all on kraft paper over a folding table. Keep one splurge, berries or cupcakes, in the middle.

How far ahead can I make a grazing table?

Most of it the day before: cheese cubed, roll-ups and pinwheels rolled, dips made, cupcakes frosted, candy cups filled. Thread the skewers the morning of, up to four hours ahead, and set up the table in the last hour.

How long can a grazing table sit out?

Two hours for cheese, deli bites, dips and cut fruit, or one hour above 90°F, then back into the fridge. Crackers, pretzels, popcorn and candy can stay out. Putting out half and refilling keeps the table full and safe.

How do you make a grazing table for a first birthday?

Split it: a low tray of soft, baby-safe food (banana, avocado, steamed carrot and sweet potato sticks, quartered blueberries, puffs) for the babies, and the full table for older children and adults, with the smash cake in the middle. Number 10 above has the list.

Are fruit skewers safe for toddlers?

Not on sticks. For under-5s, serve the same fruit in cups, with grapes quartered lengthwise and blueberries halved for under-4s. For older children, use blunt-ended skewers or paper party picks and keep an adult near the table.

What is the difference between a grazing table and a charcuterie board?

A charcuterie board is built around cured meats and cheese for adults. A kids grazing table is a whole table of finger food, mostly fruit, cheese, crackers and sweets, with mild deli roll-ups instead of cured meats, set up so children serve themselves.

How do I keep the fruit from browning?

Use fruit that does not brown for the skewers: strawberries, grapes, pineapple, mandarins, blueberries, kiwi and melon. Apples and bananas need a quick dip in lemon water or go out last. Dry everything well so the board stays dry.

What are nut-free grazing table ideas?

Everything on this list can be nut-free: fruit, cheese, crackers, pretzels, roll-ups, popcorn and cupcakes. Check cracker, chocolate and candy labels for “may contain” warnings, use sunflower seed butter instead of peanut butter, and put a small sign on the table.

What theme should a kids grazing table be?

Rainbow is the easiest and suits any age, because the fruit does the decorating. Dinosaur, unicorn, under the sea, sports day and tea party versions are in the theme tabs above; the layout stays the same and only the colors and cutter shapes change.

What do you set a grazing table on?

A folding table covered with kraft paper or a gingham cloth, wooden boards and trays on top, and parchment under any moist food. Add height with a cake stand and an upturned bowl under a tray. A 6-foot table holds food for about 30 guests.

How do I keep a grazing table cold outdoors?

Set the dips, roll-ups and cheese on trays over ice, keep the table in the shade, put out smaller amounts and refill from a cooler every 30 to 45 minutes. Above 90°F, nothing cold sits out longer than an hour.

Save the pin so the shopping list, the how-much table and all 12 spreads are one tap away.

More Grazing Tables

An all-fruit table, a lunch version, the budget guide, grazing cups, the smash cake and a table for 100.

Bowls first, rainbow rows, crunch in the gaps, half held back for the refill. The table looks like the pin and the party runs itself.

Pin this kids grazing table plan for the next birthday.

Save This Grazing Table on Pinterest →

© 2026 Kitchen Guide 101 · All rights reserved · Some links are affiliate links

Scroll to Top