858 字
4 分钟
career-fair-display:Glassmorphism × Cyberpunk 招聘会数据大屏

背景#

招聘会现场需要一个数据大屏——滚动展示参会企业、实时签到人数、行业/城市分布、学生签到轮播。要求:

  1. 单屏布局,一页展示所有数据(不能滚动)
  2. 有科技感,但不花哨
  3. 静态部署,不需要数据库
  4. 能在两小时内做出来

于是有了这个 Glassmorphism(毛玻璃)+ Cyberpunk 风格的大屏。


视觉设计#

Glassmorphism 核心#

Glassmorphism 是近年最热门的 UI 趋势之一。核心 CSS:

.glass-panel {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(16px) saturate(180%);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
}

关键要素:

  • 半透明背景: rgba(255,255,255,0.05) — 极低的不透明度让背景色透出
  • backdrop-filter: blur(16px) 模糊背后内容 + saturate(180%) 增强色彩
  • 微边框: 1px 半透明白色,不是真的为可见,而是为面板提供”存在感”
  • 深阴影: 增加 Z 轴层次感

Cyberpunk 装饰#

毛玻璃是”干净”的,Cyberpunk 需要”粗粝感”。两种风格的融合点在于装饰层:

/* 点阵背景 — 致敬赛博朋克的像素感 */
body::before {
content: '';
position: fixed;
inset: 0;
background-image: radial-gradient(circle, rgba(255,255,255,0.08) 1px, transparent 1px);
background-size: 24px 24px;
pointer-events: none;
}
/* 面板角标 — 发光边框装饰 */
.panel-corner::before {
content: '';
position: absolute;
top: 0; left: 0;
width: 20px; height: 20px;
border-top: 2px solid #22d3ee;
border-left: 2px solid #22d3ee;
/* 左上角青色发光 */
}
.panel-corner::after {
content: '';
position: absolute;
bottom: 0; right: 0;
width: 20px; height: 20px;
border-bottom: 2px solid #a855f7;
border-right: 2px solid #a855f7;
/* 右下角紫色发光 */
}

8 种预设主题#

用 CSS 自定义属性实现一键切换:

:root {
--bg-primary: #1e3060;
--accent: #2563eb;
--glass-bg: rgba(255,255,255,0.05);
}
[data-theme="emerald"] {
--bg-primary: #064e3b;
--accent: #10b981;
}
[data-theme="midnight"] {
--bg-primary: #1e1b4b;
--accent: #6366f1;
}

切换主题只需要 document.documentElement.dataset.theme = 'emerald',无需重新渲染。所有颜色通过 var(--bg-primary) 引用。


布局策略#

┌──────────────────────────────────────────────────┐
│ 统计卡片(岗位/人数/企业) │ 标题 │ 实时时钟 │
├───────────────┬──────────────┼───────────────────┤
│ 行业分布(饼图) │ 企业滚动列表 │ 签到人数(环形图) │
│ │ ├───────────────────┤
│ │ │ 签到分布(柱状图) │
├───────────────┼──────────────┼───────────────────┤
│ 地点分布(饼图) │ 性质分布(饼图) │ 学生签到(轮播) │
└───────────────┴──────────────┴───────────────────┘

CSS Grid 实现 3×3 自适应:

.dashboard {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: auto 1fr 1fr;
gap: 16px;
height: 100vh;
padding: 16px;
}

没有媒体查询。三列均分天然适配 1920×1080 到 3840×2160。响应式在这里不是”堆叠”,而是”等比缩放”。


Mock API 设计#

项目使用原生 Node.js HTTP 服务器模拟数据接口:

const http = require('http');
const data = require('./data.json');
const server = http.createServer((req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Content-Type', 'application/json');
if (req.url.startsWith('/api/panel')) {
// 返回招聘会完整数据
res.end(JSON.stringify(data));
} else if (req.url.startsWith('/api/panel/checkins/recent')) {
// 模拟实时签到 — 从数据中随机选取并打乱时间戳
const recent = data.checkins
.sort(() => Math.random() - 0.5)
.slice(0, 20)
.map(c => ({ ...c, timestamp: Date.now() - Math.random() * 60000 }));
res.end(JSON.stringify(recent));
}
});
server.listen(3456);

这个 Mock 服务让前端可以不依赖后端独立开发和演示。实际部署时,只需把 data.json 换成真实 API。


ECharts 集成#

大屏用了 5 个 ECharts 实例:

图表类型用途
行业分布饼图点击扇区筛选右边企业列表
地点分布饼图城市统计
性质分布饼图民企/国企/外企/合资/上市
签到率环形图签到/未签到 占比
签到分布柱状图学校/专业人数排名

图表交互:

// 点击行业饼图 → 过滤企业列表
chart.on('click', ({ name }) => {
const filtered = companies.filter(c => c.industry === name);
renderCompanyList(filtered);
});

在线演示: career-fair-display.pages.dev · 源码: github.com/CHN-DST/career-fair-display

career-fair-display:Glassmorphism × Cyberpunk 招聘会数据大屏
https://dst-blog.pages.dev/posts/2026-06-22-career-fair-display/
作者
DST
发布于
2026-06-22
许可协议
CC BY-NC-SA 4.0