哔咔漫画下载 - 全网最新好看的高清电影热播电视剧全集手机免费在线观看 - 云幕影库 等一下,关键词密度要控制在 2%-5%。行,就这样。 现在写 CSS。要仔细写。 我来规划一下布局: text 复制 下载 .wrap { max-width: 1240px; margin: 0 auto; padding: 0 16px; } 页头: .site-header 粘性定位,深青色背景。 里面:.header-inner 用 flex 布局,左边放 logo,中间是导航,右边放搜索。 移动端的话:导航可以横向滚动。 Hero 区: .hero 用网格布局:左边是主轮播(占 2 份),右边是侧栏(占 1 份)。 桌面端 grid-template-columns 设置成 1.6fr 1fr,移动端堆叠。 主轮播:三张 banner 图叠在一起做轮换?太复杂了。干脆做静态的堆叠卡片布局,带过渡动画,用一个大的 banner 加两张小的。 其实让我把 hero 做成这样: 左边:大 banner 带标题浮层,自动轮播?简单点吧,用“手动切换”——算了,别搞 carousel JS 了,用竖排错落式的视觉:主图 + 两张堆叠小图。 就这么定: text 复制 下载 .hero-grid { display:grid; grid-template-columns: 2fr 1fr; gap:16px } .hero-main { position:relative; aspect-ratio 16/9 } .hero-side { display:grid; grid-template-rows:1fr 1fr; gap:16px } 把 067-banner 放进主图,014-banner 和 088-banner 放侧边。 加上 hero 标题浮层。 然后下面放一个“快捷筛选”锚点标签栏。 然后是各板块: #new-movie 最新高清电影 — 6 张卡片的网格,首张卡片横跨 2 列作为特色卡?用不对称的网格。 #hot-tv 热播电视剧全集 — 横向滚动行?还是用 5 张卡片的网格。 #variety 综艺 #anime 动漫 #classic 经典 #ranking 榜单(侧边栏布局加列表) #news 资讯 #faq 常见问题 #comment 评论 再加一个侧边栏。嗯,“页面侧边栏”——需要一个侧边栏。让我给主内容加一个右侧边栏,放排行榜/推荐。 那就这么定:主内容区 + 侧边栏,用网格布局。 其实为了跟普通模板拉开差异,就做成这种布局: Hero 区(整宽) 标签栏(整宽) 然后双栏布局:主内容区(栏目:最新电影、热播剧、综艺、动漫、经典)+ 侧边栏(榜单、热播标签云、资讯) 再之后是整宽的资讯区和 FAQ 区 再是评论区 页脚 嗯,但侧边栏里也放资讯,有点重复。那就侧边栏放:高分榜单 + 猜你喜欢标签 + 追剧日历。资讯区还是整宽放在后面。 其实更简单点:主内容 + 侧边栏贯穿中间那几屏,然后在后面放整宽的资讯 + FAQ + 评论。 就这么写。 主栏: #new-movie 最新高清电影 #hot-tv 热播电视剧全集 #variety 综艺速递 #anime 动漫番剧 #classic 经典佳片 侧栏: #ranking 云幕高分榜(带名次数字的列表) 热门搜索标签云(锚点) 手机观看指南(一小段带锚点的文字) 然后是整宽: #news 影视资讯 #faq 常见问题 #comment 观众留言 再是页脚。 现在开始写 CSS。 css 复制 下载 :root{ --paper:#f6f3ec; --card:#ffffff; --ink:#14201d; --deep:#0f3330; --deep2:#164a44; --accent:#d9552f; --accent-soft:#f2c14e; --muted:#6b7a76; --line:#e2ddd2; --radius:14px; } 字体栈统一用系统默认字体。 body 背景纸色,颜色用墨色。 页头: css 复制 下载 .site-header{position:sticky;top:0;z-index:60;background:linear-gradient(180deg,#0f3330,#123b37);box-shadow:0 2px 18px rgba(15,51,48,.18)} .header-inner{max-width:1240px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;gap:18px} .brand{display:flex;align-items:center;gap:10px;color:#fff;text-decoration:none;flex:0 0 auto} .brand svg{width:38px;height:38px} .brand-text b{font-size:19px;letter-spacing:.5px;display:block;line-height:1.1} .brand-text span{font-size:11px;color:#8fc7bd;letter-spacing:2px} 导航栏: css 复制 下载 .main-nav{flex:1;display:flex;gap:4px;overflow-x:auto;scrollbar-width:none} .main-nav::-webkit-scrollbar{display:none} .main-nav a{color:#cfe6e0;text-decoration:none;font-size:14.5px;padding:8px 12px;border-radius:8px;white-space:nowrap;transition:.25s} .main-nav a:hover{background:rgba(255,255,255,.1);color:#fff} .main-nav a.active{background:var(--accent);color:#fff} 搜索框: css 复制 下载 .search-box{flex:0 0 auto;display:flex;align-items:center;background:rgba(255,255,255,.12);border-radius:20px;padding:6px 12px;color:#fff} .search-box input{background:none;border:0;outline:0;color:#fff;width:130px;font-size:13px} input 放占位文字就行,因为不做提交,不用包 form。 然后是面包屑。 Hero 区。 海报/卡片。 我先把卡片结构定下来: html 复制 下载 运行
... 更新至08集 9.1

作品名

2025 · 悬疑 · 大陆

海报比例用 2:3,宽高比 2/3。 海报上的 ::before 加载骨架用 CSS 做闪烁效果,.loaded 之后隐藏。 css 复制 下载 .poster{position:relative;aspect-ratio:2/3;border-radius:12px;overflow:hidden;background:linear-gradient(135deg,#164a44,#0f3330)} .poster::before{content:'';position:absolute;inset:0;background:linear-gradient(100deg,rgba(255,255,255,0) 20%,rgba(255,255,255,.18) 50%,rgba(255,255,255,0) 80%);background-size:200% 100%;animation:shimmer 1.4s infinite} .poster.loaded::before{display:none} @keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}} .poster img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .45s ease} .work-card:hover .poster img{transform:scale(1.06)} 海报上要不要放个「海报」文字占位?不必要。 好,现在开始写内容。 栏目 1 的作品:最新高清电影 雾港回声 —— 2025 · 悬疑 · 大陆 · 9.1 第七次日落 —— 2025 · 科幻 · 美国 · 8.7 山雀不飞 —— 2024 · 剧情 · 法国 · 8.3 逆光而行 —— 2025 · 犯罪 · 韩国 · 8.9 沙漠里的鲸 —— 2024 · 文艺 · 日本 · 8.5 铁轨上的夏天 —— 2025 · 青春 · 大陆 · 7.9 热播剧: 长夜将明 —— 更新至24集 城南旧巷 —— 全36集 律政先锋2025 —— 更新至18集 雪落无声 —— 更新至30集 星轨之上 —— 更新至12集 综艺: 向往的山野 第八季 声音的角力 厨房方程式 环岛骑行日记 动漫: 千面之城 机械之心 竹取物语新解 猫町奇谭 经典: 海上钢琴师?——不对,别用真片名。最好全部虚构,免得有版权/内容不准确的问题。 经典佳片: 一九九七年的信 白鹿原上?——算了,跳过 用虚构的:老城墙下、雨季不再来?雨季不再来是真实作品。还是用:旧钟表店、最后一班渡轮、纸飞机年代、南方旅店。 好。 每个作品的描述——写点原创影评,带数据/观点。 我会给 data-desc 属性写大概 60-100 字的描述。 现在写模态框。 html 复制 下载 运行 模态框里的图片——从卡片的 img src 取。 JS 负责处理这些。 然后是提示条: html 复制 下载 运行
现在来写 JS。 js 复制 下载 (function(){ var modal=document.getElementById('detailModal'); var mTitle=document.getElementById('modalTitle'); var mMeta=document.getElementById('modalMeta'); var mDesc=document.getElementById('modalDesc'); var mPoster=document.getElementById('modalPoster'); var mTags=document.getElementById('modalTags'); var toast=document.getElementById('toast'); var toastTimer=null; function showToast(msg){ toast.textContent=msg; toast.classList.add('show'); clearTimeout(toastTimer); toastTimer=setTimeout(function(){toast.classList.remove('show')},1800); } function openModal(card){ mTitle.textContent=card.dataset.title||''; mMeta.textContent=card.dataset.meta||''; mDesc.textContent=card.dataset.desc||''; var img=card.querySelector('.poster img'); mPoster.src=img?img.getAttribute('src'):''; mPoster.alt=(card.dataset.title||'')+'海报'; mTags.innerHTML=''; (card.dataset.tags||'').split('|').forEach(function(t){ if(!t)return; var s=document.createElement('span'); s.textContent=t; mTags.appendChild(s); }); modal.classList.add('open'); modal.setAttribute('aria-hidden','false'); document.body.style.overflow='hidden'; } function closeModal(){ modal.classList.remove('open'); modal.setAttribute('aria-hidden','true'); document.body.style.overflow=''; } document.querySelectorAll('.work-card').forEach(function(card){ card.addEventListener('click',function(e){ if(e.target.closest('.card-actions')) return; openModal(card); }); }); modal.addEventListener('click',function(e){ if(e.target===modal||e.target.closest('.modal-close')) closeModal(); }); document.addEventListener('keydown',function(e){ if(e.key==='Escape'&&modal.classList.contains('open')) closeModal(); }); document.querySelectorAll('.btn-play,.btn-fav').forEach(function(btn){ btn.addEventListener('click',function(e){ e.stopPropagation(); showToast(btn.classList.contains('btn-play')?'播放源加载中,请稍候…':'已加入我的追剧列表'); }); }); })(); 注意:模态框里的 .btn-play 也会被选中,因为选择器是全局的——这是好事,stopPropagation 能防止点击穿透回卡片。 但等等:卡片上的按钮——点击它们会冒泡到卡片,但我们在卡片监听里检查了 closest('.card-actions')。不过按钮自己的监听器有 stopPropagation,所以不会冒泡。两种方式都行。 现在,这里的 modal.addEventListener 检查 e.target===modal 来关闭,意味着点击遮罩层才会关闭。不错。 接下来是卡片底部的按钮和模态框里的按钮——它们共享 .btn-play、.btn-fav 这两个类,所以样式也共用。 好。 现在处理导航栏当前状态的小细节和滚动效果——这个先跳过。 现在来搭整体的 HTML。 我得再想想主内容区 + 侧边栏的布局怎么走: css 复制 下载 .layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:26px;align-items:start} @media(max-width:980px){.layout{grid-template-columns:1fr}} 侧边栏粘性定位:aside{position:sticky;top:70px} —— 但侧边栏如果很长,粘性定位会出问题。干脆不用粘性,或者只对小模块用。保持简单:不粘性。 作品网格: css 复制 下载 .work-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px} 在宽度为 1fr 的主区域里……没问题。 对于“最新电影”这个板块,我想做点不对称的布局:第一张卡片更大。用 .work-grid--feature,让第一张横跨 2 列和 2 行?这样会变复杂。那不如让第一张卡片横跨 2 列,配 16/9 的图片?嗯。 另一个更简单的做法:把第一张卡片在网格里做成特色,grid-column: span 2; grid-row: span 2;,海报用 aspect-ratio:auto; height:100%。嗯,但里面还有标题和按钮,高度会不好处理。 算了,跳过这个。改用普通网格,但通过标题样式和带背景的板块来增加变化。 其实为了做出差异感,可以把“最新电影”做成横向滚动的胶片条?不行。 我换成这样:最新电影用大卡片(minmax(180px,1fr)),热播剧用列表加缩略图的形式?嗯,那样可能太绕了。 还是保持卡片网格的一致性,但在板块头部和背景上做变化——有些板块用白色卡片包起来,有些就直接放在纸色背景上。再给侧边栏的排行榜加一条数字线。 好,这样够了。 轮播区其实也没问题。 下面写标签栏: html 复制 下载 运行
热门筛选 2025最新电影 热播电视剧全集 ...
好。 现在来写板块标题: html 复制 下载 运行

最新高清电影 · 院线同步速递

每日 09:00 更新,手机免费在线观看不卡顿

查看高分榜 →
...
嗯,“more-link href="#ranking"”是页面内锚点,没问题。 等等——但每个板块的 H2 都应该带上关键词。不过别堆砌得太夸张。 H2 有: 最新高清电影 · 每日院线速递 热播电视剧全集 · 追更不迷路 综艺速递 · 每周上新 动漫番剧 · 新番同步 经典佳片 · 值得重看 云幕高分榜 · 万千观众票选 影视资讯 · 幕后与彩蛋 常见问题 · 手机在线观看答疑 观众留言 · 一起聊剧 好,这样是 9 个 H2。 H1 就放在轮播区或页头,要唯一。 放到轮播区里:

哔咔漫画下载|全网最新好看的高清电影热播电视剧全集,手机免费在线观看

——不过轮播区的视觉重心是主视觉图。那就把 H1 放在主视觉标题上面,作为一个可见元素。 对,就这么办: html 复制 下载 运行

全网最新好看的高清电影热播电视剧全集手机免费在线观看

...

嗯,但主视觉是图片轮播。那就重新组织一下轮播区: text 复制 下载
今日头条推荐

...

← 不行,h1 放这里也太长
...
另一种方案:H1 作为主视觉上方独立的一行。就这样: html 复制 下载 运行

全网最新好看的高清电影热播电视剧全集手机免费在线观看

云幕影库 ...

然后下面接轮播网格。 嗯,这样也还行。而且对 SEO 友好。 其实让 H1 在视觉上有点设计感——可以把它拆开,用 span 来做样式。 好。 现在开始正式写所有内容。 页脚我打算做多栏布局: 关于云幕影库 栏目导航(锚点链接) 热门标签(锚点链接) 服务条款 / 友情提示 底部版权信息:“© 2025 云幕影库 bkmhxz3.com.cn 保留所有权利。本站不存储任何视频资源,仅提供影视资讯与推荐服务。” 页脚链接全部用锚点。 然后在页脚后面放 JSON-LD。 WebSite + FAQPage。 现在开始写。 仔细写 CSS。 css 复制 下载 *{box-sizing:border-box} html{scroll-behavior:smooth;-webkit-text-size-adjust:100%} body{margin:0;font-family:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;background:#f6f3ec;color:#14201d;line-height:1.65} img{max-width:100%} a{color:inherit} 要不要给锚点设置滚动外边距?比如 section[id]{scroll-margin-top:74px}。 现在开始具体写,我把它全部写出来。 头部带搜索框——移动端把它藏起来,或者收成一个小图标。更简单一点:到 640px 以下就隐藏 .search-box。 导航:7 个栏目横向滚动。 接下来,仔细写 HTML。 我要确认一下 data-desc 属性的问题——里面会有中文和标点,没问题,但要避开英文引号。用单引号?属性用的是双引号,所以内容里不能出现双引号。行。 来写卡片。 最新高清电影(#new-movie),6 张卡片: 雾港回声 — 海报 002-movie.webp — 2025 · 悬疑犯罪 · 大陆 — 评分 9.1 — 徽标“更新至08集”?这是电影,所以徽标改成“HD 国语” 描述:“导演林砚用 47 分钟的长镜头把雾港码头拍成了第二个主角。全片仅 3 处配乐,却拿下年度最佳声音设计提名。值得注意的是,片中反复出现的蓝色信封在片尾字幕滚动时悄悄变成了红色——这是导演埋下的第二重结局。” 第七次日落 — 009-movie.webp — 2025 · 科幻 · 美国 — 8.7 — “蓝光 中英双字” 山雀不飞 — 021-movie.webp — 2024 · 剧情 · 法国 — 8.3 — “HD 中字” 逆光而行 — 034-tv.webp — 2025 · 犯罪 · 韩国 — 8.9 — “抢先版” 等等,034 是 tv,但这是电影分类。命名只用词,无所谓。不过为了稳妥,还是尽量让词和类型对上。034-tv 用在电影里……我还是用 034-tv.webp 放到热播剧里吧。 重新分配: 最新电影:002-movie、009-movie、021-movie、047-movie、056-movie……需要 6 张。加个 051-movie?不过 051 已经分给经典了。那就调整一下: 最新电影(6 个):002-movie、009-movie、021-movie、047-movie、056-movie、034-tv(嗯) 干脆这样: 最新电影:002-movie、009-movie、021-movie、047-movie、056-movie、025-movie 经典佳片:012-manga、039-manga、051-movie、044-tv……算了 重新整一下: 电影类池子:002、009、021、025、047、056(全部 -movie) 剧集池子:011、023、034、036、048、062(全部 -tv) 综艺池子:005、018、029、073(-variety) 动漫池子:007、016、031、084(-anime) 经典/其他:012-manga、039-manga、051-movie、082-tv……嗯,经典佳片反正也是电影和剧的混合。 经典佳片(4 张):012-manga、039-manga、051-movie、082-tv 等等,082 原计划是给侧栏用的。重新来。 侧栏榜单(5 个小图):044-tv、058-anime、063-variety、071-movie、076?不行,076 是头像。 重来。把清单列干净。 轮播图(3 张):067-banner、014-banner、088-banner 头像(4 张):003-avatar、041-avatar、076-avatar、095-avatar 最新电影(6 张):002-movie、009-movie、021-movie、025-movie、047-movie、056-movie 热播剧集(6 张):011-tv、023-tv、034-tv、036-tv、048-tv、062-tv 综艺(4 张):005-variety、018-variety、029-variety、073-variety 动漫(4 张):007-anime、016-anime、031-anime、084-anime 经典佳片(4 张):012-manga、039-manga、051-movie、044-tv 侧栏榜单(5 张):058-anime、063-variety、071-movie、082-tv、026-movie 嗯,026 本来想给资讯用的。算了,换一下。 侧栏榜单(5 张):058-anime、063-variety、071-movie、082-tv、090-tv 资讯(3 张):026-movie、055-tv、091-anime 用过的数字:067、014、088、003、041、076、095、002、009、021、025、047、056、011、023、034、036、048、062、005、018、029、073、007、016、031、084、012、039、051、044、058、063、071、082、090、026、055、091 = 39 张图。全部不重复 ✓(我再核对一遍:067、014、088、003、041、076、095、002、009、021、025、047、056、011、023、034、036、048、062、005、018、029、073、007、016、031、084、012、039、051、044、058、063、071、082、090、026、055、091——是的,都不重复。) 好的。 那侧栏榜单就用小图?其实可以做成纯文字榜单加排名数字——更干净,HTML 也更少。但那样侧栏就没图了。给前 3 名加个 40×56 的小缩略图吧。其实就做纯数字榜,不贴图,用颜色和数字质感做点视觉区分。嗯,不过他们说“侧边栏榜单/推荐内链导流”——锚点链接是必须的,图不是。但既然已经分配了图片,还是用上吧。 我用紧凑的侧栏列表项,配小海报缩略图。 好。 现在把所有东西写出来。 还有一点:“更新角标”——已经做了。 评论模块:以展示为主,带头像、昵称、时间、内容、点赞数。不放表单,只加一句提示语引导用户去讨论关键词。 “留言区引导用户发布相关关键词内容”——这个没问题。 开始写。 移动端导航要处理成可滚动。 现在写最终代码。 CSS 板块高度,先把关键样式做出来。 css 复制 下载 .container{max-width:1240px;margin:0 auto;padding:0 16px} 头部: css 复制 下载 .site-header{position:sticky;top:0;z-index:80;background:linear-gradient(120deg,#0d2c29,#15423c 60%,#0d2c29);border-bottom:1px solid rgba(255,255,255,.08)} 加一个微妙的顶部强调线: css 复制 下载 .site-header::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:linear-gradient(90deg,#d9552f,#f2c14e,#4fd1c5)} header 上需要 position:relative。 Logo 的 SVG:一个圆角方形,里面带播放三角和胶片孔。 html 复制 下载 运行 嗯,圆角矩形再加内联三角形,还行。不过还是稍微打磨一下:外圈圆角方形深青色,内圈橙色?改成: html 复制 下载 运行 不错——看起来像个胶片条加播放键。 现在继续写剩下的部分。 Hero 区: html 复制 下载 运行

全网最新好看的高清电影热播电视剧全集手机免费在线观看

云幕影库每日聚合院线新片与卫视热播剧,覆盖悬疑、科幻、都市、古装、动漫番剧等 26 个题材,手机端一键直达,无需注册即可浏览剧集简介与看点解析。

全网最新高清电影推荐banner
今日头条 雾港回声 长镜头封神,年度悬疑黑马
嗯,hero 主区做成 有点怪——不如直接用 div,然后点击行为指向作品?更简单点:既然它是轮播图,直接链接到 #new-movie 锚点就行。行吧。 其实把它做成非链接的视觉元素更简单。但那又像死链。链接到锚点就好。 好了。 现在开始写完整的代码。 关于“loaded”类:每个 poster 都要做这个,省得每个 img 都重复写内联 onload,干脆用 JS 统一处理: js 复制 下载 document.querySelectorAll('.poster img').forEach(function(img){ if(img.complete) img.parentNode.classList.add('loaded'); img.addEventListener('load',function(){img.parentNode.classList.add('loaded')}); img.addEventListener('error',function(){img.style.display='none';img.parentNode.classList.add('loaded')}); }); 这样更干净,去掉了内联处理器。不过如果是加载失败的情况,海报就只剩渐变加 alt 文本——alt 不会显示,因为 img 被 display none 了。要不要在那个 poster 上用 CSS 加个伪元素显示作品名?算了,渐变就够用。其实可以给 .poster 加个 data-attr 做兜底文字……还是算了。 不过等等——加载占位骨架屏会一直显示到 loaded 被加上。如果图片加载失败很快(对不存在的文件来说通常会很快),它就只是显示渐变。可以接受。 其实,真实的服务器 404 一般也会返回 HTML,所以图片还是会触发 error。好。 嗯,不过“海报”这个兜底,要不要通过 .poster 的 ::after 用 attr(data-name) 来加文字?这样处理: html 复制 下载 运行
css 复制 下载 .poster::after{content:attr(data-name);position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.28);font-size:13px;letter-spacing:2px;z-index:0} 但这样图片加载失败时它就会露出来,加载成功后图片又把盖住。可是图片有 opacity 过渡……如果加 .loaded img{opacity:1},图片就会盖在 ::after 文字上面(因为 img 的 z-index)。得确保 img 的 z-index 更高。 把 .poster img{position:relative;z-index:1} 设上,::after 用 z-index:0。::before 的骨架屏也是 z-index:2,但一加 .loaded 它就没了。 其实骨架屏在上层会盖住图片,所以加 .loaded 后移除它是对的。 不过骨架屏 ::before 带背景动画——把它设到 z-index 2,加上 pointer-events none。 OK。 而且 ::after 的文字也会被图片盖住。没问题。 等等,顺序要理一下:.poster::after 的 content 文字应该在底层。img 的 z-index 1 会盖住它。徽标和评分才用 z-index 2。 好。 现在开始写。 我来写整个页面。 关于卡片用
再加 role button?可访问性方面——加 tabindex="0" 和键盘事件?不是必须的,但加上体验会更好。为了简洁先跳过,不过我会在卡片上加上 tabindex="0",并在 JS 里监听 Enter 键。嗯,算了,先不搞键盘处理,省得代码出 bug。 好,继续写。 侧边栏排行榜: html 复制 下载 运行 等等——侧边栏里的

会多出来几个。不过没关系,这是侧边栏标题。 嗯,但主内容区的章节也用 h2,应该没问题。 那 #ranking 还放侧边栏里吗?本来想让排行榜当主内容栏目的……算了,侧边栏标题直接用 h2 就行。 不过反正已经用了 h2,要不要改成 h3?不行——按文档层级,得从 h1 往下走。还是保持 h2。 嗯,其实侧边栏标题用 h2 也行。就这吧。 然后主内容区还差“高分榜单”这个分类?侧边栏的排行榜已经把它覆盖了。 算了,还是动一下:把排行榜也放进主内容区,做成一个网格。不行,更简单的是侧边栏里那个排行榜直接负责这个。 那我列一下栏目——主内容区有:最新电影、热播剧、综艺、动漫、经典佳片 = 5 个。再加上侧边栏排行榜、热搜标签、手机指南、资讯、FAQ、评论 = 总共 11 个板块。 导航里就指向这些:#new-movie、#hot-tv、#variety、#anime、#classic、#ranking、#news、#faq。 好,8 个导航项。 开写吧。 资讯区,3 篇带图片的文章。 FAQ 区,6 个问答。 评论,5 条带头像的评论。 页脚。 JSON-LD。 现在开始写。 JS 里 querySelectorAll('.btn-play,.btn-fav') 这个——还有 hero 区域……没问题。 再确认一下:播放/收藏按钮放在 .card-actions 里,而 .card-actions 在 .work-card 里。点击按钮 → 触发按钮自己的监听器 → stopPropagation → 不会打开模态框。 现在完整写出来。 有个点:aspect-ratio 的支持——没问题。 写最终代码。 “更新至”徽标的配色用强调色。 把 CSS 完整写出来: css 复制 下载 *{box-sizing:border-box} html{scroll-behavior:smooth;-webkit-text-size-adjust:100%} body{margin:0;font-family:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;background:#f6f3ec;color:#14201d;line-height:1.65;font-size:15px} img{max-width:100%;display:block} a{color:inherit;text-decoration:none} button{font-family:inherit;cursor:pointer;border:0;background:none} h1,h2,h3,h4,p,ul,ol{margin:0;padding:0} ul,ol{list-style:none} .container{max-width:1240px;margin:0 auto;padding:0 16px} section[id],div[id]{scroll-margin-top:82px} 嗯,div[id] 会不会太宽泛了?没事。 页头按计划来。 面包屑: css 复制 下载 .crumb{max-width:1240px;margin:14px auto 0;padding:0 16px;font-size:13px;color:#7a8783} .crumb a{color:#15423c} .crumb a:hover{color:#d9552f} .crumb span{margin:0 6px;color:#b9c2be} 轮播图区: css 复制 下载 .hero{max-width:1240px;margin:18px auto 0;padding:0 16px} .hero-intro{margin-bottom:14px} .hero-intro h1{font-size:24px;line-height:1.4;letter-spacing:.2px;color:#0f3330;font-weight:800} .hero-intro p{margin-top:8px;font-size:13.5px;color:#6b7a76;max-width:820px} 桌面端 H1 字号:用 clamp → font-size:clamp(18px,3.2vw,26px)。 css 复制 下载 .hero-grid{display:grid;grid-template-columns:1.7fr 1fr;gap:14px} .hero-main{position:relative;border-radius:16px;overflow:hidden;background:linear-gradient(135deg,#164a44,#0d2c29);min-height:230px} .hero-main img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0;transition:transform .6s} .hero-main:hover img{transform:scale(1.05)} .hero-overlay{position:absolute;left:0;right:0;bottom:0;padding:18px;background:linear-gradient(0deg,rgba(13,44,41,.92),rgba(13,44,41,0))} 高度用 aspect-ratio 来定:.hero-main{aspect-ratio:16/9},移动端自动堆叠。 .hero-side 在移动端:grid-template-columns:1fr 1fr。 css 复制 下载 .hero-side{display:grid;grid-template-rows:1fr 1fr;gap:14px} .hero-mini{position:relative;border-radius:14px;overflow:hidden;background:#0d2c29;aspect-ratio:16/9} 嗯,用 grid-template-rows: 1fr 1fr 但 aspect-ratio 会冲突。那就把 hero-side 设成 display:grid;gap:14px,默认单列,每个 mini 用 aspect-ratio:16/7。桌面端的话,两张 mini 加起来高度应该和主图差不多。主图是 16/9,宽度大概是 1240*0.6≈730,高度约 410,再减去 padding……呃。干脆直接给 hero-side 设 grid-template-rows: 1fr 1fr,去掉 aspect-ratio,让每个 mini 用 min-height:120px 填满。图片用 object-fit:cover 绝对定位铺满。 其实最简单的做法是:.hero-side{display:grid;grid-template-rows:1fr 1fr;gap:14px},.hero-mini{position:relative;overflow:hidden;border-radius:14px;background:#0d2c29;min-height:110px},里面 img 绝对定位铺满整个区域。 桌面端整个 hero-grid 的高度由主图 aspect-ratio: 16/9 撑起来。这样 hero-side 的子项就会自动等高。挺好。 移动端把 hero-grid 改成单列;主图保持 16/9;hero-side 用 grid-template-rows:auto auto 并给子项设 aspect-ratio: 16/9。 媒体查询: css 复制 下载 @media(max-width:860px){ .hero-grid{grid-template-columns:1fr} .hero-side{grid-template-columns:1fr 1fr;grid-template-rows:none} .hero-mini{aspect-ratio:16/10} } 然后 mini 里的图片再绝对定位铺满。 好,接着做带横向滚动的标签栏。 css 复制 下载 .tag-bar{max-width:1240px;margin:16px auto 0;padding:0 16px;display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;align-items:center} .tag-bar::-webkit-scrollbar{display:none} .tag-bar-label{flex:0 0 auto;font-size:12px;color:#8d9a96;letter-spacing:1px;padding-right:4px;border-right:1px solid #ddd7ca} .tag-bar a{flex:0 0 auto;font-size:13px;padding:6px 13px;border-radius:999px;background:#fff;border:1px solid #e6e0d4;color:#3a4a46;transition:.25s;white-space:nowrap} .tag-bar a:hover{background:#15423c;color:#fff;border-color:#15423c;transform:translateY(-2px)} 主内容区布局: css 复制 下载 .layout{max-width:1240px;margin:26px auto 0;padding:0 16px;display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:28px;align-items:start} @media(max-width:980px){.layout{grid-template-columns:1fr;gap:22px}} 区块: css 复制 下载 .section{margin-bottom:34px} .section-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;margin-bottom:14px;position:relative;padding-left:14px} .section-head::before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:4px;border-radius:2px;background:linear-gradient(180deg,#d9552f,#f2c14e)} .section-head h2{font-size:19px;font-weight:800;color:#0f3330;letter-spacing:.2px} .section-note{font-size:12.5px;color:#8d9a96} .more-link{margin-left:auto;font-size:13px;color:#d9552f;font-weight:600} .more-link:hover{text-decoration:underline} 作品网格: css 复制 下载 .work-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(155px,1fr));gap:16px} 卡片: css 复制 下载 .work-card{background:#fff;border-radius:14px;padding:9px;border:1px solid #ece6da;transition:transform .3s,box-shadow .3s;cursor:pointer;display:flex;flex-direction:column} .work-card:hover{transform:translateY(-5px);box-shadow:0 14px 28px rgba(15,51,48,.13)} 海报按计划来。 徽标: css 复制 下载 .badge{position:absolute;top:8px;left:8px;z-index:3;background:linear-gradient(135deg,#d9552f,#e57a3d);color:#fff;font-size:11px;padding:2px 7px;border-radius:6px;font-weight:600;letter-spacing:.3px} .score{position:absolute;top:8px;right:8px;z-index:3;background:rgba(13,44,41,.78);color:#f2c14e;font-size:11.5px;font-weight:700;padding:2px 7px;border-radius:6px} 卡片主体: css 复制 下载 .card-body{padding:9px 4px 4px} .card-title{font-size:14px;font-weight:700;color:#16241f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .card-sub{font-size:11.5px;color:#8d9a96;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} 卡片操作区: css 复制 下载 .card-actions{display:flex;gap:6px;margin-top:auto;padding:8px 4px 2px} .card-actions button{flex:1;font-size:12px;padding:6px 0;border-radius:8px;transition:.22s;font-weight:600} .btn-play{background:#15423c;color:#fff} .btn-play:hover{background:#d9552f} .btn-fav{background:#f6f3ec;color:#4c5a56;border:1px solid #e4ded2} .btn-fav:hover{background:#f2c14e;color:#0f3330;border-color:#f2c14e} 侧边栏: css 复制 下载 .side-card{background:#fff;border:1px solid #ece6da;border-radius:16px;padding:16px;margin-bottom:18px} .side-title{font-size:16px;font-weight:800;color:#0f3330;margin-bottom:12px;display:flex;align-items:center;gap:8px} .side-title::before{content:"";width:5px;height:5px;border-radius:50%;background:#d9552f;box-shadow:0 0 0 4px rgba(217,85,47,.15)} 排行榜列表: css 复制 下载 .rank-list li+li{margin-top:10px} .rank-list a{display:flex;align-items:center;gap:10px;padding:6px;border-radius:10px;transition:.25s} .rank-list a:hover{background:#f6f3ec;transform:translateX(3px)} .rank-no{flex:0 0 20px;font-size:13px;font-weight:800;color:#c3cbc7;font-style:italic} .rank-list li:nth-child(1) .rank-no{color:#d9552f} .rank-list li:nth-child(2) .rank-no{color:#e0932f} .rank-list li:nth-child(3) .rank-no{color:#b5a03a} .rank-list img{width:42px;height:58px;object-fit:cover;border-radius:7px;background:#0f3330;flex:0 0 auto} .rank-name{font-size:13.5px;font-weight:600;color:#20302b;display:flex;flex-direction:column;min-width:0} .rank-name em{font-style:normal;font-size:11.5px;color:#8d9a96;font-weight:400;margin-top:2px} 标签云: css 复制 下载 .tag-cloud{display:flex;flex-wrap:wrap;gap:7px} .tag-cloud a{font-size:12.5px;padding:5px 11px;border-radius:999px;background:#f6f3ec;color:#4c5a56;transition:.22s} .tag-cloud a:hover{background:#15423c;color:#fff} 新闻区域,用全宽网格加卡片。 css 复制 下载 .news-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px} .news-item{display:flex;gap:12px;background:#fff;border:1px solid #ece6da;border-radius:14px;padding:12px;transition:.28s} .news-item:hover{transform:translateY(-4px);box-shadow:0 12px 24px rgba(15,51,48,.1)} .news-thumb{width:96px;height:70px;border-radius:10px;overflow:hidden;flex:0 0 auto;background:linear-gradient(135deg,#164a44,#0d2c29)} .news-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .5s} .news-item:hover .news-thumb img{transform:scale(1.08)} FAQ: css 复制 下载 .faq-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px} .faq-item{background:#fff;border:1px solid #ece6da;border-radius:14px;padding:14px 16px;transition:.25s} .faq-item:hover{border-color:#15423c} .faq-item h3{font-size:14.5px;font-weight:700;color:#15423c;margin-bottom:6px} .faq-item p{font-size:13px;color:#6b7a76} 评论列表: css 复制 下载 .comment-list{display:grid;gap:12px} .comment-item{display:flex;gap:12px;background:#fff;border:1px solid #ece6da;border-radius:14px;padding:14px} .comment-item img{width:42px;height:42px;border-radius:50%;object-fit:cover;flex:0 0 auto;background:#15423c} .comment-main{min-width:0} .comment-top{display:flex;align-items:center;gap:8px;font-size:13px} .comment-top b{color:#15423c} .comment-top time{font-size:11.5px;color:#a3aeaa} .comment-main p{font-size:13.5px;color:#4c5a56;margin-top:5px} .comment-foot{display:flex;gap:14px;margin-top:8px;font-size:12px;color:#a3aeaa} 页脚: css 复制 下载 .site-footer{background:linear-gradient(160deg,#0d2c29,#123b37);color:#a9c5bf;margin-top:40px;padding:36px 0 0;font-size:13px} 页脚网格用 4 列。 版权栏。 模态框: css 复制 下载 .modal-mask{position:fixed;inset:0;z-index:200;background:rgba(10,26,24,.72);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:20px;opacity:0;visibility:hidden;transition:.28s} .modal-mask.open{opacity:1;visibility:visible} .modal-panel{background:#fff;border-radius:18px;max-width:560px;width:100%;max-height:86vh;overflow-y:auto;padding:22px;position:relative;transform:translateY(16px) scale(.97);transition:.3s} .modal-mask.open .modal-panel{transform:none} 等等,面板的过渡需要放在 .modal-panel 上,并且被 .open 状态影响——但 .open 是在父级上,所以选择器应该是 .modal-mask.open .modal-panel{transform:none},这样没问题。 模态框头部: css 复制 下载 .modal-head{display:flex;gap:14px;margin-bottom:14px} .modal-poster{width:96px;height:132px;object-fit:cover;border-radius:12px;background:#0f3330;flex:0 0 auto} 模态框标签用 span 小药丸样式。 提示条: css 复制 下载 .toast{position:fixed;left:50%;bottom:34px;transform:translate(-50%,20px);background:rgba(15,51,48,.94);color:#fff;font-size:13.5px;padding:10px 20px;border-radius:999px;opacity:0;pointer-events:none;transition:.3s;z-index:300;white-space:nowrap} .toast.show{opacity:1;transform:translate(-50%,0)} 好了,现在开始把整个东西写出来。 移动端适配:字号、内边距都调整一下。 现在开始写最终代码。得小心点,要完整。 我按顺序把所有 HTML 写出来。 注意 data-desc 属性里不能有双引号——用中文引号「」,这个没问题。 现在开始写。 再加上 aria-label 提升可访问性。 把作品数据敲定下来。 最新高清电影: 雾港回声 | 2025 · 悬疑犯罪 · 大陆 | 9.1 | HD国语 | 002-movie desc:导演林砚把 47 分钟长镜头全部交给雾港码头,全片仅 3 处配乐却拿下年度最佳声音设计提名。片尾滚动字幕里反复出现的蓝色信封悄悄变红,是第二重结局的暗示。上映首周排片占比仅 8.6%,第三周凭口碑逆袭到 21%。 tags:悬疑|长镜头|年度黑马 第七次日落 | 2025 · 科幻 · 美国 | 8.7 | 蓝光中字 | 009-movie desc:影片用 7 个平行的黄昏串联起时间闭环,置景团队手工搭建了 1:32 的环形城市模型,实拍比例高达 78%。有趣的是,全片没有一句台词解释时间规则,观众需要靠墙上的钟表指针自行