We have data on our spending dating back to 2011, so we have a fairly accurate estimate of how much we spend in categories that involve large expenditures that are predictable in nature but unpredictable as to timing.
We then use sinking funds with capital one 360, which will allow you to set up multiple accounts for free. We budget a monthly amount that approximates the amortized annual expenditure on such items, and actually transfer that money into the various sinking funds. Then, when we spend the money, we take it out of the sinking funds.
This is more accounting than many people choose to do, but it has the advantage of allowing us to know with a fair degree of accuracy what our yearly budget costs us. It also is a good way to limit our spending in any category, since we have an accurate understanding of how much we actually have prioritized that category as it relates to the other categories.
For fun, here are our sinking fund budgets and categories, per month (we are a family of four and we own our primary residence, which is an 850 sq/ft condo):
Travel: $300
Gifts/hospitality (this includes Christmas, spontaneous giving, wedding/baby shower gifts, parties, and food/beverages for potlucks): $200
Car repair/oil changes/tires/maintenance/registration: $75
Haircuts: $20 (I get a really nice haircut once very 6 months, and our son gets a $13 cut every 3 months, DH is bald, DD is also bald at the age of 12 months)
Car replacement/appliance replacement/furnishings replacement/home repairs: $500
Medical expenses (contacts, bandaids, OTC medication, etc.): $40
Clothes: $40