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

React JS导航栏position: sticky不生效问题求助

导航栏position: sticky不生效的解决方法

问题描述

设置position: sticky后导航栏无法在页面滚动时固定在顶部,相关代码如下:

App.jsx

import Absorption from './Absorption';
import './App.css';

export default function App(){

  return(
  <>
    <div id="heading">
      <div id="heading_topic">Separation Process</div>
      <div id="nav_bar">
        <div className="nav_item">Separation Process</div>
        <div className="nav_item">Absorption</div>
        <div className="nav_item">Distillation</div>
        <div className="nav_item">Extraction</div>
        <div className="nav_item">Humidification</div>
      </div>
      <div id="content">
        <Absorption />
      </div>
    </div>
  </>
)
}

App.css

body{
    background-color: white;
    padding: 0;
    margin: 0;
}

*{
    margin: 0;
    padding: 0;
}

#heading{
    width: 100%;
    background-color: rgba(48, 255, 186, 0.69);
    height: 14em;
    font-family: "Codystar", serif;
    display: block;
    z-index: 1;
}

#heading_topic{
    width: 100%;
    height: 75%;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 3em;
    font-weight: bold;
    letter-spacing: 10px;
}

#nav_bar{
    width: 100%;
    height: 25%;
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
    display: flex;
    justify-content: space-evenly;
    align-items: center;
    background-color: rgba(31, 31, 31, 0.049);
    position: sticky;
    top: 0;
    z-index: 1000;
}

.nav_item{
    width: 20%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 1.2em;
    cursor: pointer;
    transition: all 0.3s;
}

.nav_item:hover{
    background-color: rgba(0, 0, 0, 0.208);
}


@media screen and (max-width: 800px) {

    #heading{
        height: 10em;
    }
    
    #heading_topic{
        width: 100%;
        font-size: 2em;
        letter-spacing: 1px;
        display: flex;
        justify-content: center;
        align-items: center;
    }

    #nav_bar{
        width: 100%;
        background-color: rgba(31, 31, 31, 0.049);
        left: 0%;
    }

    .nav_item{
        width: 100%;
        font-size: 0;
    }
}

问题原因

position: sticky的生效范围受限于父元素的滚动边界,当前#heading设置了固定高度14em,导航栏#nav_bar作为其子元素,只能在#heading的高度范围内实现“粘性”定位,无法超出父容器的固定高度限制,因此滚动页面时无法固定在视口顶部。

解决方案

调整DOM结构,将导航栏从固定高度的#heading容器中移出,使其直接作为body的子元素,让sticky基于整个视口生效:

修改后的App.jsx

import Absorption from './Absorption';
import './App.css';

export default function App(){

  return(
  <>
    <div id="heading">
      <div id="heading_topic">Separation Process</div>
    </div>
    <div id="nav_bar">
      <div className="nav_item">Separation Process</div>
      <div className="nav_item">Absorption</div>
      <div className="nav_item">Distillation</div>
      <div className="nav_item">Extraction</div>
      <div className="nav_item">Humidification</div>
    </div>
    <div id="content">
      <Absorption />
    </div>
  </>
)
}

同步调整App.css

修改#heading和#nav_bar的样式,适配新结构并保留原视觉效果:

#heading{
    width: 100%;
    background-color: rgba(48, 255, 186, 0.69);
    height: 10.5em; /* 原14em的75%,对应原heading_topic的高度占比 */
    font-family: "Codystar", serif;
    display: block;
    z-index: 1;
}

#nav_bar{
    width: 100%;
    height: 3.5em; /* 原14em的25%,保持原高度 */
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
    display: flex;
    justify-content: space-evenly;
    align-items: center;
    background-color: rgba(31, 31, 31, 0.049);
    position: sticky;
    top: 0;
    z-index: 1000;
}

/* 响应式部分同步调整 */
@media screen and (max-width: 800px) {
    #heading{
        height: 7.5em; /* 原10em的75% */
    }
    
    #nav_bar{
        height: 2.5em; /* 原10em的25% */
        width: 100%;
        background-color: rgba(31, 31, 31, 0.049);
        left: 0%;
    }
}

修改后,导航栏不再受固定高度父容器的限制,滚动页面时会固定在视口顶部,同时保留原有样式和交互效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:19:59