我正在用react-router-dom制作一个多页面的网站,并试图在顶部添加一个固定的导航栏.

我的导航栏组件和css文件:

import { NavLink } from "react-router-dom";
import styles from "./NavBar.module.css";

const NavBar = () => {
  return (
    <nav className={styles.nav}>
      <ul>
        <li>
          <NavLink
            className={({ isActive }) => (isActive ? styles.active : undefined)}
            to="/"
          >
            Home
          </NavLink>
        </li>
        <li>
          <NavLink
            className={({ isActive }) => (isActive ? styles.active : undefined)}
            to="/Menu"
          >
            Menu
          </NavLink>
        </li>
        <li>
          <NavLink
            className={({ isActive }) => (isActive ? styles.active : undefined)}
            to="/Contact"
          >
            Contact
          </NavLink>
        </li>
      </ul>
    </nav>
  );
};

export default NavBar;
.nav {
  position: fixed;
  width: 100%;
  z-index: 10;
  background-color: white;
  display: flex;
  justify-content: center;
}

.nav ul {
  list-style-type: none;
  display: flex;
  gap: 1rem;
}

.nav a {
  color: grey;
  font-weight: bold;
  text-decoration: none;
  padding-bottom: 10px;
  transition: color 0.15s border-bottom 0.15s;
  font-size: 1.15rem;
}

.nav a.active {
  color: black;
  border-bottom: 2px solid black;
}

.nav a:hover {
  color: black;
}

我将导航栏添加到我的网站上,如下所示:

import { Outlet } from "react-router-dom";
import NavBar from "../components/NavBar/NavBar";

const Root = () => {
  return (
    <div>
      <NavBar />
      <Outlet />
    </div>
  );
};

export default Root;

基本上,Outlet的内容正在改变我导航栏的大小.例如,在主页上,导航栏的宽度为690px,但在联系人页面上,导航栏的宽度为710px.问题似乎出在Outlet中元素的大小上,因为当我降低高度时,大小变化会变得不那么严重.但导航吧是固定的,所以我不确定为什么插座会影响它.

以下是我的主页组件和css文件:

import styles from "./Home.module.css";
import img from "../../img/spread.jpg";
import { Link } from "react-router-dom";
import Map from "../../components/Map/Map";
import HomeContact from "./HomeContact/HomeContact";

const Home = () => {
  return (
    <div>
      <div className={styles.home}>
        <div>
          <h5>Welcome to</h5>
          <h1>Spring Garden</h1>
          <Link to="/Menu">View Menu</Link>
        </div>
        <img src={img} alt="A table full of Chinese food."></img>
      </div>
      <HomeContact />
      <Map />
    </div>
  );
};

export default Home;
.home {
  display: flex;
  height: 60vh;
  align-items: center;
}

.home div {
  width: 50%;
  padding-left: 2rem;
  padding-right: 2rem;
}

.home img {
  width: 50%;
  height: 100%;
  object-fit: cover;
}

.home h1 {
  font-size: 4rem;
  line-height: 5rem;
  margin-top: 0rem;
}

.home h5 {
  font-size: 1.25rem;
  margin-bottom: 1rem;
}

.home a {
  text-decoration: none;
  font-weight: bold;
  background-color: rgb(205, 7, 30);
  color: white;
  padding: 1rem;
  transition: background-color 0.15s;
}

.home a:hover {
  background-color: rgb(231, 9, 35);
}

我正在try 添加一个固定的导航栏,它不会在我的网站的每一页上改变.然而,通过判断元素,我看到每一页上的NAV大小都有轻微的变化.这会导致我的导航栏略有偏移.我不明白为什么会发生这种情况,因为导航栏不应该是文档流的一部分.

整个项目都在GitHub:https://github.com/iamgeeyuh/spring-garden-website

这是一个running codesandbox美元的演示.

推荐答案

在呈现的不同路由上,用户界面没有一致的应用程序.我建议在根部组件中指定更静态的布局.不是固定Navbar的位置,而是使用网格布局将导航栏放置在第一行,然后是可滚动的内容行,然后将Outlet和发送的内容呈现到其中.

根部

import { Outlet } from "react-router-dom";
import NavBar from "../components/NavBar/NavBar";
import styles from "./根部.module.css";

const 根部 = () => {
  return (
    <div className={styles.container}>
      <NavBar />
      <div className={styles.scrollContainer}>
        <Outlet />
      </div>
    </div>
  );
};

export default 根部;

根部.module.css

.container {
  display: grid;
  grid-template-rows: auto 1fr;
  overflow: hidden;
  height: 100vh;
}

.scrollContainer {
  overflow: auto;
}

Navbar.mode.css-删除position: fixed和底部填充规则.

.nav {
  list-style-type: none;
  text-align: center;
  background-color: white;
  /* position: fixed; */ <-- remove
  width: 100%;
  z-index: 10;
  margin-top: 0;
  /* padding-bottom: 1rem; */ <-- remove
}

Edit im-using-react-router-dom-and-created-a-fixed-navbar-that-keeps-changing-size-o

enter image description here enter image description here enter image description here

Html相关问答推荐

如何使div按钮链接到另一个网页

未显示新组件的视图

需要帮助实现悬停动画效果

如何在div中淡入和淡出渐变背景?

无法从路径参数获取ID

获取标准的Python脚本,以便使用FASK对网站进行Flask

使用CSS和Slick Carcass使图像适合屏幕

是否有语义 HTML 可以澄清含义?

在span中添加

为什么可滚动弹性项目需要 flex-basis: 0 ?

如何根据剪辑路径边缘设置文本边距?

Django 如何从文件系统下载文件?

如何使用jQuery将我制作的通用头部和底部加载到多个HTML文件中?

使用flex wrap时,如何设置另一个元素的宽度与换行后的元素对齐?

使用HTML和CSS构建简历网站.无法使body元素内的div元素跨越整个网站高度

pull-right 不适用于 bootstrap alert 内的按钮

为什么 text-align 应用于 span 而不是 CSS 中的 img

本地 css 样式表未链接

调整大小时 CSS 溢出

变换元素以适应高度(Angular,SCSS)