787 字
4 分钟
周末折腾记:那些让网页焕然一新的小技巧

周末又来了。窗外不知道是晴还是阴,总之窗帘是拉着的——这才是写代码的正确氛围。

今天不想写什么宏大的话题,就分享几个最近在折腾这个博客时发现的小技巧,轻量、实用、五分钟能上手。


一、只用 CSS 实现的”滚动进入”动画#

以前要做滚动动画,要么引入 IntersectionObserver,要么抱一个动画库。但现在 CSS 已经原生支持了:

scroll-animation.css
@keyframes fade-in-up {
from {
opacity: 0;
transform: translateY(1.5rem);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-on-scroll {
/* 关键属性:滚动驱动动画 */
animation: fade-in-up 0.6s ease forwards;
animation-timeline: view();
animation-range: entry 0% entry 30%;
}

直接给需要的元素加上 animate-on-scroll 类就好了,不需要写任何 JavaScript。目前 Chrome 和 Edge 已经全面支持,Safari 也跟上了。


二、用 clamp() 告别媒体查询断点#

响应式字体大小一直是个麻烦事,写一堆 @media 查询还要手动调各个断点。clamp() 是个更优雅的方案:

fluid-typography.css
/* 语法:clamp(最小值, 理想值, 最大值) */
/* 理想值可以用 vw 单位,让字体随视口平滑缩放 */
h1 {
/* 最小 1.75rem,最大 3rem,中间随视口流体缩放 */
font-size: clamp(1.75rem, 4vw + 1rem, 3rem);
}
.container {
/* 同样适用于间距 */
padding: clamp(1rem, 5vw, 3rem);
}

这样做的好处是字体大小在任何屏幕尺寸下都能平滑过渡,彻底不需要手动写断点。


三、sessionStorage 实现的”已读状态”记忆#

在给这个博客加公告关闭功能的时候,顺手用 sessionStorage 记录了关闭状态。相比 localStoragesessionStorage 在关闭标签页后自动清空,很适合这种”本次访问有效”的临时记忆场景:

announcement.js
function setupAnnouncement() {
const closeBtn = document.getElementById('close-btn');
const widget = document.querySelector('.announcement-widget');
if (!widget) return;
// 检查本次会话是否已经关闭过
if (sessionStorage.getItem('announcement-closed') === 'true') {
widget.style.display = 'none';
return;
}
closeBtn?.addEventListener('click', () => {
widget.style.display = 'none';
// 记录到 sessionStorage,页面切换后依然有效
sessionStorage.setItem('announcement-closed', 'true');
});
}
setupAnnouncement();

对比一下几种存储方式的适用场景:

存储方式生命周期适合场景
sessionStorage关闭标签页后清空本次访问的临时状态
localStorage永久保存(手动清除)用户偏好、主题设置
Cookie自定义过期时间需要服务端读取的场景

四、让导航栏”透明→实色”的滚动效果#

这也是最近刚做的。效果是页面最顶端时导航栏透明,往下滚动就会出现背景色。核心逻辑只需要监听 scroll 事件:

navbar-scroll.js
function initNavbarScroll() {
const navbar = document.getElementById('navbar-inner');
if (!navbar) return;
function onScroll() {
if (window.scrollY > 20) {
navbar.classList.remove('bg-transparent');
navbar.classList.add('nav-solid'); // 加上背景
} else {
navbar.classList.add('bg-transparent');
navbar.classList.remove('nav-solid');
}
}
onScroll(); // 初始执行一次
window.addEventListener('scroll', onScroll, { passive: true });
}
initNavbarScroll();

加上 { passive: true } 是个好习惯,它告诉浏览器”这个监听器不会调用 preventDefault()”,浏览器因此可以安全地提前优化滚动性能。


好了,就这四个。都是小东西,但每次发现的时候都会有一种”原来还可以这样”的感觉,这大概就是折腾的乐趣所在吧。

下周见!🍵

如果觉得文章对你有帮助,欢迎请我喝杯咖啡 ☕
周末折腾记:那些让网页焕然一新的小技巧
https://yuia.fun/posts/weekend-web-tricks/
作者
Moefun
发布于
2026-04-24
许可协议
CC BY-NC-SA 4.0
分享到社交媒体

长按保存海报,分享给好友