Waterfall与Agile项目管理的对比

Waterfall与Agile(敏捷)项目管理的根本对比,在于两者应对不确定性的核心理念、流程模式、需求管理、客户协作以及风险应对等多个维度的哲学性差异。Waterfall是一种预测性、线性顺序的方法,它将项目划分为若干个固定的、前后衔接的阶段,强调在项目初期就完成详尽的规划与设计,如同建造一座大桥,蓝图一旦确定便严格执行。而Agile则是一种适应性、迭代增量的方法,它将项目分解为多个短小的开发周期,通过在每个周期内交付可用的产品增量来持续学习和调整,如同在探索一片新大陆,边前进边绘制地图。

Waterfall与Agile项目管理的对比

因此,两者的对决并非单纯的优劣之争,而是“计划驱动”与“价值驱动”两种截然不同工作哲学的碰撞,分别适用于不同确定性水平和业务环境的项目。

一、瀑布模型深度解析:线性顺序的“大设计”哲学

瀑布模型(Waterfall Model)作为软件开发和项目管理领域最早成型的、最为经典的模型之一,其思想深深根植于传统的制造业和建筑业。它的核心哲学是“预测性”和“计划驱动”,即坚信通过在项目启动阶段进行全面、详尽的需求分析和系统设计,可以将未来的不确定性降至最低,并在后续的开发过程中严格遵循这份“蓝图”,以一种可控的、线性的方式完成项目。这种模式的命名非常形象,工作流程就像瀑布一样,从一个阶段单向地、顺序地流向下个阶段,前一个阶段的输出是后一个阶段的输入,且原则上不允许逆流而上。

瀑布模型的运作流程通常被划分为一系列清晰、独立的阶段,每个阶段都有明确的目标、活动和交付成果。一个典型的瀑布生命周期包括以下几个核心阶段:需求分析与定义,在此阶段,项目团队与客户及利益相关者进行深入沟通,旨在收集、分析并固化所有的项目需求,最终产出一份详尽且被各方签字确认的《需求规格说明书》。系统与软件设计,基于已确定的需求,系统架构师和设计师将进行高层级的概要设计和低层级的详细设计,定义系统的架构、模块、接口和数据结构,产出《设计文档》。实现与单元测试,开发人员根据设计文档编写代码,并对每个独立的模块或单元进行测试,确保其功能正确。集成与系统测试,将所有开发完成的模块集成在一起,进行全面的系统测试,以验证整个系统是否满足需求规格说明书中的所有要求。部署与系统运维,在测试通过后,将系统部署到生产环境,并进入长期的运行与维护阶段,包括修复缺陷、进行升级等。这种严格的阶段划分和文档驱动的管理方式,为项目提供了极强的结构性和可见性,在特定类型的项目中展现出了其独特的价值。

二、敏捷思想深度解析:迭代增量的“价值驱动”哲学

敏捷(Agile)并非一个具体的模型或方法,而是一套应对快速变化和不确定性的价值观和原则的集合。它的诞生本身就是对传统瀑布模型弊端的一种反思和回应。2001年,17位软件开发领域的思想领袖齐聚一堂,共同签署了著名的《敏捷软件开发宣言》,为敏捷思想奠定了基石。这个宣言的核心在于提出了四种价值观的权衡取舍:“个体和互动 高于 流程和工具;可工作的软件 高于 详尽的文档;客户合作 高于 合同谈判;响应变化 高于 遵循计划。” 这并非否定右项的价值,而是强调在复杂多变的环境中,左项具有更高的优先级。

敏捷的哲学核心是“适应性”和“价值驱动”。它承认在大多数创新性项目中,我们不可能在初期就了解所有需求,变化是常态而非例外。因此,敏捷主张放弃“一次性做对所有事”的幻想,转而采用一种迭代式(Iterative)和增量式(Incremental)的方式来工作。项目被分解成一系列短小的、固定时长的开发周期(通常称为“迭代”或“Sprint”),在每个周期结束时,团队都必须交付一个经过测试的、可工作的、对客户有价值的产品增量。这个可用的增量成为了一个重要的反馈工具,团队可以借此从真实的用户和市场中学习,并在下一个迭代中对产品方向和功能优先级进行调整。这种“构建-衡量-学习”的循环,使得项目能够持续地朝着正确的方向演进,最大限度地降低了开发出无人需要产品的风险。正如宣言的起草者之一Alistair Cockburn所说:“敏捷是关于在动荡的环境中取得成功的能力。”

三、核心维度的正面交锋:一场关于确定性与不确定性的对决

将瀑布模型与敏捷思想并置,我们可以在多个核心维度上看到它们之间如同“冰与火”般的鲜明对比。这些对比的根源,在于两者对“确定性”这一核心变量的不同假设。

1. 需求管理:前期固化 vs. 持续演进

在瀑布模型中,需求被视为项目的“基石”,必须在项目初期就进行全面、细致的定义,并通过严格的变更控制流程将其“冻结”。需求的任何变动都被视为风险和麻烦,因为它可能导致后续所有阶段的大量返工。这种方式的理想前提是:客户在项目开始时就完全清楚自己想要什么,并且在整个项目周期内这些需求不会发生变化。

敏捷则持有截然相反的观点。它认为需求是“涌现”和“演进”的。客户在看到可工作的软件之前,往往无法完全清晰地表述自己的需求。因此,敏捷欢迎并拥抱变化,将其视为提升产品价值的机会。需求以用户故事的形式被维护在一个动态的、按优先级排序的待办事项列表中。团队在每个迭代开始时,仅承诺完成当前迭代的少量需求,从而为后续迭代保留了极大的灵活性,以响应新的业务机会或用户反馈。

2. 规划与流程:预测性规划 vs. 适应性规划

瀑布模型是预测性规划的典范。它试图在项目开始时就制定一个覆盖整个项目生命周期的详尽计划,包括明确的里程碑、交付日期和资源分配。整个项目流程如同单行道,严格按照预定顺序前进。

敏捷则采用适应性规划。它承认长期计划在复杂环境中是不可靠的,因此只做高层次的、粗粒度的长期规划(如产品路线图),而将详细的规划留到“最后一刻”——即每个迭代开始前的规划会议上。这使得团队能够基于最新的信息做出最合理的规划决策。其流程是循环的,而非线性的,团队在每个迭代中都会重复“规划-执行-检视-适应”的完整循环。许多支持敏捷的智能化研发管理系统,例如PingCode,就提供了强大的迭代规划和进度跟踪工具,能够帮助团队在这种适应性流程中保持清晰的可见性和高效的协作。

3. 客户协作:阶段性参与 vs. 持续性合作

在瀑布模型中,客户的参与主要集中在两个阶段:项目开始时的需求定义阶段和项目结束时的验收测试阶段。在中间漫长的设计和开发阶段,客户与开发团队的互动相对较少。这种分离很容易导致最终交付的产品与客户的真实期望产生偏差。

敏捷则将客户(或其代表,如产品负责人)视为团队不可或缺的一部分,强调在整个项目周期内进行持续的、紧密的合作。客户需要深度参与每个迭代的规划、评审和反馈过程。这种高频次的互动确保了开发团队始终在为客户构建正确的、最有价值的东西,使得产品能够持续对齐业务目标。

4. 风险管理:前期集中规避 vs. 过程中分散化解

瀑布模型的风险管理策略是“前置加载”的。它试图在项目初期通过详尽的分析和设计来识别和规避所有潜在的风险。然而,最大的风险——“我们是否在构建正确的产品?”——却要等到项目最终交付时才能被验证,一旦方向错误,沉没成本将是巨大的。

敏捷的风险管理策略则是“分散化”和“小步快跑”。通过在每个短迭代结束时都交付一个可工作的软件增量,敏捷能够非常早地、频繁地暴露和化解各种风险。技术风险、市场风险和需求风险在一次次的迭代中被不断地检验和修正。每个迭代都是一次小规模的“赌博”,即使失败,损失也相对可控,而从中获得的学习价值却是巨大的。

四、成功的天平:不同的价值主张与度量衡

衡量一个项目是否成功,瀑布和敏捷也采用了截然不同的标尺,这反映了它们背后不同的价值主张。

瀑布模型的成功标尺:遵循计划

在瀑布模型的世界里,成功的定义非常经典,即项目管理的“铁三角”:项目是否在预定的时间(On Time)、预定的预算(On Budget)内,交付了预定范围(On Scope)的全部内容。项目的整个管理体系,包括各种报告和控制流程,都是围绕着确保项目不偏离最初的基线计划而设计的。在这种范式下,一个严格按照计划执行,但最终交付了一个市场不再需要产品的项目,在流程上仍可能被判定为“成功”。它更关注于过程的合规性和预测的准确性。

敏捷的成功标尺:交付价值

敏捷则对“成功”提出了新的诠释。它认为,严格遵循一个通往错误方向的完美计划是毫无意义的。因此,敏捷的成功标尺更加关注最终的业务成果和客户满意度。衡量敏捷项目成功的关键问题是:我们是否快速地、持续地为客户交付了他们真正需要的、有价值的东西?我们的产品是否能够适应市场的变化并取得商业成功?客户是否满意并愿意持续使用我们的产品? 因此,敏捷团队更关注诸如客户满意度、产品采用率、价值交付速度(Cycle Time)、团队响应变化能力等指标。它将成功的焦点从“遵循计划”转移到了“创造价值”。

五、混合模式的现实选择:当瀑布遇见敏捷

在项目管理的实践中,纯粹的瀑布或纯粹的敏捷往往是理想化的模型。许多组织,特别是那些规模庞大、历史悠久的企业,在转型过程中发现,一种将两者元素结合起来的“混合模式”(Hybrid Model)似乎更具现实操作性。这种模式通常被称为“Wagile”(Waterfall + Agile),它试图取两者之长,补两者之短。

一个常见的混合模式是,在项目的宏观层面采用瀑布式的管理方法,例如,整个项目仍然有明确的阶段划分,如概念、规划、设计、开发、测试和部署,并且需要遵循严格的阶段门(Stage-Gate)审查。然而,在具体的“开发”和“测试”这两个阶段内部,团队则被允许采用敏捷的、迭代式的方式进行工作。例如,在一个为期六个月的开发阶段里,开发团队可能会运行多个为期两周的Scrum Sprint。这种模式试图将瀑布模型在宏观规划和治理上的确定性,与敏捷在微观执行上的灵活性和适应性结合起来。它对于那些既需要满足严格的合规性或合同要求,又希望提升开发效率和产品质量的组织,具有一定的吸引力。

然而,混合模式也充满了挑战和陷阱。最常见的失败根源在于“形似而神不似”。组织可能只是简单地将敏捷的术语和仪式(如每日站会)嫁接到了一个本质上仍然是瀑布的思维模式和文化之上。例如,尽管开发团队在迭代工作,但需求在项目初期就已经被完全锁定,并且客户在开发过程中几乎不参与,这使得敏捷的反馈循环无法真正发挥作用。成功的混合模式需要组织在文化、流程和工具上进行深度的整合与适配,确保敏捷的价值观能够在瀑布的框架内得到真正的尊重和实践,这绝非易事。

六、如何选择:为你的项目找到合适的“操作系统”

瀑布和敏捷,如同计算机的两种不同操作系统,没有绝对的好坏,只有是否适合你当前要运行的“程序”(即你的项目)。做出正确的选择,关键在于深刻理解你项目的内在特性和所处的环境。

何时应该坚定地选择瀑布模型?

当你的项目具有高度的确定性和低风险性时,瀑布模型依然是一个非常有效和可靠的选择。具体来说,以下几种情况非常适合采用瀑布模型:需求非常明确、稳定且在项目初期就可以被完整定义,例如建造一座已经有成熟图纸的建筑,或者开发一个现有系统的简单升级版。技术解决方案成熟、已知且风险可控,团队对所需的技术栈有丰富的经验。项目环境稳定,不太可能受到外部市场或政策的剧烈冲击。此外,在一些需要严格的合同约束和文档追溯的行业(如航空、军工),瀑布模型提供的清晰阶段和详尽文档,也使其成为更受青睐的选择。

何时应该毫不犹豫地拥抱敏捷?

当你的项目面临着高度的不确定性和复杂性时,敏捷将是你最强大的盟友。以下几种情况是敏捷的理想主场:需求模糊、易变或需要探索,例如开发一款前所未有的创新产品,或者进入一个全新的市场。技术具有挑战性或需要采用新技术,团队需要通过实验和学习来找到最佳解决方案。市场环境瞬息万变,产品需要具备快速响应竞争和用户反馈的能力。在这些场景下,试图制定一个详尽的前期计划无异于“刻舟求剑”,而敏捷的迭代学习和适应能力,则能帮助团队在迷雾中找到通往成功的路径。

常见问答

问:敏捷是否意味着没有计划、没有文档、没有设计?

答:这是一个非常普遍且有害的误解。敏捷绝不等于混乱或无序。敏捷宣言中明确指出,虽然我们更看重“响应变化”,但这并不意味着我们否定“遵循计划”的价值。敏捷反对的是在项目初期就制定过于僵化、详尽的长期计划,但它极其强调“适应性规划”和“持续规划”。敏捷团队会在多个层面做计划,包括产品愿景、路线图规划、发布规划和迭代规划。同样,敏捷并非不要文档,而是反对为了文档而文档的“过度文档化”。它推崇的是恰到好处的、能创造价值的轻量级文档,并认为“可工作的软件”是最好的进展证明。至于设计,敏捷倡导的是“涌现式设计”和“持续设计”,设计活动会贯穿于整个项目周期,而不是集中在项目前期一次性完成。

问:瀑布模型是否已经完全过时了?

答:尽管在软件开发领域,敏捷已经成为主流话语,但这并不意味着瀑布模型已经完全没有用武之地。如前所述,在需求极其稳定、技术成熟、环境变化小的特定类型项目中,瀑布模型依然是一种非常高效和低成本的管理方式。它的结构化和纪律性能够确保项目按部就班地进行。问题不在于瀑布模型本身,而在于“错用”,即在高度不确定的创新性项目上强行套用瀑布模型,这才会导致灾难。因此,更准确的说法是,瀑布模型的适用范围相比过去大大缩小了,但它作为一种项目管理工具,在合适的场景下依然宝贵。

问:从瀑布转向敏捷,一个组织面临的最大挑战是什么?

答:从瀑布转向敏捷,最大的挑战通常不是技术或流程的变革,而是文化和思维模式的转变。瀑布模型背后是一种“命令与控制”的管理文化,强调层级、分工和计划的权威性。而敏捷则需要一种“信任与赋能”的文化,强调跨职能协作、团队自组织和对失败的宽容。这种转变会触及组织根深蒂蒂固的权力结构、绩效考核体系和沟通方式。例如,管理者需要从“任务分配者”转变为“服务型领导”,团队成员需要承担更多的决策责任,业务部门需要从“需求提出方”转变为“持续合作的伙伴”。这个过程充满了挑战,需要组织从最高领导层开始,坚定地、耐心地推动,并通过持续的培训、教练辅导和实践来逐步内化敏捷的价值观。

问:我们的项目可以先用瀑布做宏观规划,再用敏捷来具体开发吗?

答:这正是“混合模式”的一种典型实践,在许多大型企业中非常常见。理论上,这种方式试图结合两者的优点:用瀑布的确定性来应对项目初期的立项、预算审批和高层级的架构设计;然后在具体的执行阶段,利用敏捷的迭代开发来应对需求的不确定性和提升交付效率。这种模式能否成功,关键在于两者如何“粘合”。如果前期的瀑宝规划过于僵化和细致,锁死了所有的需求和设计细节,那么后期的敏捷开发将失去其适应变化的核心价值,沦为一个个小型的“迷你瀑布”。成功的关键在于,前期的瀑布规划应保持在足够高的战略和架构层面,为后期的敏捷团队留下充足的探索和决策空间,并建立起一个有效的机制,让敏捷团队在开发过程中的学习和发现能够反过来影响和调整宏观计划。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
低代码和无代码的区别
上一篇 2025年11月12日 11:15:06
Scrum和Kanban的区别
下一篇 2025年11月12日 11:15:09

相关推荐

  • 如何使用正则表达式完整匹配HTML中Script标签的中间内容?

    完整匹配Script标签中间内容的正则表达式 正则表达式是用于从文本中查找特定模式的高级工具。对于HTML中Script标签中间内容的匹配,需要一个特定的正则表达式来实现完整的匹配。 匹配表达式 /(<scriptb([^”]+|”[^”]*”)*>)([sS]*?)()/g 立即学习“…

    2025年12月24日
    3300
  • CSS mask属性无法获取图片:为什么我的图片不见了?

    CSS mask属性无法获取图片 在使用CSS mask属性时,可能会遇到无法获取指定照片的情况。这个问题通常表现为: 网络面板中没有请求图片:尽管CSS代码中指定了图片地址,但网络面板中却找不到图片的请求记录。 问题原因: 此问题的可能原因是浏览器的兼容性问题。某些较旧版本的浏览器可能不支持CSS…

    2025年12月24日
    1210
  • 如何用dom2img解决网页打印样式不显示的问题?

    用dom2img解决网页打印样式不显示的问题 想将网页以所见即打印的的效果呈现,需要采取一些措施,特别是在使用了bootstrap等大量采用外部css样式的框架时。 问题根源 在常规打印操作中,浏览器通常会忽略css样式等非必要的页面元素,导致打印出的结果与网页显示效果不一致。这是因为打印机制只识别…

    2025年12月24日
    1200
  • 如何用 CSS 模拟不影响其他元素的链接移入效果?

    如何模拟 css 中链接的移入效果 在 css 中,模拟移入到指定链接的效果尤为复杂,因为链接的移入效果不影响其他元素。要实现这种效果,最简单的方法是利用放大,例如使用 scale 或 transform 元素的 scale 属性。下面提供两种方法: scale 属性: .goods-item:ho…

    2025年12月24日
    1000
  • 如何调整Flexbox布局中项目对齐方式?

    正文: 调整弹性盒子(Flexbox)布局中项目的对齐方式有几个方法: 文本对齐问题 对于第一个问题,即文字不在 中的问题,这是因为设置了 height 属性。Flexbox 子元素的高度被拉伸到了 height 规定的大小,因此文字无法正常显示在内容内。解决方案是移除 height 属性,让子元素…

    2025年12月24日
    600
  • 如何利用BFC和inline-block解决兄弟元素间margin塌陷问题?

    BFC清除兄弟元素间margin塌陷原理 margin塌陷问题 当相邻的块级元素垂直排列,它们的margin可能会塌陷并重叠,称为margin塌陷。 BFC清除margin塌陷 清除margin塌陷的一种常见方法是将下方元素包裹在一个新的块级格式化上下文(BFC)中,因为BFC之间不会相互影响。 d…

    2025年12月24日
    900
  • Uniapp 中如何不拉伸不裁剪地展示图片?

    灵活展示图片:如何不拉伸不裁剪 在界面设计中,常常需要以原尺寸展示用户上传的图片。本文将介绍一种在 uniapp 框架中实现该功能的简单方法。 对于不同尺寸的图片,可以采用以下处理方式: 极端宽高比:撑满屏幕宽度或高度,再等比缩放居中。非极端宽高比:居中显示,若能撑满则撑满。 然而,如果需要不拉伸不…

    2025年12月24日
    600
  • PC端H5项目如何实现适配:流式布局、响应式设计和两套样式?

    PC端的适配方案及PC与H5兼顾的实现方案探讨 在开发H5项目时,常用的屏幕适配方案是postcss-pxtorem或postcss-px-to-viewport,通常基于iPhone 6标准作为设计稿。但对于PC端网项目,处理不同屏幕大小需要其他方案。 PC端屏幕适配方案 PC端屏幕适配一般采用流…

    2025年12月24日
    800
  • CSS 元素设置 10em 和 transition 后为何没有放大效果?

    CSS 元素设置 10em 和 transition 后为何无放大效果? 你尝试设置了一个 .box 类,其中包含字体大小为 10em 和过渡持续时间为 2 秒的文本。当你载入到页面时,它没有像 YouTube 视频中那样产生放大效果。 原因可能在于你将 CSS 直接写在页面中 在你的代码示例中,C…

    2025年12月24日
    600
  • 如何实现类似横向U型步骤条的组件?

    横向U型步骤条寻求替代品 希望找到类似横向U型步骤条的组件或 CSS 实现。 潜在解决方案 根据给出的参考图片,类似的组件有: 图片所示组件:图片提供了组件的外观,但没有提供具体的实现方式。参考链接:提供的链接指向了 SegmentFault 上的另一个问题,其中可能包含相关的讨论或解决方案建议。 …

    2025年12月24日
    1000
  • 如何让小说网站控制台显示乱码,同时网页内容正常显示?

    如何在不影响用户界面的情况下实现控制台乱码? 当在小说网站上下载小说时,大家可能会遇到一个问题:网站上的文本在网页内正常显示,但是在控制台中却是乱码。如何实现此类操作,从而在不影响用户界面(UI)的情况下保持控制台乱码呢? 答案在于使用自定义字体。网站可以通过在服务器端配置自定义字体,并通过在客户端…

    2025年12月24日
    1100
  • 如何优化CSS Grid布局中子元素排列和宽度问题?

    css grid布局中的优化问题 在使用css grid布局时可能会遇到以下问题: 问题1:无法控制box1中li的布局 box1设置了grid-template-columns: repeat(auto-fill, 20%),这意味着容器将自动填充尽可能多的20%宽度的列。当li数量大于5时,它们…

    2025年12月24日
    1200
  • SASS 中的 Mixins

    mixin 是 css 预处理器提供的工具,虽然它们不是可以被理解的函数,但它们的主要用途是重用代码。 不止一次,我们需要创建多个类来执行相同的操作,但更改单个值,例如字体大小的多个类。 .fs-10 { font-size: 10px;}.fs-20 { font-size: 20px;}.fs-…

    2025年12月24日
    400
  • 绝对定位元素在不同分辨率下偏移,如何解决?

    盒子里的绝对定位元素偏移问题及解决方法 在自定义的输入框checkbox中,对于不同的分辨率设置的居中样式会发生意外的像素偏移,影响选中状态下小红点的居中效果。 偏移的原因在于使用像素单位px。不同分辨率下,像素点的显示方式不同,导致视觉上的错位。 解决方法是将像素单位替换为相对单位,如rem或em…

    2025年12月24日
    400
  • 如何在地图上轻松创建气泡信息框?

    地图上气泡信息框的巧妙生成 地图上气泡信息框是一种常用的交互功能,它简便易用,能够为用户提供额外信息。本文将探讨如何借助地图库的功能轻松创建这一功能。 利用地图库的原生功能 大多数地图库,如高德地图,都提供了现成的信息窗体和右键菜单功能。这些功能可以通过以下途径实现: 高德地图 JS API 参考文…

    2025年12月24日
    1200
  • 如何使用地图库制作悬浮信息框和右键菜单?

    使用地图库制作悬浮信息框和右键菜单的地图显示 想要创建交互式的带有悬浮信息框和右键菜单的地图显示,使用地图库是一个便捷的方法。一般的地图库都提供对应的功能,让你轻松实现这些特性。 功能使用 以高德地图为例,在使用它的 JS API 1.4 时,可以通过以下方式添加信息窗体和右键菜单: 信息窗体:使用…

    2025年12月24日
    100
  • 如何使用 scroll-behavior 属性实现元素scrollLeft变化时的平滑动画?

    如何实现元素scrollleft变化时的平滑动画效果? 在许多网页应用中,滚动容器的水平滚动条(scrollleft)需要频繁使用。为了让滚动动作更加自然,你希望给scrollleft的变化添加动画效果。 解决方案:scroll-behavior 属性 要实现scrollleft变化时的平滑动画效果…

    2025年12月24日
    000
  • CSS mask 属性无法加载图片:浏览器问题还是代码错误?

    CSS mask 属性请求图片失败 在使用 CSS mask 属性时,您遇到了一个问题,即图片没有被请求获取。这可能是由于以下原因: 浏览器问题:某些浏览器可能在处理 mask 属性时存在 bug。尝试更新到浏览器的最新版本。代码示例中的其他信息:您提供的代码示例中还包含其他 HTML 和 CSS …

    2025年12月24日
    000
  • 如何为滚动元素添加平滑过渡,使滚动条滑动时更自然流畅?

    给滚动元素平滑过渡 如何在滚动条属性(scrollleft)发生改变时为元素添加平滑的过渡效果? 解决方案:scroll-behavior 属性 为滚动容器设置 scroll-behavior 属性可以实现平滑滚动。 html 代码: click the button to slide right!…

    2025年12月24日
    1100
  • 如何解决用户代理样式表导致页面元素无法显示的问题?

    去除用户代理样式表的样式 在项目中遇到用户代理样式表的样式遮盖了页面元素,导致无法显示的情况,这可能是因为安装了去广告插件导致的。 通常,用户代理样式表是在浏览器中预定义的,用于提供默认的样式。然而,在特殊情况下,某些插件或扩展程序可能会注入自己的用户代理样式表,从而覆盖页面上的现有样式。 在这种情…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信