可行,关键在于语义化多页结构、flex布局替代float、极简轮播逻辑及规范图片路径;需拆分index/menu/contact.html,共用header/footer,移动端用flex-direction:column,图片用max-width:100%,轮播仅需showSlide/nextSlide/setInterval三函数。
直接用 HTML5 + CSS3 搭餐厅网站,不靠框架、不套模板,能跑通、能改、能交作业——这事完全可行,但关键不在“会不会写 html 标签”,而在结构是否经得起点击和缩放。
学生项目常见错误是把所有内容堆在 index.html 里,加个“菜单”“关于我们”“联系我们”就用 <section> 硬塞,结果一加 JS 跳转或 CSS 媒体查询就错位。实际应按语义拆成独立文件:
index.html 只负责首页轮播图 + 推荐菜品 + 底部导航menu.html 专管分类列表(甜品/主食/饮品)+ 单品卡片(含图片、名称、简述)contact.html 仅保留表单字段(name、email、message)+ 地址地图占位图所有页面共用同一份 header 和 footer,但不要用 iframe 或 JS 动态加载——兼容性差、SEO 零分、调试时刷新就丢状态。老老实实用复制粘贴,确保每个 HTML 文件都能双击直接打开运行。
资料里反复提“浮动布局”,那是 2010 年代的妥协方案,现在写 float: left 只会多出一堆 clear: both 和高度塌陷问题。餐厅网站最典型三栏结构(左侧导航 + 中间内容 + 右侧推荐),用 display: flex 一行代码就能稳住:
立即学习“前端免费学习笔记(深入)”;
nav { width: 200px; }main { flex: 1; }aside { width: 300px; }.container { display: flex; }
注意两点:
@media (max-width: 768px) 把 flex-direction: column,否则侧边栏会挤到屏幕外max-width: 100% + height: auto,否则在手机上变形或留白学生常从网上扒整套 swiper.min.js,结果发现不会改自动播放间隔、按钮失效、图片懒加载冲突。其实纯手写轮播只需三个核心逻辑:
showSlide(n):根据索引显示第 n 张图,同时更新小圆点样式nextSlide():n++,超限时归零setInterval(nextSlide, 4000):控制节奏,别用 setTimeout 递归,容易累积延迟轮播图 DOM 结构保持极简:
<div class="slider"> <img src="cake.jpg" class="slide active"> <img src="tea.jpg" class="slide"> <div class="dots"><span class="dot active"></span><span class="dot"></span></div></div>
对应的 CSS 只需控制 .slide:not(.active) { display: none; },别加 transform 动画——低端机卡顿、iOS Safari 渲染异常都是这么来的。
所有资料都提到“images 文件夹”,但没说清楚路径怎么写才不报 404。真实情况是:
index.html 和 images 同级,图片引用必须写 <img src="images/cake.jpg">,不能漏掉 images/
menu.html 在子目录,就得写 ../images/cake.jpg
招牌奶茶.jpg 会变成 %E6%8B%9B%E7%89%8C%E5%A5%B6%E8%8C%B6.jpg,部分浏览器直接不加载最后提醒一句:所谓“兼容所有主流浏览器”,不是指你写完在 Chrome 里看着对就行。务必用 Edge、Safari(iOS 模拟器)、Firefox 各打开一次,特别是表单提交和轮播切换——那些“看起来差不多”的地方,往往是上线后用户第一句投诉的来源。