AI Generated Banner
787 字
4 分钟
周末折腾记:那些让网页焕然一新的小技巧
周末又来了。窗外不知道是晴还是阴,总之窗帘是拉着的——这才是写代码的正确氛围。
今天不想写什么宏大的话题,就分享几个最近在折腾这个博客时发现的小技巧,轻量、实用、五分钟能上手。
一、只用 CSS 实现的”滚动进入”动画
以前要做滚动动画,要么引入 IntersectionObserver,要么抱一个动画库。但现在 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() 是个更优雅的方案:
/* 语法:clamp(最小值, 理想值, 最大值) *//* 理想值可以用 vw 单位,让字体随视口平滑缩放 */
h1 { /* 最小 1.75rem,最大 3rem,中间随视口流体缩放 */ font-size: clamp(1.75rem, 4vw + 1rem, 3rem);}
.container { /* 同样适用于间距 */ padding: clamp(1rem, 5vw, 3rem);}这样做的好处是字体大小在任何屏幕尺寸下都能平滑过渡,彻底不需要手动写断点。
三、sessionStorage 实现的”已读状态”记忆
在给这个博客加公告关闭功能的时候,顺手用 sessionStorage 记录了关闭状态。相比 localStorage,sessionStorage 在关闭标签页后自动清空,很适合这种”本次访问有效”的临时记忆场景:
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 事件:
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/ 分享到社交媒体
长按保存海报,分享给好友
相关推荐