Scroll State Playground
交互式体验 CSS @container scroll-state() 查询,学习如何使用纯 CSS 实现基于滚动状态的动态样式切换。
- Chrome 133+ · 完全支持
- Edge 133+ · 完全支持
- Safari · 暂不支持
- Firefox · 暂不支持
此组件使用 CSS @container scroll-state() 容器查询。如使用不支持此功能的浏览器,部分效果可能无法正常显示。
什么是 @container scroll-state()?
@container scroll-state() 是 CSS 容器查询的一种,可以根据滚动状态来应用不同的样式。它可以检测三种滚动状态:
stuck: 使用position: sticky的元素被固定时scrollable: 元素可以向某个方向滚动时snapped: 使用scroll-snap-type的元素停靠完成时
通过这些查询,你可以实现很多以前需要 JavaScript 才能完成的滚动交互效果。
示例演示
1. 智能导航栏 (Stuck Navigation)
导航栏未吸顶时仅显示"联系我们"按钮,吸顶后所有菜单项平滑展开。
scroll-state()
当导航栏吸附到视口顶部时,使用容器查询自动调整布局状态
公司简介
我们是一家专注于创新的科技公司,致力于为客户提供最优质的数字化解决方案。 自成立以来,我们始终秉承"创新、品质、服务"的理念,帮助众多企业实现数字化转型。
制作事例
我们拥有丰富的项目经验,从企业官网到复杂的Web应用, 每一个项目都倾注了我们的专业与热情。 探索我们的作品集,了解我们如何帮助客户实现目标。
人才招聘
我们正在寻找富有激情和创造力的伙伴加入我们的团队。 提供具有竞争力的薪酬、完善的福利体系和良好的职业发展机会。 让我们一起创造更多可能。
联系我们
无论您有任何问题或需求,欢迎随时与我们联系。 我们的专业团队将为您提供及时的回复和最合适的解决方案。
展开查看源码
使用 container-type: scroll-state 和 position: sticky 配合。未吸顶时,通过 grid-template-columns: 0 0 0 1fr 隐藏前三个导航项,仅显示"联系我们"。吸顶后,Grid 列恢复为 1fr 1fr 1fr 1fr,所有菜单项配合 transition-delay 依次展开,创造优雅的交互体验。这种模式特别适合需要精简导航的长页面。
2. 图片轮播 (Snapped Carousel)
横向滚动图片轮播,滚动中的卡片缩小,停靠后恢复正常大小。
山川湖海
壮丽的自然风光
01城市夜景
繁华都市之美
02森林秘境
神秘的绿色世界
03沙漠奇观
金色的沙海
04极光之夜
梦幻的光影
05
展开查看源码
每个轮播项声明 container-type: scroll-state,父容器使用 scroll-snap-type: x mandatory 和 scroll-snap-align: center 实现横向停靠。图片默认正常大小,通过 @container not scroll-state(snapped: inline) 检测未停靠状态,滚动中缩小到 85%。inline 表示检测内联方向(横向)的停靠。停靠后添加 transition-delay: 0.2s,创造延迟恢复的优雅效果。适合图片画廊、产品展示等场景。
核心概念
container-type: scroll-state
这是使用滚动状态查询的前提,必须在容器元素上声明:
stuck: 检测 sticky 固定状态
方向值: top, bottom, left, right, block-start, block-end, inline-start, inline-end
scrollable: 检测可滚动状态
方向值: top, bottom, left, right, block, inline
snapped: 检测停靠状态
方向值: x, y, block, inline
not 查询: 检测相反状态
实战技巧
1. 负边距技巧
当 sticky 元素需要占据空间但又不影响初始布局时:
2. Grid 动态列
通过改变 Grid 列定义实现元素显隐:
3. 过渡延迟
为不同元素设置延迟,创造序列动画:
