You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSS实现头部滚动渐变?添加属性后头部全黑求解答

解决页面滚动时头部渐变滚动(太阳升起效果)的问题

你的问题梳理

你想要实现网站头部滚动时的渐变滚动效果(类似太阳升起),静态渐变的代码没问题,但添加background-size: 400px和background-attachment: fixed后头部直接变黑,不清楚哪里出了问题。

你的初始静态渐变代码:

#header { 
  height: 200px; 
  width: 100%; 
  left: 0; 
  right: 0; 
  top: 0; 
  background: linear-gradient(to bottom, #020107 0%, #311B46 50%, #592C67 60%, #803E7E 75%, #CA759C 90%, #EC9D9D 95%, #C35E4D 100%); 
}
<div id="header"></div>

修改后出现问题的代码:

#header { 
  height: 200px; 
  width: 100%; 
  left: 0; 
  right: 0; 
  top: 0; 
  background: linear-gradient(to bottom, #020107 0%, #311B46 50%, #592C67 60%, #803E7E 75%, #CA759C 90%, #EC9D9D 95%, #C35E4D 100%); 
  background-size: 400px; 
  background-attachment: fixed; 
}

问题根源分析

头部变黑的核心原因是background-size和background-attachment的组合逻辑理解偏差:

  • 当设置background-attachment: fixed时,背景是相对于整个视口固定,而非头部元素本身。
  • 你只写了background-size: 400px,这会让背景的宽高都变成400px,但你的头部只有200px高,而渐变的起始色是纯黑的#020107,正好对应视口顶部区域,所以头部显示的全是黑色。
  • 另外,background-size单值写法会让第二个值默认是auto,垂直方向的渐变会被压缩,进一步加剧黑色填满头部的情况。

正确实现方案

下面提供两种方案,分别适合不同的需求场景:

方案一:纯CSS实现(无需JS)

这种方案利用固定背景的特性,让滚动时头部“露出”渐变的不同区域:

#header {
  position: fixed; /* 固定头部在视口顶部 */
  top: 0;
  left: 0;
  width: 100%;
  height: 200px;
  /* 把渐变背景高度设得远大于头部,确保滚动时有足够的渐变区域可展示 */
  background: linear-gradient(to bottom, #020107 0%, #311B46 50%, #592C67 60%, #803E7E 75%, #CA759C 90%, #EC9D9D 95%, #C35E4D 100%);
  background-size: 100% 2000px; /* 宽度占满,高度足够大 */
  background-attachment: fixed;
  background-position: top center; /* 初始显示渐变顶部 */
}

/* 给页面添加足够的滚动空间 */
body {
  margin: 0;
  padding-top: 200px; /* 避免内容被固定头部遮挡 */
  height: 3000px; /* 模拟长页面 */
}
<div id="header"></div>
<p>页面内容...</p>

原理:向下滚动时,固定的头部会逐渐显示渐变中更靠下的颜色,视觉上就像渐变在向上滚动,完美匹配“太阳升起”的效果。

方案二:JS配合实现(更灵活的控制)

如果需要精确调整渐变滚动的速度或触发时机,可以用JS监听滚动事件动态修改背景位置:

#header {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 200px;
  background: linear-gradient(to bottom, #020107 0%, #311B46 50%, #592C67 60%, #803E7E 75%, #CA759C 90%, #EC9D9D 95%, #C35E4D 100%);
  background-size: 100% 2000px;
}

body {
  margin: 0;
  padding-top: 200px;
  height: 3000px;
}
window.addEventListener('scroll', function() {
  const scrollY = window.scrollY;
  // 调整0.5这个系数可以控制渐变滚动速度,数值越小移动越慢
  document.getElementById('header').style.backgroundPositionY = `${-scrollY * 0.5}px`;
});

原理:滚动时根据滚动距离,让背景向上移动,头部内显示的渐变区域随之变化,你可以根据需求调整速度系数,让效果更贴合预期。

额外提示

  • 如果你的头部不是固定的,而是随页面滚动的,需要去掉background-attachment: fixed,改用JS动态计算背景位置。
  • 测试时确保页面有足够的滚动高度,否则无法看到完整效果。

内容的提问来源于stack exchange,提问作者Sumerechny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:53:22