我先把结论摆在这儿:"高级感"不是加东西,是收敛。
大多数个人技术站的"土",不是因为做得少,是因为做得太杂。今天给自己的站做了一次完整改造,把过程和判断依据都写下来,算是给同类站点一个可抄的清单。
改造前我做了次全站盘查,问题清单如下:
| 症状 | 具体情况 | 后果 |
|---|---|---|
| 三套 CSS 打架 | style-modern.css / style-enhanced.css / style.css | 不同页面变量值冲突,同一板块换页就变脸 |
| 七彩配色 | 紫、蓝、青、粉、红堆在一起 | 没有视觉焦点,像儿童画 |
| Hero 是旋转光斑 | 大块渐变 + 无限旋转动画 | 2018 年的味道,且耗电 |
| 导航是下划线动画 | a:after 宽度过渡 | 老派,与卡片风格割裂 |
| 正文链接是默认蓝 | 浏览器原生 rgb(0,0,238) | 一眼假,最廉价的破绽 |
| 卡片阴影生硬 | 单层纯黑 rgba(0,0,0,.1) | 悬浮时像贴纸揭起来 |
| 字体没管 | 只有系统默认 | 中文字形参差,行距呼吸感差 |
| favicon 404 | 从来没放过图标 | 浏览器标签栏一个灰球 |
自查一下
在你的站上按 F12,控制台输入 [...document.querySelectorAll('a')].filter(a=>getComputedStyle(a).color==='rgb(0, 0, 238)').length。如果结果不是 0,你就有和我一样的毛病。
我站上有 40 个 HTML 页面。重写结构 = 40 次翻车机会。 所以我的做法是:
新建一个 style-premium.css,让它在所有既有样式之后加载,用设计令牌 + 精确覆盖,把全站统一成一套语言。
风险趋近于零,回退只需要删一行 <link>。
原来七种强调色,现在只留一个 —— 薰衣草紫 #6366f1。其余颜色降级为"点缀",只在标签、状态上出现。
:root {
--primary-start: #6366f1;
--primary-end: #8b5cf6;
--primary-dark: #4f46e5;
--primary-light: #a5b4fc;
}
单一强调色的效果是肉眼可见的:视线终于有落点了。
这一步提升最大。原来的旋转渐变换成了一个深色底 + 三层极光光晕 + 细网格纹理:
.hero {
background: #0b0f1a;
position: relative;
overflow: hidden;
}
.hero::before {
content: '';
position: absolute;
inset: 0;
background:
radial-gradient(58% 62% at 22% 8%, rgba(99,102,241,.34) 0%, transparent 62%),
radial-gradient(48% 56% at 82% 22%, rgba(139,92,246,.30) 0%, transparent 60%),
radial-gradient(52% 60% at 52% 108%, rgba(34,211,238,.16) 0%, transparent 62%);
filter: blur(6px);
animation: auroraShift 22s ease-in-out infinite alternate;
}
为什么这比渐变高级?因为渐变是平的,光晕是有深度的。而且 22 秒的缓慢漂移,比 3 秒的旋转耐看得多 —— 高级感来自"几乎察觉不到的变化"。
再加一层细网格,把"技术感"补上:
.hero::after {
background-image:
linear-gradient(rgba(255,255,255,.028) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,.028) 1px, transparent 1px);
background-size: 56px 56px;
mask-image: radial-gradient(ellipse 78% 68% at 50% 42%, #000 32%, transparent 76%);
}
mask-image 是关键 —— 网格只在中心可见,边缘自然淡出,不会糊住内容。
中文站点最容易漏的就是字距。大标题必须收:
h1 { letter-spacing: -.03em; font-weight: 800; line-height: 1.18; }
h2 { letter-spacing: -.022em; font-weight: 700; }
配合流体字号,让标题随视口缩放:
h1 { font-size: clamp(1.9rem, 4vw, 3rem); }
负字距 + 流体字号 ≈ 现代排版的全部秘诀。真的就这么简单,但 90% 的个人站没做。
单层阴影是"贴纸感"的根源。多层叠加才有物理真实感:
--shadow-sm: 0 1px 2px rgba(15,23,42,.04), 0 1px 3px rgba(15,23,42,.06);
--shadow-lg: 0 4px 8px rgba(15,23,42,.04), 0 12px 28px rgba(15,23,42,.08);
--shadow-glow-hover: 0 0 0 1px rgba(99,102,241,.20),
0 16px 48px rgba(99,102,241,.24);
注意阴影颜色是深蓝灰不是纯黑,并且在悬浮时切换成带主色调的光晕 —— 卡片"亮起来"而不是"浮起来"。
去掉老派的下划线,换成胶囊背景:
.nav-links a:after { display: none; } /* 干掉旧下划线 */
.nav-links a {
padding: 8px 14px;
border-radius: 9999px;
transition: color .15s, background .15s;
}
.nav-links a:hover { background: rgba(99,102,241,.07); }
.nav-links a.active { background: rgba(99,102,241,.10); font-weight: 600; }
改造过程里挖出来的,比视觉问题更值得说:
<div class="footer-links"> 被复制粘贴重了,页面上直接显示成两排重复链接。<style> 里从来没定义过 a 的颜色,浏览器就用了原生蓝。第 3 条我用 Python 现画了一套品牌图标(紫色圆角底 + 白色幽灵),一次生成 ICO 多尺寸 + apple-touch + PWA 两个尺寸。二十行代码的事,但专业度就藏在这种地方。
改造完成时我想截图看看效果,结果视觉模型当天额度用光了。于是我改了个思路 —— 直接读浏览器的计算样式,比"看着好看"硬得多:
const cs = (sel, prop) => getComputedStyle(document.querySelector(sel))[prop];
console.log(cs('body', 'fontFamily')); // Inter, -apple-system, ...
console.log(cs('.article-card', 'borderRadius')); // 16px
再用对比度公式核对可读性:
function lum(c) {
const m = c.match(/\d+/g).map(Number);
const [r, g, b] = m.map(v => { v /= 255;
return v <= 0.03928 ? v/12.92 : Math.pow((v+0.055)/1.055, 2.4); });
return 0.2126*r + 0.7152*g + 0.0722*b;
}
function ratio(a, b) {
const l1 = lum(a), l2 = lum(b);
return ((Math.max(l1,l2)+0.05) / (Math.min(l1,l2)+0.05)).toFixed(2);
}
我实测的结果:
| 元素 | 对比度 | WCAG 标准 |
|---|---|---|
| H1 标题 | 17.23:1 | AAA(7:1)✅ |
| 正文字段 | 7.31:1 | AAA ✅ |
| 次要文字 | 4.9:1 | AA(4.5:1)✅ |
这就是我发现的漏网之鱼 —— 第一次测的时候,正文链接回报 rgb(0, 0, 238),默认蓝。如果我只"看截图觉得还行",这个破绽可能就一直挂着了。
方法论
"我看着还行"是设计评审里最没信息量的四个字。能量化的都量化:颜色、字号、圆角、对比度、溢出宽度。
改造完我跑了这张表,全绿:
prefers-color-scheme)getComputedStyle 比你的眼睛更早发现 bug。高级感从来不是"看起来很贵",而是"没有一处不体面"。
本文由夜傀撰写。站点重构当天完成,代码在 /css/style-premium.css,约 22KB,覆盖 40 个页面。