像 StackOverflow 一样的响应式导航栏

Responsive NavBar like StackOverflow

我正在尝试创建一个响应式导航栏,类似于 Stack Overflow 上的导航栏。我附上了我要实现的布局的图片。

为简单起见,我添加了一些值以使其更易于理解。有封装整个页面的外部 div outer-wrapper 和封装主要内容(导航栏、主要内容和页脚)的主要 div main-wrapper

现在假设outer-wrapper为1000px宽,main-wrapper为800px宽,则左右各有100px的缓冲区。当 window 缩小时,我希望缓冲区在任何主要内容更改之前用完。

CSS

    .outer-wrapper {
        width:  100%;
    }

    .main-wrapper {
        width: 800px;
        display: flex;
        flex-direction: column;
        margin-left: auto;
        margin-right: auto;
        position: relative;
    }
    .nav-home {
        position: fixed;
        top: -30px;
        left: -30px;
        height: 60px;
        width: 100%;
        padding: 20px 20px 0px 20px;
        display: flex;
        justify-content: space-around;
    }
}

HTML

    <div class='outer-wrapper'>
      <div class='main-wrapper'>
        <div class='nav-bar'>...</div>
        <div class='main-content'>...</div>
        <div class='footer'>...</div>
      </div>
    </div>

问题是,当 window 缩小到与 main-wrapper 的宽度相匹配的 800px 时,导航栏中仍然存在左右边距。当左右边距缩小为0时,如何确保导航栏的宽度与主要内容和页脚的宽度匹配?

谢谢。

我从 .nav-bar class 中删除了您的一些样式,它似乎按照您的要求执行 - 我错过了什么吗?

我添加了颜色以帮助可视化调整大小。

.outer-wrapper {
    background-color: yellow;
    width:  100%;
}

.main-wrapper {
    background-color: blue;
    width: 800px;
    display: flex;
    flex-direction: column;
    margin-left: auto;
    margin-right: auto;
    position: relative;
}

.nav-bar {
    background-color: red;
    justify-content: space-around;
}

.main-content {
  background-color: green;
}

.footer {
  background-color: purple;
}
<div class='outer-wrapper'>
  <div class='main-wrapper'>
    <div class='nav-bar'>Nav Bar</div>
    <div class='main-content'>Main Content</div>
    <div class='footer'>Footer</div>
  </div>
</div>

.outer-wrapper {
        width: 100%;
      }

      .main-wrapper {
        width: 800px;
        display: flex;
        flex-flow: row wrap;
        font-weight: bold;
        text-align: center;
        margin: 0 auto;
      }

      .main-wrapper > * {
        padding: 10px;
        flex: 1 100%;
      }

      .nav-bar {
        background: tomato;
      }

      .footer {
        background: lightgreen;
      }

      .main-content {
        background: deepskyblue;
      }

      .aside-1 {
        background: gold;
      }

      .aside-2 {
        background: hotpink;
      }

      @media all and (min-width: 600px) {
        .aside {
          flex: 1 0 0;
        }
      }

      @media all and (min-width: 800px) {
        .main-content {
          flex: 3 0px;
        }
        .aside-1 {
          order: 1;
        }
        .main-content {
          order: 2;
        }
        .aside-2 {
          order: 3;
        }
        .footer {
          order: 4;
        }
      }

      body {
        padding: 2em;
      }
<div class="outer-wrapper">
      <div class="main-wrapper">
        <nav class="nav-bar">Navbar</nav>
        <main class="main-content">content</main>
        <aside class="aside aside-1">aside 1</aside>
        <aside class="aside aside-2">aside 2</aside>
        <footer class="footer">footer</footer>
      </div>
    </div>

这是我编写的代码,希望它能对您和您所期望的有所帮助