如何用CSS制作仿苹果官网导航 CSS透明导航与下滑固定技巧

初始导航栏透明且固定顶部,通过css设置position: fixed和background-color: transparent实现;2. 滚动超过50px后背景变为rgba(255,255,255,0.9)并添加阴影,文字由白变黑,通过javascript监听scroll事件实现;3. 优化性能使用requestanimationframe避免频繁dom操作,并配合will-change属性提升渲染效率;4. 响应式适配通过媒体查询在768px以下隐藏导航链接并显示汉堡菜单,点击切换.show类控制显示;5. 兼容旧浏览器需使用autoprefixer补全css前缀及javascript polyfill支持缺失api,确保功能完整运行。

如何用CSS制作仿苹果官网导航 CSS透明导航与下滑固定技巧

CSS制作仿苹果官网导航,核心在于透明背景与滚动时的固定效果。简单来说,就是初始状态下导航栏透明,随页面滚动逐渐变为不透明并固定在顶部。

如何用CSS制作仿苹果官网导航 CSS透明导航与下滑固定技巧

解决方案

首先,我们需要一个基本的HTML结构:

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

如何用CSS制作仿苹果官网导航 CSS透明导航与下滑固定技巧

欢迎

一些内容...

接下来是CSS部分,这部分是关键。初始状态,导航栏背景透明:

header {  position: fixed; /* 固定定位 */  top: 0;  left: 0;  width: 100%;  background-color: transparent; /* 透明背景 */  z-index: 1000; /* 确保导航栏在最上层 */  transition: background-color 0.3s ease; /* 平滑过渡 */}nav ul {  list-style: none;  padding: 0;  margin: 0;  display: flex;  justify-content: center; /* 水平居中 */}nav li {  margin: 0 20px;}nav a {  text-decoration: none;  color: white; /* 初始白色文字 */}

现在,需要JavaScript来监听滚动事件,改变导航栏的背景色。

如何用CSS制作仿苹果官网导航 CSS透明导航与下滑固定技巧

window.addEventListener('scroll', function() {  const header = document.querySelector('header');  if (window.scrollY > 50) { // 滚动超过50px    header.style.backgroundColor = 'rgba(255, 255, 255, 0.9)'; // 滚动后白色背景    header.style.boxShadow = '0 2px 5px rgba(0, 0, 0, 0.2)'; // 增加阴影    const navLinks = document.querySelectorAll('nav a');    navLinks.forEach(link => {      link.style.color = 'black'; // 滚动后黑色文字    });  } else {    header.style.backgroundColor = 'transparent'; // 恢复透明    header.style.boxShadow = 'none'; // 移除阴影    const navLinks = document.querySelectorAll('nav a');    navLinks.forEach(link => {      link.style.color = 'white'; // 恢复白色文字    });  }});

这段代码监听了scroll事件,当页面滚动超过50像素时,将导航栏的背景色设置为半透明白色,并添加阴影。否则,恢复到初始透明状态。文字颜色也做了相应调整。

如何优化CSS导航栏的滚动性能?

优化滚动性能是一个重要问题。频繁操作DOM会影响性能。一种优化方法是使用requestAnimationFrame。它可以确保动画在浏览器下一次重绘之前执行,从而提高性能。另外,避免在滚动事件处理程序中进行复杂的计算。

ImagetoCartoon ImagetoCartoon

一款在线AI漫画家,可以将人脸转换成卡通或动漫风格的图像。

ImagetoCartoon 106 查看详情 ImagetoCartoon

let ticking = false;window.addEventListener('scroll', function() {  if (!ticking) {    window.requestAnimationFrame(function() {      const header = document.querySelector('header');      if (window.scrollY > 50) {        header.style.backgroundColor = 'rgba(255, 255, 255, 0.9)';        header.style.boxShadow = '0 2px 5px rgba(0, 0, 0, 0.2)';        const navLinks = document.querySelectorAll('nav a');        navLinks.forEach(link => {          link.style.color = 'black';        });      } else {        header.style.backgroundColor = 'transparent';        header.style.boxShadow = 'none';        const navLinks = document.querySelectorAll('nav a');        navLinks.forEach(link => {          link.style.color = 'white';        });      }      ticking = false;    });    ticking = true;  }});

此外,还可以考虑使用CSS will-change属性来告诉浏览器哪些属性将会改变,以便浏览器进行优化。例如:

header {  will-change: background-color, box-shadow;}

如何实现更平滑的滚动过渡效果?

除了transition属性外,还可以使用scroll-behavior: smooth来实现平滑滚动。但这会影响整个页面的滚动行为,需要谨慎使用。更精细的控制可以通过JavaScript来实现,例如使用缓动函数。

function scrollTo(element, to, duration) {  const start = element.scrollTop;  const change = to - start;  let currentTime = 0;  const increment = 20;  function animateScroll() {    currentTime += increment;    const val = Math.easeInOutQuad(currentTime, start, change, duration);    element.scrollTop = val;    if (currentTime < duration) {      setTimeout(animateScroll, increment);    }  }  animateScroll();}// 缓动函数(easeInOutQuad)Math.easeInOutQuad = function (t, b, c, d) {  t /= d/2;  if (t < 1) return c/2*t*t + b;  t--;  return -c/2 * (t*(t-2) - 1) + b;};// 使用示例:const element = document.documentElement || document.body; // 获取滚动元素scrollTo(element, 500, 500); // 滚动到500px,持续500ms

如何处理不同屏幕尺寸下的导航栏适配问题?

响应式设计至关重要。可以使用媒体查询来针对不同屏幕尺寸调整导航栏的样式。例如,在小屏幕上,可以将导航栏折叠成一个汉堡菜单。

@media (max-width: 768px) {  nav ul {    display: none; /* 隐藏导航链接 */  }  /* 添加汉堡菜单图标和样式 */  .menu-icon {    display: block;    position: absolute;    top: 20px;    right: 20px;    cursor: pointer;  }}

JavaScript可以用来切换导航菜单的显示和隐藏。

const menuIcon = document.querySelector('.menu-icon');const navUl = document.querySelector('nav ul');menuIcon.addEventListener('click', function() {  navUl.classList.toggle('show'); // 添加/移除 'show' 类});

CSS中定义.show类的样式,控制导航菜单的显示:

nav ul.show {  display: block; /* 显示导航链接 */  /* 添加其他样式,如全屏显示、背景色等 */}

如何兼容旧版浏览器?

虽然现代浏览器对CSS3和ES6的支持已经很好,但为了兼容旧版浏览器,需要进行一些处理。例如,可以使用autoprefixer来自动添加CSS前缀,以兼容不同的浏览器。对于JavaScript,可以使用polyfill来提供旧版浏览器不支持的API。

以上就是如何用CSS制作仿苹果官网导航 CSS透明导航与下滑固定技巧的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 11:00:27
下一篇 2025年12月2日 11:00:48

相关推荐

  • 如何在 GitHub 三方授权中正确使用 access_token?

    github三方授权登录 access_token使用问题 在利用 github 进行三方登录时,将 access_token 放到请求头’authorization’字段可能导致获取用户令牌失败。github 授权文档说明,应使用指定格式设置 authorization 字…

    2025年12月9日
    000
  • Pheanstalk 消息队列如何设置后台消费者执行消息处理?

    beanstalkd 消费者后台执行 pheanstalk 消息队列允许您设置后台消费者来处理消息。要使消费者代码在后台安静地运行,而不必直接调用消费者方法,您可以使用以下方法: 后台进程 最简单的方法是使用后台进程来启动消费者。您可以使用以下命令行命令以后台方式启动 php 脚本: nohup p…

    2025年12月9日
    000
  • Swoole协程操作同一变量是否需要加锁?

    swoole协程操作同一个变量是否安全? 在swoole协程环境中,同一个协程变量可以在多个协程中被修改,这引发了人们对变量安全性的担忧。 示例代码: use swooleruntime;use swoolecoroutine;use swoolecoroutinewaitgroup;// 协程变量…

    2025年12月9日
    000
  • 【Laravel vx Docker】利用 Laravel Sail 高效搭建 Laravel 应用开发环境

    关于 laravel sail laravel sail 是 laravel 框架的官方开发环境。 sail 提供了一个轻量级的命令行界面 (cli),可以使用 docker 轻松设置和管理 laravel 应用程序开发环境。下面,我们讲解一下 laravel sail 的主要特性和使用方法。 使用…

    2025年12月9日
    000
  • 如何正确使用 Access Token 进行 GitHub 三方授权登录?

    github 三方授权登录:access token 使用指南 在使用 github 进行第三方授权登录时,将 access token 放入请求头的“authorization”字段中可能会遇到无法成功获取用户令牌的问题。 根据官方文档,github 授权头部的正确格式应为: authorizat…

    2025年12月9日
    000
  • Authorization 请求头如何正确的设置 Access Token?

    github 三方授权登录 access token 使用 在进行 github 三方授权登录时,用户需要提供来自 github 的 access token。access token 应该被放置在请求头的 authorization 字段中,正确格式如下: authorization: beare…

    2025年12月9日
    000
  • 在 PHP 中连接到 MySQL 数据库

    PHP 通常与 MySQL 搭配使用,MySQL 是使用最广泛的开源关系数据库管理系统之一,可以在小型和大型项目中快速高效地处理数据。 无论您是创建简单的网站还是高级 Web 应用程序,您都需要知道如何将 PHP 连接到 MySQL 数据库。 MySQL 和 PHP 集成概述 MySQL 因开源关系…

    2025年12月9日
    000
  • 在 Swoole 协程中操作变量时,是否需要加锁以确保变量的安全性?

    协程操作变量时是否需要加锁:安全性分析 在 swoole 协程中,多个协程的操作同一个变量是否需要加锁,一直是开发者关心的问题。 示例代码 考虑以下代码示例: use SwooleRuntime;use SwooleCoroutine;use SwooleCoroutineWaitGroup;// …

    2025年12月9日
    000
  • GitHub 三方登录 access_token 如何正确使用?

    github 三方授权登录中 access_token 使用问题 在使用 github 进行三方登录时,将 access_token 放置于请求头的’authorization’字段中,却无法成功获取用户令牌。 根据 github 授权文档,正确的授权头部应为”a…

    2025年12月9日
    000
  • 使用 Github 三方授权登录时 Authorization 字段的正确格式是什么?

    github 三方授权登录 access_token 使用问题 在使用 github 进行三方登录时,将 access token 放入请求头的 authorization 字段却一直未成功获取到用户的令牌。 问题代码 private async getgithubuserinfo(accessto…

    2025年12月9日
    000
  • 使用swoole作为基于ESP6的脚本可编程控制器的云端物联网网关框架

    脚本可编程控制器的本地功能已经基本完成,开始实现远程相关功能。 远程系统整体架构如下:使用ESP8266的SDK实现tcp服务器和tcp客户端。在tcp服务器的基础上编写http协议解析代码,设计简单的http服务器,处理与浏览器的数据交互,包括内置网页的下载,并使用ajax技术获取状态并保存数据。…

    2025年12月9日
    000
  • 数据库驱动的任务和成员资格

    我正在从事一个愚蠢的宏伟项目,开发一个用于管理自助俱乐部或协会的网站。该项目结合了跟踪会员资格、消息传递和培训课程,其中会员运行整个系统。 我已经使用过类似的网络服务,但我有一个不同的想法。 Html、CSS、JavaScript、PHP MariaDb(mySQL) 目前在 W10 上的 Xamp…

    2025年12月9日
    000
  • 为什么你应该为开源付费

    几乎每个开发人员每天都会使用开源项目,无论是在 VS Code 中编写代码、使用 TailwindCSS 加速开发,还是使用最流行的 PHP 框架 Laravel 构建强大的 Web 应用程序。我们不要忘记用于创建管理面板的 FilamentPHP。 这些项目不是鬼建的,而是由鬼魂建造的。它们是由人…

    2025年12月9日
    000
  • PHP,永不倒下的大象!

    照片由 Ben Griffiths 在 Unsplash 上拍摄 PHP是一门广受好评的语言,同时也受到其他人的批评,有人说它正在消亡,但真的是这样吗,值得花时间学习PHP吗? PHP PHP 是 Rasmus Lerdorf 在 90 年代开发的一种编程语言,最初它被开发为一种服务器端语言,帮助 …

    2025年12月9日
    000
  • PHP 中的 Tailwind CSS 解析器需要帮助

    大家好, 我目前正在为我的一个项目开发一个 php 中的 tailwind css 解析器,其目的是在运行时解析 tailwind css 类。我已经开始研究它并在此处创建了一个存储库:github – php tailwind parser。 我已经实现了许多已记录的css类,但我相信…

    2025年12月9日
    000
  • php函数代码部署的成本优化策略

    为了降低 php 函数代码部署成本,可以采取以下策略:利用容器化部署,简化可扩展性和可移植性,减少重复性任务的开销。采用无服务器计算,只为实际使用的资源付费,让成本与流量模式保持一致。使用代码压缩和优化技术,减小 php 代码包的大小,降低部署时间和资源消耗。通过 cdn 将静态文件缓存到离用户较近…

    2025年12月9日
    000
  • PHP 函数命名规范解读:特殊字符的使用指南

    php 函数命名中的特殊字符:允许使用下划线(_)、连字符(-)、点(.)来分隔单词和复合词。下划线通常用于分隔单词,提高可读性。连字符用于分隔复合词,类似于下划线,但更常用于 css 或 html 样式名称。点用于分隔方法的类名和方法名称。使用时应避免不必要字符,注意字符的顺序和连贯性,以确保函数…

    2025年12月9日
    000
  • php函数与前端交互时的难题及解决方案

    在 php 函数与前端交互时,常见的难题及解决方案如下:在前端访问 php 变量:输出到 html 中,例如 echo 从前端传递数据:通过 html 表单或 ajax 请求提交数据。处理客户端事件:使用 javascript 监听事件并通过 ajax 发送数据。跨域请求:配置 cors 允许不同域…

    2025年12月9日
    000
  • 什么是 PHP CodeSniffer?

    PHP CodeSniffer 是一种流行的工具,用于检测 PHP 代码中违反编码标准的情况。它通过分析 PHP、JavaScript 和 CSS 文件以遵守定义的编码标准,帮助保持代码库的一致性和质量。 PHP CodeSniffer 的主要特性 编码标准执行: CodeSniffer 根据预定义…

    2025年12月9日
    000
  • 提高 PHP 效率:经过验证的性能优化技术

    优化 php 性能可确保我们的 web 应用程序平稳运行、快速响应并高效处理流量。下面是关于如何有效地最大化 php 性能的详细分步指南,并为每种优化策略提供了实践示例。 第 1 部分:更新到最新的稳定 php 版本 第 1 步:检查当前 php 版本 首先检查系统上安装的当前 php 版本: ph…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信