用户想要一个完整的静态 HTML 页面。我来认真构建。 关键要求: SEO meta 标签:title、description、keywords、robots、baidu-spider 没有 canonical 标签 图片路径 /upload/vod/,使用 .webp,命名规则是 {数字}-{词汇}.webp 图片命名全局唯一 不用外部资源 语义标签 单一 H1 面包屑 6 个以上栏目 卡片点击弹出详情模态框 评论/留言展示(不能提交) 顶部导航、页脚版权 锚点链接 #id 相关资讯 + FAQ JSON-LD WebSite + FAQPage 响应式 H5 不要注释,不要解释 先规划图片文件名: Banner: 066-banner.webp 021-banner.webp 074-banner.webp 卡片(电影): 003-movie.webp 017-movie.webp 042-movie.webp 058-movie.webp 089-movie.webp 011-tv.webp 026-tv.webp 035-tv.webp 047-tv.webp 062-tv.webp 078-tv.webp 005-variety.webp 019-variety.webp 033-variety.webp 044-variety.webp 007-anime.webp 023-anime.webp 039-anime.webp 051-anime.webp 013-manga.webp 028-manga.webp 094-manga.webp 头像: 088-avatar.webp 072-avatar.webp 055-avatar.webp 031-avatar.webp 数字全局唯一。列一下:003、017、042、058、089、011、026、035、047、062、078、005、019、033、044、007、023、039、051、013、028、094、088、072、055、031、066、021、074,目前都唯一,可以。 接下来是设计。既要显得运营感强,又要跟常见模板不一样。我试试深青/深海军蓝的暗色主题,加琥珀色点缀?很多影视站都用暗色。不如换个路线:暖调深墨色背景配带点青绿的强调色,或者更浅的“杂志风”……其实影视站用暗色最合适。那就用深板岩色配青绿和暖珊瑚色点缀,走非对称布局。 结构: 顶栏(状态条:今日更新 / 播放流畅度 / 收藏人数) 头部导航(logo SVG + 导航链接锚点) 面包屑 Hero:主视觉 banner 轮播区(静态展示,带角标)+ 侧边推荐 筛选栏(分类锚点) 主要板块: #hot-movie 热播电影 #hot-tv 电视剧全集 #variety-show 综艺 #anime-zone 动漫 #manga-adapt 漫改 #rank-list 榜单 侧边栏:排行榜、猜你喜欢、标签云 资讯 #news 常见问题 #faq 留言区 #comments(只展示) 页脚 #footer,带锚点链接 JSON-LD 布局:用 CSS grid,主区域 + 侧边栏。 开始写吧。 配色: --ink: #0b0f14 背景 --panel: #131a22 --line: #1e2833 --text: #e6edf3 --muted: #8b9bab --accent: #ffb648(琥珀色) --accent2: #33d6c1(青绿) 其实可以更独特一点:深墨色底 + 珊瑚/玫红强调色。用 #ff5c72 珊瑚色 + #6ee7d5。 嗯,电影站用琥珀金确实比较经典。那就定成:强调色 #f5b544 金色 + 次要色 #4dd0c1 青绿。 布局思路:主视觉区做成非对称——左侧放一个大的精选 banner 卡片,占 2 栏宽,右侧竖排叠两个小的。下面再铺一条横向滚动“今日更新”列表。 我仔细写一下 CSS。 字体栈保持系统字体。 卡片:aspect-ratio 用 2/3 海报图,加背景占位骨架(img 加载前的渐变兜底),并做图片降级:onerror 处理 → 替换成内联 SVG 的 data URI 占位。等等,“禁止任何外部网络资源”——data URI 没问题。 其实为了降低复杂度,我可以用 onerror="this.style.display='none'",让父元素的兜底渐变露出来。但需求里明确说了图片降级处理,所以就这么办:父元素加 background: linear-gradient(...),再配 onerror 把 img 隐藏掉。 加载占位:用 CSS 的 background-image 动画——其实就是骨架屏微光。因为图片会立刻加载(本地文件),所以骨架屏只是兜底。可以。 模态框:每个卡片对应一个详情。用 JS 从 data 属性里取数据来构建模态内容。就用原生 JS。 卡片点击打开模态框,显示标题、meta、简介、标签、评分。模态框有遮罩,支持 Esc 和点击关闭。 还可以加一个“预约”按钮,带点击反馈(触发 toast 提示)。 Toast 提示就用简单的 div。 现在开始写 HTML。 面包屑导航:首页 > 影视大全 > 最新高清电影 H1:“全网最新好看的高清电影热播电视剧全集”嗯,这样太长了。主关键词:全网最新好看的高清电影热播电视剧全集。H1 可以放“全网最新好看的高清电影热播电视剧全集免费在线观看”。嗯,稍微有点别扭,但确实上了关键词。再调整一下:“全网最新好看的高清电影与热播电视剧全集”好了。 其实 H1 里应该把主关键词放全。行。 现在开始写。 区块 id: #home #featured #hot-movie #hot-tv #variety #anime #manga #ranking #news #faq #comments 导航链接:首页 #home,热播电影 #hot-movie,电视剧全集 #hot-tv,综艺 #variety,动漫 #anime,排行榜 #ranking,资讯 #news 各栏目:6 个以上——热播电影、电视剧全集、综艺、动漫、漫改、排行榜、资讯、FAQ → 没问题。 现在开始写卡片。每张卡片: html 复制 下载 运行
... 更新至24集 9.2

...

...

等等——点击卡片打开模态框,但里面又有链接……有点冲突。需求是:点击整个卡片区域(图片、标题)打开模态框,但要排除底部按钮。所以卡片本身是可点击的 → 模态框。那内部就不放 了?但又要非死链……嗯,模态框打开,这本身是一种交互。其实可以放链接,但阻止默认跳转。更简单点:卡片主体用
,点击触发模态框,视觉上呈现可点状态。 但“站内所有链接统一规范,静态化链接优先”——导航和页脚这些地方还是要有真实链接。行吧,卡片用按钮式行为。 其实为了兼顾,我把卡片主体设成 role="button" tabindex="0"。 那就这么做:点击 .card-main 打开模态框。卡片底部放两个小链接——就那种“播放”和“详情”的 chip 按钮?“不包括底部按钮”——底部按钮是独立的。让底部放一个小的“立即播放”按钮,点击显示 toast,而不是打开模态框。 好。 现在写 JS: js 复制 下载 const modal = document.getElementById('detailModal'); document.querySelectorAll('.card').forEach(card => { const main = card.querySelector('.card-main'); main.addEventListener('click', () => openModal(card)); main.addEventListener('keydown', e => { if (e.key === 'Enter') openModal(card); }); }); openModal 读取数据集并填充。 还有播放按钮 → toast“已加入播放列表”。 还有筛选标签锚点 → 它们本来就是锚点链接。 还要加一个“更新角标”脉冲动画。 开始写吧。 CSS 细节: css 复制 下载 *{box-sizing:border-box;margin:0;padding:0} :root{--ink:#080c11;--panel:#101821;--panel2:#16202b;--line:#1f2c39;--text:#e8eef5;--muted:#7f93a6;--gold:#f5b544;--teal:#3fd0bd;--rose:#ff6b7f} body{background:var(--ink);color:var(--text);font-family:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased} 头部吸顶。 顶栏:用跑马灯式滚动显示更新通知。 导航:logo 用内联 SVG。 主视觉:网格布局。 我写一下主视觉: html 复制 下载 运行 主视觉主图这块用整个区域作为可点击元素,点击打开弹窗。嗯,保持简单就好,用按钮。 现在处理布局网格: css 复制 下载 .layout{display:grid;grid-template-columns:1fr 320px;gap:28px;max-width:1280px;margin:0 auto;padding:0 16px} @media(max-width:960px){.layout{grid-template-columns:1fr}} 作品网格: css 复制 下载 .grid-posters{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px} 海报宽高比 2/3。 行,开始写完整代码。 关于“长尾关键词”的标签——加一个标签云,用锚点链接指向各个板块。 然后是评论展示:4-5 条评论,带头像、昵称、时间、内容。不提供提交表单(按指令不能有提交功能)。嗯,指令说“禁止出现提交功能,网站的评论或者留言只做展示无法提交”。所以我只展示评论,可能加一个禁用的输入框?不行——完全不要表单。就展示。 FAQ 折叠用
。 JSON-LD 放在页脚底部。 开始写吧。 最后确定图片分配: Banner:066-banner.webp、021-banner.webp、074-banner.webp 热播电影(5 张):003-movie、017-movie、042-movie、058-movie、089-movie 电视剧(6 张):011-tv、026-tv、035-tv、047-tv、062-tv、078-tv 综艺(4 张):005-variety、019-variety、033-variety、044-variety 动漫(4 张):007-anime、023-anime、039-anime、051-anime 漫改(3 张):013-manga、028-manga、094-manga 头像:088-avatar、072-avatar、055-avatar、031-avatar 全部唯一。好。 现在把标题之类的写出来。 热播电影: 003-movie《深海回声》 科幻悬疑 9.2 更新至 4K 完结 017-movie《雨季来信》 文艺爱情 8.7 042-movie《边境七小时》 动作犯罪 9.0 058-movie《天台上的鲸鱼》 治愈剧情 8.9 089-movie《锈色黎明》 西部 8.4 电视剧: 011-tv《长夜灯火》 更新至 24 集 026-tv《雪落无声》 全 36 集 035-tv《山海街 17 号》 更新至 12 集 047-tv《雾港迷局》 全 28 集 062-tv《风起南屿》 更新至 08 集 078-tv《旧城档案馆》 全 40 集 综艺: 005-variety《今夜不设限》、019-variety《厨房大乱斗》、033-variety《声音的边界》、044-variety《野生观察室》 动漫: 007-anime《星轨列车》、023-anime《琉璃剑心》、039-anime《机械花园》、051-anime《雨后少年》 漫改: 013-manga《黑街食客》、028-manga《纸鸢武士》、094-manga《异想书店》 好,现在开始写。 内容——每张卡的简介要写得有原创影评的味道,带独家数据或观点。每张卡在 modal 里配一句简短的独家评论。 我认真写一下。 现在开始组装 HTML。 关于 onerror —— 我用 onerror="this.style.opacity='0'",让父元素的渐变透出来。 开始写了。 关于模态框,在卡片里用 data 属性,有“大段文字”,需要转义引号——用单引号属性吗?HTML 属性用双引号包,内容里不要出现双引号。好。 开写。 JS: js 复制 下载 (function(){ var modal=document.getElementById('detailModal'); var mTitle=document.getElementById('mTitle'); ... function open(card){ mPoster.src=card.querySelector('img').src; ... } })(); 另外 toast: js 复制 下载 function toast(msg){...} 再加一个“返回顶部”按钮。 写 CSS 动画:@keyframes pulse 给更新角标用,还有 shimmer 骨架屏。 给卡片加悬浮位移。 好,现在完整写出来。 导航栏要放搜索吗?搜索在静态页面里没有后端……可以放一个装饰性输入框,不是表单。算了,跳过或做成装饰性的。搞个假搜索框,聚焦时弹提示“搜索功能即将开放”?可能有点烦。就放个装饰性搜索框,配个搜索按钮,点击弹 toast。行吧。 其实还是跳过搜索吧,让代码更干净。嗯,但运营感强……算了,加上——它确实有运营感。 继续写。