Codepen: Restaurant Menu Html Css
if (filteredItems.length === 0) menuGrid.innerHTML = `<div class="no-results"><i class="fas fa-utensils"></i> No dishes found in this category.<br>Try another delicious section ✨</div>`; return;
// Extract unique categories and order (priority: Appetizers, Mains, Pasta, Desserts, Drinks) const categoryOrder = ["Appetizers", "Mains", "Pasta", "Desserts", "Drinks"]; let uniqueCategories = [...new Map(menuData.map(item => [item.category, item.category])).values()]; // sort according to preferred order, then alphabetically for any extra uniqueCategories.sort((a,b) => let indexA = categoryOrder.indexOf(a); let indexB = categoryOrder.indexOf(b); if (indexA !== -1 && indexB !== -1) return indexA - indexB; if (indexA !== -1) return -1; if (indexB !== -1) return 1; return a.localeCompare(b); ); restaurant menu html css codepen
<div class="footer-note"> <span><i class="fas fa-leaf"></i> Locally sourced</span> <span><i class="fas fa-wine-bottle"></i> Wine pairing available</span> <span><i class="fas fa-clock"></i> Tue–Sun 5PM – 11PM</span> </div> </div> if (filteredItems
body background: #f9f6ef; font-family: 'Inter', sans-serif; color: #2c2418; line-height: 1.4; scroll-behavior: smooth; const imgSrc = dish
let cardsHtml = ''; filteredItems.forEach(dish => // fallback image if unsplash not reachable? but unsplash works, reliable. provide a backup color style. const imgSrc = dish.img; // Dietary badge tiny let dietBadge = ''; if (dish.dietary === 'veg') dietBadge = '<span class="badge-cat"><i class="fas fa-seedling"></i> Vegetarian</span>'; else if (dish.dietary === 'seafood') dietBadge = '<span class="badge-cat"><i class="fas fa-fish"></i> Seafood</span>'; else if (dish.dietary === 'meat') dietBadge = '<span class="badge-cat"><i class="fas fa-drumstick-bite"></i> Meat</span>'; cardsHtml += ` <div class="menu-card"> <img class="card-img" src="$imgSrc" alt="$dish.name" loading="lazy" onerror="this.src='https://placehold.co/500x300/efe3d4/7a5a3e?text=Le+Bistro'"> <div class="card-content"> <div class="dish-header"> <h3 class="dish-name">$escapeHtml(dish.name)</h3> <span class="dish-price">$dish.price</span> </div> <div class="dish-desc">$escapeHtml(dish.desc)</div> <div class="dish-meta"> <span><i class="fas $dish.icon"></i> Signature</span> $dietBadge ? `<span>$dietBadge</span>` : '' </div> </div> </div> `; ); menuGrid.innerHTML = cardsHtml;
/* footer / signature */ .footer-note text-align: center; margin-top: 3rem; padding-top: 2rem; border-top: 1px solid #ecdccb; font-size: 0.8rem; color: #a08162; display: flex; justify-content: center; gap: 2rem; flex-wrap: wrap; .footer-note span i margin-right: 6px;