0

0

实现文本区块的滑入滑出动画并确保内容可滚动、非活动内容完全隐藏

霞舞

霞舞

发布时间:2026-01-16 09:22:03

|

548人浏览过

|

来源于php中文网

原创

实现文本区块的滑入滑出动画并确保内容可滚动、非活动内容完全隐藏

本文介绍如何使用 css grid + `transform` 实现多篇文章的“从视口底部滑入/顶部滑出”交互动画,解决绝对定位导致容器高度塌陷、内容不可滚动及显示控制混乱等核心问题。

在构建博客类单页应用时,常需实现「菜单驱动的内容切换」:初始仅显示导航栏,点击某文章标题后,对应长文本从屏幕底部平滑上滑进入视口,并支持原生滚动;同时其他文章必须完全隐藏、不占布局空间,且不能影响容器高度计算。原始方案使用 position: absolute + top: 100vh 存在根本性缺陷——脱离文档流导致 .content 容器无法感知子元素真实高度,进而无法触发滚动条,也无法正确约束溢出。

✅ 正确解法:CSS Grid 叠加 + transform 动画

我们改用 CSS Grid 布局替代绝对定位:将 .content 设为单格网格容器(grid-area: 1 / 1),所有 .text 元素共享同一网格区域,实现视觉重叠;再通过 transform: translate3d(0, 100%, 0) 将非激活项整体下移至视口外(而非 top: 100vh),既保持文档流参与高度计算,又避免布局抖动。关键优势在于:容器高度由所有子元素自然撑开,overflow-y: scroll 可正常生效。

✅ 核心 CSS 代码

.content {
  display: grid;
  height: 100vh; /* 或设定固定高度,如 600px */
  overflow: hidden; /* 隐藏超出区域 */
  background: #fff;
}

.text {
  grid-area: 1 / 1; /* 所有文本重叠在同一格 */
  transform: translate3d(0, 100%, 0); /* 初始状态:完全在视口下方 */
  transition: transform 500ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
  overflow-y: auto; /* 启用滚动(推荐 auto 而非 scroll,更优雅) */
  padding: 1.5rem;
}

.text.textup {
  transform: translate3d(0, 0, 0); /* 激活状态:归位到视口内 */
}
? 提示:translate3d 比 top 更高效(启用 GPU 加速),且不触发重排(reflow),动画更流畅;cubic-bezier(0.25, 0.46, 0.45, 0.94) 是模拟自然“弹跳式”上滑的缓动函数,比线性 ease 更具表现力。

✅ 通用 JavaScript 控制逻辑

避免为每个菜单项写重复事件监听器,采用委托式绑定与语义化 ID 匹配:

腾讯交互翻译
腾讯交互翻译

腾讯AI Lab发布的一款AI辅助翻译产品

下载
// 统一获取所有文本容器和菜单链接
const texts = document.querySelectorAll('.text');
const menuLinks = document.querySelectorAll('.menuauthors, .menutexts');

menuLinks.forEach(link => {
  link.addEventListener('click', function(e) {
    e.preventDefault(); // 阻止默认锚点跳转行为
    const targetId = this.getAttribute('href').substring(2); // 如 #/text1c → text1c

    texts.forEach(text => {
      text.classList.toggle('textup', text.id === targetId);
    });
  });
});

✅ HTML 结构优化要点

  • 确保 <a> 的 href 值(如 #/text1c)与目标 <div> 的 id(如 id="text1c")严格一致;
  • 若交互纯属 UI 切换(无 SEO 或历史记录需求),强烈建议改用 <button type="button"> 替代 <a>,语义更准确,避免意外导航;
  • 为提升可访问性,可添加 aria-hidden="true/false" 和 tabindex 控制焦点流。

⚠️ 注意事项总结

  • 勿混用 position: absolute 与 Grid 重叠:二者逻辑冲突,Grid 已提供更可控的层叠能力;
  • overflow: hidden 必须作用于 .content,而非 .text,否则滚动失效;
  • 长文本需足够高度(如含多段落),才能自然触发滚动条;若内容过短,overflow-y: auto 将不显示滚动条,符合预期;
  • 移动端兼容性:translate3d 在所有现代浏览器(含 iOS Safari)中均被良好支持;
  • 性能监控:对超长文本(>10k 字符),可考虑配合 will-change: transform 进一步优化,但通常非必需。

此方案兼顾动画表现力、布局健壮性与开发可维护性,是现代 CSS 交互动画的推荐实践。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

83

2023.11.23

overflow什么意思
overflow什么意思

overflow是一个用于控制元素溢出内容的属性,当元素的内容超出其指定的尺寸时,overflow属性可以决定如何处理这些溢出的内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1859

2024.08.15

seo页面描述
seo页面描述

一个好的SEO页面描述应该包含关键词、简明扼要地概括网页的主题和内容、具有吸引力、与网页内容相符,并且是独特的。它不仅可以帮助搜索引擎了解网页的内容,还可以吸引用户点击进入网页。因此,编写一个优秀的SEO页面描述对于网页的排名和点击率都非常重要。

218

2023.08.31

wordpress seo
wordpress seo

WordPress网站SEO优化方法有:1、选择一个SEO友好的主题,具有清晰的代码结构,快速的加载速度和响应式设计;2、使用SEO插件,优化你的标题标签,元描述,关键字,XML站点地图等;3、优化你的内容,内容是SEO优化的核心;4、优化你的网站速度;5、创建友好的URL;6、使用内部链接;7、优化图像;8、使用社交媒体;9、定期更新你的网站;10、监控和分析你的网站等等。

435

2023.09.18

SEO诊断方法有哪些
SEO诊断方法有哪些

SEO诊断是一个综合性的工作,需要从网站结构、关键词优化、内容质量、外部链接、网站速度、移动友好性等多个方面进行评估和优化。通过进行SEO诊断,可以帮助网站提高在搜索引擎中的排名,从而增加流量和曝光度 。

298

2023.10.09

SEO关键词排名工具有哪些
SEO关键词排名工具有哪些

SEO关键词排名工具有Google关键词规划工具、百度关键词工具、SEMrush、Ahrefs、Moz Keyword Explorer、KWFinder、Ubersuggest、Keyword Surfer、AnswerThePublic和Google Trends。更多关于SEO关键词排名工具的文章,详情请继续阅读该专题下面的文章。php中文网欢迎大家前来学习。

390

2023.10.30

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号