CSS与JavaScript协同:构建响应式“阅读更多/更少”功能

css与javascript协同:构建响应式“阅读更多/更少”功能

本教程详细阐述如何使用CSS和JavaScript构建一个响应式“阅读更多/更少”功能。通过CSS优先原则,我们默认控制内容和按钮的显示状态,并利用媒体查询在特定浏览器宽度下动态切换它们。JavaScript则负责处理按钮点击事件,实现内容的平滑展开与收起,同时更新按钮文本,确保在不同设备上提供一致且优化的用户体验。

引言:构建自适应的内容折叠与展开功能

在现代网页设计中,为了优化用户体验和布局,尤其是在移动设备上,经常需要将长文本内容进行折叠,并通过一个“阅读更多/更少”按钮来控制其显示与隐藏。更进一步的需求是,这个功能本身也应该是响应式的:在某些屏幕宽度下,我们可能希望内容默认完全展开,无需按钮;而在另一些宽度下,则需要按钮来控制内容的折叠。

传统的实现方式可能依赖于内联样式或冗余的占位符(如…),这不仅增加了HTML的复杂性,也使得通过CSS媒体查询进行响应式控制变得困难。本教程将介绍一种更优雅、更具可维护性的方法,通过CSS优先的策略结合JavaScript事件处理,实现一个完全响应式的“阅读更多/更少”功能。

核心策略:CSS优先的响应式设

实现响应式“阅读更多/更少”功能的关键在于采用“CSS优先”的策略。这意味着我们首先使用CSS来定义内容和按钮的默认显示状态,然后利用媒体查询在特定屏幕宽度下覆盖这些默认状态。JavaScript的角色则被简化为仅处理用户交互,即按钮的点击事件,并根据内容当前的状态切换其可见性及按钮文本。

这种方法有以下优势:

立即学习“Java免费学习笔记(深入)”;

可维护性高:显示逻辑主要由CSS控制,易于理解和修改。性能优化:页面加载时,CSS直接决定初始布局,避免了JavaScript对DOM的额外操作。渐进增强:即使JavaScript失效,内容也能根据CSS规则进行合理的显示。

HTML结构:简洁与语义化

为了实现响应式功能,我们需要一个简洁且语义化的HTML结构。我们将使用一个主div来包裹段落内容、可折叠的额外文本以及控制按钮。原有的dots(省略号)元素将被移除,因为它的显示逻辑可以通过CSS和JavaScript更灵活地控制。

这里放置了文章的开篇内容,用户可以立即看到。

这部分内容在某些屏幕宽度下默认隐藏,需要点击“阅读更多”按钮才能展开。 它包含了更详细的信息,是文章的扩展部分。

more-text 类用于标识需要折叠/展开的额外内容。btn-readmore 类用于标识控制内容折叠/展开的按钮。

CSS样式:控制可见性与响应性

CSS是实现响应式行为的核心。我们将定义默认样式,然后使用媒体查询来调整这些样式以适应不同的屏幕尺寸。

/* 默认样式:在最宽的屏幕上(例如桌面端),额外文本默认显示,按钮隐藏 */.more-text {    display: block; /* 默认情况下,额外文本是可见的 */}.btn-readmore {    display: none; /* 默认情况下,阅读更多按钮是隐藏的 */}/* 当 .more-text 具有 .active 类时,它将显示 */.active.more-text {    display: block;}/* 媒体查询:在特定屏幕宽度范围(例如,平板和手机)内,改变显示行为 */@media screen and (min-width: 200px) and (max-width: 1000px) {    .btn-readmore {        display: block; /* 在此宽度范围内,显示阅读更多按钮 */    }    .more-text {        display: none; /* 在此宽度范围内,额外文本默认隐藏 */    }}

样式解析:

默认状态 (桌面端优先):.more-text { display: block; }: 在没有特定媒体查询生效时(通常是较宽的屏幕,如桌面),我们希望所有内容都可见。.btn-readmore { display: none; }: 既然内容已完全显示,按钮就没有必要出现。媒体查询 (移动/平板端):@media screen and (min-width: 200px) and (max-width: 1000px): 这个媒体查询定义了一个屏幕宽度范围,例如从200px到1000px,这通常覆盖了大多数手机和平板设备。.btn-readmore { display: block; }: 在这个范围内,按钮被显示出来,以便用户可以手动展开内容。.more-text { display: none; }: 在这个范围内,额外文本默认被隐藏,以节省屏幕空间。.active.more-text:这个类配合JavaScript使用。当JavaScript为.more-text元素添加.active类时,它会强制该元素显示,从而实现内容的展开。

JavaScript逻辑:实现交互与状态切换

JavaScript负责处理用户的点击事件,并根据当前状态切换内容的可见性以及按钮的文本。为了提高效率和可维护性,我们采用事件委托(Event Delegation)的方式来处理点击事件。

document.addEventListener("click", function(e) {    let el = e.target; // 获取被点击的元素    // 检查被点击的元素是否是我们定义的阅读更多按钮    if (el.className === "btn-readmore") {        // 找到按钮的父元素,然后在其内部查找 .more-text 元素        let moreTxt = el.parentNode.querySelector(".more-text");        // 切换 .more-text 元素的 'active' 类        // 如果有 'active' 类,则移除;如果没有,则添加        moreTxt.classList.toggle("active");        // 根据 'active' 类的存在与否更新按钮文本        // 如果 moreTxt 现在包含 'active' 类,表示内容已展开,按钮应显示“阅读更少”        // 否则,内容已折叠,按钮应显示“阅读更多”        el.innerHTML = (moreTxt.classList.contains("active")) ? "阅读更少" : "阅读更多";    }});

JavaScript解析:

事件委托: document.addEventListener(“click”, …) 监听整个文档的点击事件。这样做的好处是,即使页面上动态添加了新的.btn-readmore按钮,它们也能自动获得相同的行为,无需为每个按钮单独添加事件监听器。事件目标判断: if (el.className === “btn-readmore”) 检查被点击的元素是否是我们感兴趣的“阅读更多”按钮。查找相关元素: el.parentNode.querySelector(“.more-text”) 通过按钮的父元素,找到对应的.more-text内容块。这确保了每个按钮只控制其自身容器内的内容。切换active类: moreTxt.classList.toggle(“active”) 是关键。它在.more-text元素上添加或移除active类。CSS中定义的.active.more-text { display: block; } 规则将根据这个类的存在来控制内容的显示。更新按钮文本: el.innerHTML = (moreTxt.classList.contains(“active”)) ? “阅读更少” : “阅读更多”; 根据.more-text是否拥有active类来动态更新按钮的文本,提供清晰的用户反馈。

注意事项与最佳实践

可访问性(Accessibility): 考虑为按钮添加aria-expanded属性,并在JavaScript中动态更新其值,以帮助屏幕阅读器用户理解内容的状态。语义化HTML: 确保使用正确的HTML标签。例如,p标签用于段落,div用于内容分组。CSS过渡效果: 为了提供更平滑的用户体验,可以为.more-text的max-height或opacity属性添加CSS过渡效果,而不是直接切换display。但需要注意的是,display属性无法直接过渡。如果需要平滑过渡,可能需要结合max-height或height与overflow: hidden来实现。JavaScript模块化: 对于更复杂的项目,建议将JavaScript代码封装到单独的函数或模块中,以提高代码组织性和可重用性。浏览器兼容性: 现代浏览器普遍支持classList和媒体查询。如果需要支持非常旧的浏览器,可能需要Polyfill。

总结

通过本教程介绍的方法,我们成功构建了一个响应式且易于维护的“阅读更多/更少”功能。这种方法的核心在于:

CSS优先原则:利用CSS媒体查询来控制不同屏幕尺寸下的默认显示状态。简洁的HTML结构:移除不必要的元素,提高代码可读性。事件委托:通过一个监听器处理所有按钮的点击事件,提高性能和可扩展性。

这种将结构、样式和行为分离的策略,不仅解决了原始问题中关于媒体查询依赖和内联样式的问题,还提供了一个健壮、灵活且用户友好的解决方案,适用于各种响应式网页设计场景。

以上就是CSS与JavaScript协同:构建响应式“阅读更多/更少”功能的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1577451.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JavaScript:从点击事件中获取元素文本并传递给处理函数
上一篇 2025年12月22日 18:54:17
JavaScript获取点击元素文本并作为变量处理:解决作用域与数据传递问题
下一篇 2025年12月22日 18:54:28

相关推荐

  • framework4.0怎么安装 下载教程指南

    framework4.0怎么安装 下载教程指南framework4.0怎么安装 下载教程指南framework4.0怎么安装 下载教程指南framework4.0怎么安装 下载教程指南

    windows系统在运行某些程序或安装软件时,经常会提示需要.net framework 4.0环境支持。若系统中未安装该组件,可能导致应用程序无法启动或运行异常。本文将为你提供详细的.net framework 4.0安装指南,帮助你轻松解决因缺少运行库而导致的问题。 一、.NET Framewo…

    2026年9月6日 用户投稿
    100
  • appdata文件夹在哪里 一文告诉你答案

    appdata文件夹在哪里 一文告诉你答案appdata文件夹在哪里 一文告诉你答案appdata文件夹在哪里 一文告诉你答案appdata文件夹在哪里 一文告诉你答案

    在windows系统中,appdata是一个默认隐藏的系统目录,主要用于保存各类应用程序的配置信息、用户偏好设置、缓存数据以及其他与用户账户相关的运行文件。由于其重要性,该文件夹被系统自动隐藏,以避免误操作。然而,许多用户对其位置和功能并不熟悉。接下来,我们将详细解读appdata的相关知识。 一、…

    2026年9月5日 用户投稿
    200
  • 商络电子:2024年净利同比预增85.34%-126.52%

    商络电子发布2024年业绩预告:净利润同比预增85.34%-126.52% ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 商络电子(股票代码: 此处应补充股票代码)今日发布公告,预计2024年度实现营业收入620亿元至680亿元,同比增长2…

    2026年9月5日
    400
  • 重装系统文件会丢失吗?详细解析与避免方法

    重装系统文件会丢失吗?详细解析与避免方法重装系统文件会丢失吗?详细解析与避免方法重装系统文件会丢失吗?详细解析与避免方法重装系统文件会丢失吗?详细解析与避免方法

    电脑运行缓慢、频繁蓝屏或系统崩溃,许多用户最终会选择“重装系统”来解决问题。但在点击“开始重装”之前,一个令人犹豫的问题浮出水面:我的文件会不会因此全部消失?如果真的丢了,还有办法挽回吗?本文将为你全面解析这一常见困扰。 一、重装系统到底会不会删除文件? “重装系统”并非单一操作,而是包含多种方式,…

    2026年9月5日 用户投稿
    100
  • 雷军千万年薪挖角天才来自DeepSeek

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 国产大模型应用DeepSeek,近日强势登顶苹果中国及美国区应用商店免费下载榜,在美国区甚至超越ChatGPT,引发业界关注。 DeepSeek的成功标志着AI大模型应用正走向普惠化,加速AI应…

    2026年9月5日
    100
  • 浅谈K3OS:首个K8s操作系统,为边缘计算而生!

    4月24日,容器软件供应商rancher labs正式推出了k3os,这是业界首款专为kubernetes设计的超轻量级操作系统。它具有极低的资源消耗、简化的操作和秒级启动时间,能够显著简化在低资源计算环境中操作kubernetes的过程,提升kubernetes运维的安全性,充分支持边缘计算场景。…

    2026年9月5日
    200
  • 天眼查app怎么查公司是不是注销状态_天眼查公司注销状态查询

    首先通过天眼查App查看企业主页的工商登记状态标签,若显示“注销”或“已注销”,则表明公司法人资格终止;接着在工商信息栏目核对“登记状态”是否为注销,并查看注销日期;最后登录国家企业信用信息公示系统,选择注册地后查询该公司状态,若官方系统也显示注销,则确认公司已正式退出市场。 如果您想确认某家公司是…

    2026年9月5日
    100
  • 刚从GitHub克隆下来的项目,微信开发者工具就提示有文件修改的解决方法

    最近在使用GitHub和微信开发者工具管理一个微信小程序项目,期间遇到一个问题,刚克隆下来的项目,微信开发者工具就提示有文件修改(事实上什么也没改)。 确实是一个让人头疼的问题,为了避免推送后出现冲突,就排查了一下问题的原因: 不同操作系统使用的换行符是不一样的。Unix/Linux使用的是LF,M…

    2026年9月5日
    300
  • 蓝桥云课之新手入门指南

    蓝桥云课之新手入门指南蓝桥云课之新手入门指南蓝桥云课之新手入门指南蓝桥云课之新手入门指南

    第一种,就是网页版的linux 蓝桥ROS课程也是这种模式: 蓝桥云课ROS机器人发布5年啦(原实验楼ROS机器人在线云实践课程) 环境是16.04 代码语言:javascript代码运行次数:0运行复制 #includeint main(){ printf(“Hello, Shiyanlou.”)…

    2026年9月5日 用户投稿
    100
  • VSCode怎么设置Tab键_VSCode调整Tab大小和缩进的相关配置教程

    VSCode中Tab行为由editor.tabSize和editor.insertSpaces控制,前者定义缩进宽度,后者决定插入空格或Tab字符。通过设置editor.detectIndentation可开启自动检测文件缩进风格,避免设置冲突。可在用户或工作区级别配置,亦可通过settings.j…

    2026年9月5日
    100
  • 解决 Bootstrap 4.4 Navbar 折叠图标不显示问题:完整指南

    本教程旨在解决 Bootstrap 4.4 导航栏在移动端折叠时,汉堡包图标不显示但功能正常的常见问题。核心原因通常是 Bootstrap CSS 或 JavaScript 依赖(如 jQuery, Popper.js)的 CDN 引入不完整或不正确。文章将提供一个完整的、可运行的 HTML 模板,…

    2026年9月5日
    100
  • 喜马拉雅app为什么不能用微信登录了 喜马拉雅app微信登录方式调整说明

    首先检查网络连接与服务器状态,确认设备联网正常且喜马拉雅无服务维护;接着清除App缓存数据,重启应用;然后在微信中重置对喜马拉雅的授权权限;更新喜马拉雅至最新版本以兼容微信SDK;最后检查并开启喜马拉雅内的微信登录开关。 如果您尝试使用微信登录喜马拉雅App,但发现无法正常授权或跳转失败,则可能是由…

    2026年9月5日
    500
  • 死磕 IO 流?你都磕对地方了么

    死磕 IO 流?你都磕对地方了么死磕 IO 流?你都磕对地方了么死磕 IO 流?你都磕对地方了么死磕 IO 流?你都磕对地方了么

    在日常开发中,我们经常会接触到 io 流,例如在处理文件上传下载、数据传输以及设计模式等方面。io 流是这些操作的基础,因此今天我们将深入探讨 java 中 io 流的相关知识点。 本文将涵盖以下主要内容: 文件对象流概述字节流与字符流文件对象与文件路径Java 标准库 java.io 提供了 Fi…

    2026年9月5日 用户投稿
    200
  • Win10怎么使用Dism命令修复受损文件?

    有时在使用windows 10系统时,可能会遇到某些文件损坏的问题,这会导致我们在使用电脑时频繁出现程序崩溃的现象。那么,当这种情况发生时,我们应该如何处理呢?接下来就为大家介绍一种通过dism命令来修复受损文件的方法。 使用Dism命令修复Windows 10受损文件的方法 1、按下组合键win+…

    2026年9月5日
    300
  • win10画图工具在哪里?win10画图工具位置介绍

    大家好,我是小编小明。今天我们要一起解决一个困扰很多Win10用户的问题:Win10的画图工具究竟藏在哪儿?是不是也像小时候捉迷藏一样,总是难以找到? 先来简单了解一下Win10画图工具的背景。在以前的Windows版本中,画图工具一直是我们熟悉的伙伴,陪伴我们度过许多愉快的绘画时光。但随着Win1…

    2026年9月5日
    100
  • MySQL如何实现分布式数据库架构_解决方案有哪些?

    MySQL如何实现分布式数据库架构_解决方案有哪些?MySQL如何实现分布式数据库架构_解决方案有哪些?MySQL如何实现分布式数据库架构_解决方案有哪些?MySQL如何实现分布式数据库架构_解决方案有哪些?

    mysql实现分布式架构的核心在于解决单机数据库的性能瓶颈、存储限制及高可用性问题,主要通过以下策略:1. 分库分表(sharding)突破存储与并发限制,但需面对分片键选择、跨分片查询、分布式事务等挑战;2. 读写分离与高可用复制提升读并发能力并提供数据备份,但存在主从同步延迟与故障切换问题;3.…

    2026年9月5日 用户投稿
    300
  • 【调整】王元琳任荣耀中国区总裁

    【调整】王元琳任荣耀中国区总裁【调整】王元琳任荣耀中国区总裁【调整】王元琳任荣耀中国区总裁【调整】王元琳任荣耀中国区总裁

    科技要闻速递:荣耀人事变动、AI黑天鹅、量子激光突破及春晚5G-A技术应用 近期科技界动态频发,本文将为您盘点几则重要新闻: 1. 王元琳接任荣耀中国区总裁 荣耀近日宣布多项人事调整,王元琳接替倪嘉悦担任中国区总裁。王元琳此前在华为及荣耀担任海外渠道要职,拥有丰富的国际市场经验。 此前,荣耀CEO赵…

    2026年9月5日 用户投稿
    100
  • Java连接Teradata数据库时如何解决数据源配置错误?

    Java连接Teradata数据库:数据源配置及常见错误排查 在Java应用中连接Teradata数据库时,经常会遇到数据源配置错误,导致连接失败,常见错误提示为“java.sql.SQLException: IO failure on TCP/IP connection to host”。本文将指…

    2026年9月5日
    200
  • 一款入门级接口测试工具:Postman

    一款入门级接口测试工具:Postman一款入门级接口测试工具:Postman一款入门级接口测试工具:Postman一款入门级接口测试工具:Postman

    postman是一款非常适合开发人员和测试人员使用的api工具。您可以访问postman的官方网站获取更多信息:postman官网。 Postman不仅可以调试简单的CSS、HTML和脚本等网页基本信息,还能够发送几乎所有类型的HTTP请求。 Postman支持多种操作系统,包括Mac、Window…

    2026年9月5日 用户投稿
    100
  • 实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊

    实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊实现5Å全原子RMSD,普渡大学深度学习方法准确预测RNA三级结构,登Nature子刊

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 编辑 | 萝卜皮 非编码 RNA 在各种生物功能中发挥着调控作用,并且与人类健康、药物设计等领域息息相关。 了解功能的机械机制需要三级结构信息,然而,通过实验确定 RNA 三维结构成本高昂且耗时…

    2026年9月5日 用户投稿
    100

发表回复

登录后才能评论
关注微信