【问题标题】:Positioning scrollable content under fixed flexbox navigation menu在固定的 flexbox 导航菜单下定位可滚动内容
【发布时间】:2020-04-28 16:22:26
【问题描述】:

我有以下 sn-p(需要以全屏模式查看),我试图将 <main> 元素直接放在 <header> 元素下。我将<header> 放在固定位置,因为我希望它在用户滚动浏览<main> 元素中的内容时保持在屏幕顶部。我已经尝试了我所知道的一切,但我能想到的最好的方法是将 <header> 元素放在 <main> 元素的顶部,这会切断大部分内容。

我想出的最接近的可能解决方案是在<main> 元素上放置一个估计的顶部填充,以便清除<header>。但是,此解决方案不能很好地考虑各种屏幕尺寸,因为我使用的是 rem 大小而不是 px。当在<header> 中放置几个​​使用相对或百分比高度的元素时,顶部填充的想法会变得更糟。在一个屏幕尺寸上,一切都可能完美排列,而在不同的屏幕尺寸上,内容可能会相差甚远。

最后,我知道我可以使用 jQuery 动态设置顶部填充,但它似乎并不总是那么好用。想知道是否有一个纯 css/html 解决方案。

谁能告诉我这里缺少什么?我的顶级填充方法是唯一可行的解​​决方案吗?

$(document).ready(function() {
  $('#navToggle').click(function() {
    $("div#bottom-container > nav").slideToggle();
  });

  $(window).resize(function() {
      if(window.innerWidth >= "751") {
          $("header > div#bottom-container > nav").show();
      }else {
          $("header > div#bottom-container > nav").hide();
      }
  });

  $("header > div#bottom-container > nav > ul > li > a").click(function(e) {
     if (window.innerWidth <= "750") {
       if ($(this).siblings().size() > 0) {
         e.preventDefault();
         $(this).siblings().slideToggle("slow");
      }
    }
  });

   $("header > div#bottom-container > nav > ul > li").hover(function() {
        if (window.innerWidth >= "751") {
          if ($(this).children("nav").size() > 0) {
            $(this).children("nav").stop().show();
         }
       }
     },function(){
       if (window.innerWidth >= "751") {
         if ($(this).children("nav").size() > 0) {
           $(this).children("nav").hide();
        }
      }
  });
});
* {
  margin: 0;
}

@media (min-width: 48rem) {
  :root {
    font-size: calc(1rem + ((1vw - .48rem) * 1.389));
  }
}

body {
  background: #eee;
  font-family: "HelveticaNeue-Light", Arial;
  height: auto !important;
}

#head-wrap{
    margin: 0 auto;
    position: relative;
    width:100%;
}
#second-wrap{
    position: fixed;
    width:100%;
    z-index:999;
}
main{
  height:4000px;
  position:relative;
  padding-top:13rem;
}

header{
  position: absolute;
  top:0;
  left:0;
  width:100%;
  overflow-x: hidden;
  overflow-y: auto;
  height:200rem;
}

#navToggle {
  background-color: rgba(0, 0, 0, .15);
  position: relative;
  right: 0;
  top: 0;
  z-index:999;
  height: 2.6rem;
}

#navToggle>a {
  color: rgba(255, 255, 255, .85);
  display: block;
  font-size: 0.85em;
  font-weight: 600;
  padding: 0 2.5rem;
  text-decoration: none;
  transition: all 300ms ease;
  padding-top:.9rem;
}

#bottom-container {
  display: flex;
  flex-direction: column;
  text-align: center;
  box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.55);
}

#bottom-container>nav {
  background-color: rgb(250, 209, 14);
  display: none;
  flex: 1;
}

#bottom-container nav>ul {
  list-style-type: none;
}

#bottom-container nav>ul>li {
  position: relative;
}

#bottom-container nav>ul>li>a {
  display: block;
  color: rgba(0, 0, 0, .65);
  padding: 1.3rem 0;
  text-decoration: none;
}

#bottom-container nav>ul>li>a span.toggle {
  background-color: rgba(0, 0, 0, .05);
  color: rgba(0, 0, 0, .25);
  padding: 2px 8px;
}

#bottom-container>nav>ul>li>nav {
  display: none;
  overflow: hidden;
  position: absolute;
  top:100%;
  right: 5%;
  width: 90%;
  z-index: 100;
  background-color: rgb(250, 250, 250);
  margin-bottom:10rem;
}

header>nav>ul>li>nav>ul>li>a {
  color: rgba(255, 255, 255, .85);
}

/*
/////////////////////////////////////////////////
/////////////////////////////////////////////////
////   THIS IS THE ONLY FIX I KNOW OF  //////////
*/
main{
  padding-top:5rem;
}
/*
////////////////////////////////////////////////
////////////////////////////////////////////////
*/

/* Medium screens */
@media all and (min-width: 751px) {
  header{
    overflow-y:visible;
    overflow-x:visible;
    padding-bottom:0;
  }

  #navToggle {
    display: none;
  }

  #bottom-container {
    background-color: rgb(250, 209, 14);
    width: 100%;
    border-top: calc(5vh + 2vw) solid yellow;
  }

  #bottom-container>nav {
    display: block;
  }

  #bottom-container>nav>ul {
    display: flex;
    justify-content: center;
    flex-direction: row;
    height: 3rem;
  }

  #bottom-container nav>ul>li {
    position: static;
    flex:1;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  #bottom-container nav>ul>li>a {
   padding: 0;
  }

  #bottom-container nav>ul>li>a span.toggle {
    display: none;
  }

  #bottom-container >nav>ul>li>nav>ul>li{
    line-height: 2.5rem;
  }
  #bottom-container>nav>ul>li>nav {
    margin-top:-194.5rem;
  }
}
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<div id="head-wrap">
  <div id="second-wrap">
    <header>
      <div id="navToggle"><a href="#">Menu</a></div>
      <div id='bottom-container'>
        <nav>
          <ul>
            <li><a href="#">ITEM ONE</a></li>
            <li class="sub1">
              <a href="#">ITEM TWO <span class="toggle">Expand</span></a>
            <nav>
              <ul>
                <li><a href="#">Sub Item 1</a></li>
                <li><a href="#">Sub Item 2</a></li>
                <li><a href="#">Sub Item 3</a></li>
                <li><a href="#">Sub Item 4</a></li>
              </ul>
            </nav>
            <li><a href="#">ITEM THREE</a></li>
          </ul>
        </nav>
      </div>
    </header>
  </div>
</div>

<main>
  <p>content top not visible but should be able to see</P>
  <p>line 1</P>
  <p>line 2</P>
  <p>line 3</P>
  <p>line 4</P>
  <p>line 5</P>
  <p>line 6</P>
  <p>line 7</P>
  <p>line 8</P>
  <p>line 9</P>
  <p>line 10</P>
    <p>line 11</P>
    <p>line 12</P>
    <p>line 13</P>
    <p>line 14</P>
    <p>line 15</P>
    <p>line 16</P>
    <p>line 17</P>
    <p>line 18</P>
    <p>line 19</P>
    <p>line 20</P>
</main>
</body>
</html>

【问题讨论】:

  • 全屏显示主页面已经在标题下,但不在移动设备中
  • 这是因为在 main 元素上放置了 padding-top。笨重,但它有点工作。想知道是否有更好的解决方案。
  • 我不知道你想要什么,这是禁用黄色边框后的照片ibb.co/bR0YykQ你能截图吗
  • 我的例子是我现场版的简化版。在我的实时版本中,&lt;header&gt; 元素中有几个 flex 元素,它们都使用百分比或相对高度。这使得向&lt;main&gt; 元素添加一个固定的顶部焊盘几乎毫无用处。 &lt;main&gt; 元素可能在一种屏幕尺寸上排列良好,而在另一种尺寸上则相距甚远。看起来 jQuery 可能是我在这里唯一的解决方案,在 &lt;main&gt; 元素上有一个 CSS 顶垫备份。
  • 你试过用 CSS position: sticky developer.mozilla.org/en-US/docs/Web/CSS/position 代替 JS 吗?

标签: html css css-position fixed


【解决方案1】:

这是一种粗略的 hack,但您可以创建第二个标题,隐藏在真正的标题后面,该标题保留在文档流中并向下推&lt;main&gt;

只需复制构成标题的元素,给它们一个较低的z-index 并将其从position: fixed 切换到position: relative。然后只需去掉隐藏的&lt;header&gt; 元素的高度并从&lt;main&gt; 中删除padding-top

$(document).ready(function() {
  $('#navToggle').click(function() {
    $("div#bottom-container > nav").slideToggle();
  });

  $(window).resize(function() {
      if(window.innerWidth >= "751") {
          $("header > div#bottom-container > nav").show();
      }else {
          $("header > div#bottom-container > nav").hide();
      }
  });

  $("header > div#bottom-container > nav > ul > li > a").click(function(e) {
     if (window.innerWidth <= "750") {
       if ($(this).siblings().size() > 0) {
         e.preventDefault();
         $(this).siblings().slideToggle("slow");
      }
    }
  });

   $("header > div#bottom-container > nav > ul > li").hover(function() {
        if (window.innerWidth >= "751") {
          if ($(this).children("nav").size() > 0) {
            $(this).children("nav").stop().show();
         }
       }
     },function(){
       if (window.innerWidth >= "751") {
         if ($(this).children("nav").size() > 0) {
           $(this).children("nav").hide();
        }
      }
  });
});
* {
  margin: 0;
}

@media (min-width: 48rem) {
  :root {
    font-size: calc(1rem + ((1vw - .48rem) * 1.389));
  }
}

body {
  background: #eee;
  font-family: "HelveticaNeue-Light", Arial;
  height: auto !important;
}

#head-wrap,
#hidden-wrap{
    margin: 0 auto;
    position: relative;
    width:100%;
}
#hidden-wrap header {
  height: inherit;
  position: relative;
}
#second-wrap{
    position: fixed;
    width:100%;
    z-index:999;
}
#second-wrap2{
    position: relative;
    width:100%;
    z-index:998;
}

main{
  height:4000px;
  position:relative;
  /* padding-top:13rem; */
}

header{
  position: absolute;
  top:0;
  left:0;
  width:100%;
  overflow-x: hidden;
  overflow-y: auto;
  height:200rem;
}

#navToggle,
#navToggle2{
  background-color: rgba(0, 0, 0, .15);
  position: relative;
  right: 0;
  top: 0;
  z-index:999;
  height: 2.6rem;
}

#navToggle>a,
#navToggle2>a{
  color: rgba(255, 255, 255, .85);
  display: block;
  font-size: 0.85em;
  font-weight: 600;
  padding: 0 2.5rem;
  text-decoration: none;
  transition: all 300ms ease;
  padding-top:.9rem;
}

#bottom-container,
#bottom-container2{
  display: flex;
  flex-direction: column;
  text-align: center;
  box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.55);
}

#bottom-container>nav,
#bottom-container2>nav{
  background-color: rgb(250, 209, 14);
  display: none;
  flex: 1;
}

#bottom-container nav>ul,
#bottom-container2 nav>ul{
  list-style-type: none;
}

#bottom-container nav>ul>li,
#bottom-container2 nav>ul>li{
  position: relative;
}

#bottom-container nav>ul>li>a,
#bottom-container2 nav>ul>li>a{
  display: block;
  color: rgba(0, 0, 0, .65);
  padding: 1.3rem 0;
  text-decoration: none;
}

#bottom-container nav>ul>li>a span.toggle,
#bottom-container2 nav>ul>li>a span.toggle{
  background-color: rgba(0, 0, 0, .05);
  color: rgba(0, 0, 0, .25);
  padding: 2px 8px;
}

#bottom-container>nav>ul>li>nav,
#bottom-container2>nav>ul>li>nav{
  display: none;
  overflow: hidden;
  position: absolute;
  top:100%;
  right: 5%;
  width: 90%;
  z-index: 100;
  background-color: rgb(250, 250, 250);
  margin-bottom:10rem;
}

header>nav>ul>li>nav>ul>li>a {
  color: rgba(255, 255, 255, .85);
}

/*
/////////////////////////////////////////////////
/////////////////////////////////////////////////
////   THIS IS THE ONLY FIX I KNOW OF  //////////
*/
main{
  /*padding-top:5rem;*/
}
/*
////////////////////////////////////////////////
////////////////////////////////////////////////
*/

/* Medium screens */
@media all and (min-width: 751px) {
  header{
    overflow-y:visible;
    overflow-x:visible;
    padding-bottom:0;
  }

  #navToggle,
  #navToggle2{
    display: none;
  }

  #bottom-container,
  #bottom-container2{
    background-color: rgb(250, 209, 14);
    width: 100%;
    border-top: calc(5vh + 2vw) solid yellow;
  }

  #bottom-container>nav,
  #bottom-container2>nav{
    display: block;
  }

  #bottom-container>nav>ul,
  #bottom-container2>nav>ul{
    display: flex;
    justify-content: center;
    flex-direction: row;
    height: 3rem;
  }

  #bottom-container nav>ul>li,
  #bottom-container2 nav>ul>li{
    position: static;
    flex:1;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  #bottom-container nav>ul>li>a,
  #bottom-container2 nav>ul>li>a{
   padding: 0;
  }

  #bottom-container nav>ul>li>a span.toggle,
  #bottom-container2 nav>ul>li>a span.toggle{
    display: none;
  }

  #bottom-container >nav>ul>li>nav>ul>li,
  #bottom-container2 >nav>ul>li>nav>ul>li{
    line-height: 2.5rem;
  }
  #bottom-container>nav>ul>li>nav,
  #bottom-container2>nav>ul>li>nav{
    margin-top:-194.5rem;
  }
}
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<div id="head-wrap">
  <div id="second-wrap">
    <header>
      <div id="navToggle"><a href="#">Menu</a></div>
      <div id='bottom-container'>
        <nav>
          <ul>
            <li><a href="#">ITEM ONE</a></li>
            <li class="sub1">
              <a href="#">ITEM TWO <span class="toggle">Expand</span></a>
            <nav>
              <ul>
                <li><a href="#">Sub Item 1</a></li>
                <li><a href="#">Sub Item 2</a></li>
                <li><a href="#">Sub Item 3</a></li>
                <li><a href="#">Sub Item 4</a></li>
              </ul>
            </nav>
            <li><a href="#">ITEM THREE</a></li>
          </ul>
        </nav>
      </div>
    </header>
  </div>
</div>
<div id="hidden-wrap">
  <div id="second-wrap2">
    <header>
      <div id="navToggle2"><a href="#">Menu</a></div>
      <div id='bottom-container2'>
        <nav>
          <ul>
            <li><a href="#">ITEM ONE</a></li>
            <li class="sub1">
              <a href="#">ITEM TWO <span class="toggle">Expand</span></a>
            <nav>
              <ul>
                <li><a href="#">Sub Item 1</a></li>
                <li><a href="#">Sub Item 2</a></li>
                <li><a href="#">Sub Item 3</a></li>
                <li><a href="#">Sub Item 4</a></li>
              </ul>
            </nav>
            <li><a href="#">ITEM THREE</a></li>
            </li>
          </ul>
        </nav>
      </div>
    </header>
  </div>
</div>

<main>
  <p>now you can see this text</p>
  <p>line 1</p>
  <p>line 2</p>
  <p>line 3</p>
  <p>line 4</p>
  <p>line 5</p>
  <p>line 6</p>
  <p>line 7</p>
  <p>line 8</p>
  <p>line 9</p>
  <p>line 10</p>
    <p>line 11</p>
    <p>line 12</p>
    <p>line 13</p>
    <p>line 14</p>
    <p>line 15</p>
    <p>line 16</p>
    <p>line 17</p>
    <p>line 18</p>
    <p>line 19</p>
    <p>line 20</p>
</main>
</body>
</html>

编辑:我不知道为什么我以前没有想到这一点。只需将#headwrap&lt;main&gt; 设置为position: relative。然后,删除&lt;main&gt; 上的height 并将&lt;body&gt; 设置为display: flexflex-direction: column。最后,将&lt;main&gt; 的内容包装在&lt;div&gt; 中。

这里,我将 div 的高度设置为 4000px 来演示滚动。

$(document).ready(function() {
  $('#navToggle').click(function() {
    $("div#bottom-container > nav").slideToggle();
  });

  $(window).resize(function() {
      if(window.innerWidth >= "751") {
          $("header > div#bottom-container > nav").show();
      }else {
          $("header > div#bottom-container > nav").hide();
      }
  });

  $("header > div#bottom-container > nav > ul > li > a").click(function(e) {
     if (window.innerWidth <= "750") {
       if ($(this).siblings().size() > 0) {
         e.preventDefault();
         $(this).siblings().slideToggle("slow");
      }
    }
  });

   $("header > div#bottom-container > nav > ul > li").hover(function() {
        if (window.innerWidth >= "751") {
          if ($(this).children("nav").size() > 0) {
            $(this).children("nav").stop().show();
         }
       }
     },function(){
       if (window.innerWidth >= "751") {
         if ($(this).children("nav").size() > 0) {
           $(this).children("nav").hide();
        }
      }
  });
});
* {
  margin: 0;
}

@media (min-width: 48rem) {
  :root {
    font-size: calc(1rem + ((1vw - .48rem) * 1.389));
  }
}

body {
  background: #eee;
  font-family: "HelveticaNeue-Light", Arial;
  height: 100vh;
  display: flex;
  flex-direction: column;
}

#head-wrap{
    margin: 0 auto;
    position: relative;
    width:100%;
}

#second-wrap{
    position: relative;
    width:100%;
    z-index:999;
}

main{
  /*height:4000px;*/
  position:relative;
  overflow: auto;
  /* padding-top:13rem; */
}

main>div {
  height: 4000px;
}

header{
  position: relative;
  top:0;
  left:0;
  width:100%;
  overflow-x: hidden;
  overflow-y: auto;
  /*height:200rem;*/
}

#navToggle{
  background-color: rgba(0, 0, 0, .15);
  position: relative;
  right: 0;
  top: 0;
  z-index:999;
  height: 2.6rem;
}

#navToggle>a{
  color: rgba(255, 255, 255, .85);
  display: block;
  font-size: 0.85em;
  font-weight: 600;
  padding: 0 2.5rem;
  text-decoration: none;
  transition: all 300ms ease;
  padding-top:.9rem;
}

#bottom-container{
  display: flex;
  flex-direction: column;
  text-align: center;
  box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.55);
}

#bottom-container>nav{
  background-color: rgb(250, 209, 14);
  display: none;
  flex: 1;
}

#bottom-container nav>ul{
  list-style-type: none;
}

#bottom-container nav>ul>li{
  position: relative;
}

#bottom-container nav>ul>li>a{
  display: block;
  color: rgba(0, 0, 0, .65);
  padding: 1.3rem 0;
  text-decoration: none;
}

#bottom-container nav>ul>li>a span.toggle{
  background-color: rgba(0, 0, 0, .05);
  color: rgba(0, 0, 0, .25);
  padding: 2px 8px;
}

#bottom-container>nav>ul>li>nav{
  display: none;
  overflow: hidden;
  position: absolute;
  top:100%;
  right: 5%;
  width: 90%;
  z-index: 100;
  background-color: rgb(250, 250, 250);
  margin-bottom:10rem;
}

header>nav>ul>li>nav>ul>li>a {
  color: rgba(255, 255, 255, .85);
}

/*
/////////////////////////////////////////////////
/////////////////////////////////////////////////
////   THIS IS THE ONLY FIX I KNOW OF  //////////
*/
main{
  /*padding-top:5rem;*/
}
/*
////////////////////////////////////////////////
////////////////////////////////////////////////
*/

/* Medium screens */
@media all and (min-width: 751px) {
  header{
    overflow-y:visible;
    overflow-x:visible;
    padding-bottom:0;
  }

  #navToggle{
    display: none;
  }

  #bottom-container{
    background-color: rgb(250, 209, 14);
    width: 100%;
    border-top: calc(5vh + 2vw) solid yellow;
  }

  #bottom-container>nav{
    display: block;
  }

  #bottom-container>nav>ul{
    display: flex;
    justify-content: center;
    flex-direction: row;
    height: 3rem;
  }

  #bottom-container nav>ul>li{
    position: static;
    flex:1;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  #bottom-container nav>ul>li>a{
   padding: 0;
  }

  #bottom-container nav>ul>li>a span.toggle{
    display: none;
  }

  #bottom-container >nav>ul>li>nav>ul>li{
    line-height: 2.5rem;
  }
  #bottom-container>nav>ul>li>nav{
    margin-top:-194.5rem;
  }
}
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<div id="head-wrap">
  <div id="second-wrap">
    <header>
      <div id="navToggle"><a href="#">Menu</a></div>
      <div id='bottom-container'>
        <nav>
          <ul>
            <li><a href="#">ITEM ONE</a></li>
            <li class="sub1">
              <a href="#">ITEM TWO <span class="toggle">Expand</span></a>
            <nav>
              <ul>
                <li><a href="#">Sub Item 1</a></li>
                <li><a href="#">Sub Item 2</a></li>
                <li><a href="#">Sub Item 3</a></li>
                <li><a href="#">Sub Item 4</a></li>
              </ul>
            </nav>
            <li><a href="#">ITEM THREE</a></li>
          </ul>
        </nav>
      </div>
    </header>
  </div>
</div>


<main>
  <div>
  <p>now you can see this text</p>
  <p>line 1</p>
  <p>line 2</p>
  <p>line 3</p>
  <p>line 4</p>
  <p>line 5</p>
  <p>line 6</p>
  <p>line 7</p>
  <p>line 8</p>
  <p>line 9</p>
  <p>line 10</p>
    <p>line 11</p>
    <p>line 12</p>
    <p>line 13</p>
    <p>line 14</p>
    <p>line 15</p>
    <p>line 16</p>
    <p>line 17</p>
    <p>line 18</p>
    <p>line 19</p>
    <p>line 20</p>
    </div>
</main>
</body>
</html>

【讨论】:

  • 感谢您提供的创造性解决方案,但似乎是 Google 不太喜欢的代码。重复和隐藏的导航级别内容。我真的希望有一个我根本不知道的定位技巧,但我开始意识到 jQuery 解决方案是解决这个问题的最佳方法。我将保留赏金,只是看看是否有其他可用的解决方案。如果没有其他人站出来,我会将您的答案标记为正确。
  • @Austin 是的,很酷。我也有兴趣了解其他解决方案。
  • @Austin 我已经用更好的解决方案更新了我的答案。
【解决方案2】:

一个简单的修复,我在% 中使用padding 而不是rempx

$(document).ready(function() {
  $('#navToggle').click(function() {
    $("div#bottom-container > nav").slideToggle();
  });

  $(window).resize(function() {
    if (window.innerWidth >= "751") {
      $("header > div#bottom-container > nav").show();
    } else {
      $("header > div#bottom-container > nav").hide();
    }
  });

  $("header > div#bottom-container > nav > ul > li > a").click(function(e) {
    if (window.innerWidth <= "750") {
      if ($(this).siblings().size() > 0) {
        e.preventDefault();
        $(this).siblings().slideToggle("slow");
      }
    }
  });

  $("header > div#bottom-container > nav > ul > li").hover(function() {
    if (window.innerWidth >= "751") {
      if ($(this).children("nav").size() > 0) {
        $(this).children("nav").stop().show();
      }
    }
  }, function() {
    if (window.innerWidth >= "751") {
      if ($(this).children("nav").size() > 0) {
        $(this).children("nav").hide();
      }
    }
  });
});
* {
  margin: 0;
}

@media (min-width: 48rem) {
   :root {
    font-size: calc(1rem + ((1vw - .48rem) * 1.389));
  }
}

body {
  background: #eee;
  font-family: "HelveticaNeue-Light", Arial;
  height: auto !important;
}

#head-wrap {
  margin: 0 auto;
  position: relative;
  width: 100%;
}

#second-wrap {
  position: fixed;
  width: 100%;
  z-index: 999;
}

main {
  height: 4000px;
  position: relative;
  padding-top: 13rem;
}

header {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  overflow-x: hidden;
  overflow-y: auto;
  height: 200rem;
}

#navToggle {
  background-color: rgba(0, 0, 0, .15);
  position: relative;
  right: 0;
  top: 0;
  z-index: 999;
  height: 2.6rem;
}

#navToggle>a {
  color: rgba(255, 255, 255, .85);
  display: block;
  font-size: 0.85em;
  font-weight: 600;
  padding: 0 2.5rem;
  text-decoration: none;
  transition: all 300ms ease;
  padding-top: .9rem;
}

#bottom-container {
  display: flex;
  flex-direction: column;
  text-align: center;
  box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.55);
}

#bottom-container>nav {
  background-color: rgb(250, 209, 14);
  display: none;
  flex: 1;
}

#bottom-container nav>ul {
  list-style-type: none;
}

#bottom-container nav>ul>li {
  position: relative;
}

#bottom-container nav>ul>li>a {
  display: block;
  color: rgba(0, 0, 0, .65);
  padding: 1.3rem 0;
  text-decoration: none;
}

#bottom-container nav>ul>li>a span.toggle {
  background-color: rgba(0, 0, 0, .05);
  color: rgba(0, 0, 0, .25);
  padding: 2px 8px;
}

#bottom-container>nav>ul>li>nav {
  display: none;
  overflow: hidden;
  position: absolute;
  top: 100%;
  right: 5%;
  width: 90%;
  z-index: 100;
  background-color: rgb(250, 250, 250);
  margin-bottom: 10rem;
}

header>nav>ul>li>nav>ul>li>a {
  color: rgba(255, 255, 255, .85);
}


/*
/////////////////////////////////////////////////
/////////////////////////////////////////////////
////   Use padding in %  //////////
*/

main {
  padding-top: 11%;
}

@media (max-width:1200px) {
  main {
  padding-top: 12.5%;
}
}

@media (max-width:1023px) {
 main {
  padding-top: 14.5%;
}
}

@media (max-width:767px) {
  main {
  padding-top: 8%;
}
}


/*
////////////////////////////////////////////////
////////////////////////////////////////////////
*/


/* Medium screens */

@media all and (min-width: 751px) {
  header {
    overflow-y: visible;
    overflow-x: visible;
    padding-bottom: 0;
  }
  #navToggle {
    display: none;
  }
  #bottom-container {
    background-color: rgb(250, 209, 14);
    width: 100%;
    border-top: calc(5vh + 2vw) solid yellow;
  }
  #bottom-container>nav {
    display: block;
  }
  #bottom-container>nav>ul {
    display: flex;
    justify-content: center;
    flex-direction: row;
    height: 3rem;
  }
  #bottom-container nav>ul>li {
    position: static;
    flex: 1;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  #bottom-container nav>ul>li>a {
    padding: 0;
  }
  #bottom-container nav>ul>li>a span.toggle {
    display: none;
  }
  #bottom-container>nav>ul>li>nav>ul>li {
    line-height: 2.5rem;
  }
  #bottom-container>nav>ul>li>nav {
    margin-top: -194.5rem;
  }
}
<html>

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head>

<body>
  <div id="head-wrap">
    <div id="second-wrap">
      <header>
        <div id="navToggle"><a href="#">Menu</a></div>
        <div id='bottom-container'>
          <nav>
            <ul>
              <li><a href="#">ITEM ONE</a></li>
              <li class="sub1">
                <a href="#">ITEM TWO <span class="toggle">Expand</span></a>
                <nav>
                  <ul>
                    <li><a href="#">Sub Item 1</a></li>
                    <li><a href="#">Sub Item 2</a></li>
                    <li><a href="#">Sub Item 3</a></li>
                    <li><a href="#">Sub Item 4</a></li>
                  </ul>
                </nav>
                <li><a href="#">ITEM THREE</a></li>
            </ul>
          </nav>
        </div>
      </header>
    </div>
  </div>

  <main>
    <p>content top not visible but should be able to see</P>
    <p>line 1</P>
    <p>line 2</P>
    <p>line 3</P>
    <p>line 4</P>
    <p>line 5</P>
    <p>line 6</P>
    <p>line 7</P>
    <p>line 8</P>
    <p>line 9</P>
    <p>line 10</P>
    <p>line 11</P>
    <p>line 12</P>
    <p>line 13</P>
    <p>line 14</P>
    <p>line 15</P>
    <p>line 16</P>
    <p>line 17</P>
    <p>line 18</P>
    <p>line 19</P>
    <p>line 20</P>
  </main>
</body>

</html>

【讨论】:

  • 如果窗口大约 900px 宽,顶行仍然会被截断。
  • @thingEvery 使用media-quires 更新了我的ans,现在我无法调整填充,它工作正常,请检查并告诉我
  • 这样会更好,但在 751px 和 767px 之间仍有一些文本会被截断。另外,OP 表示“当在
    中放置几个​​使用相对或基于百分比的高度的元素时,顶部填充的想法会变得更糟。”我可能只是走 jQuery 路线,但除此之外,创建一堆媒体查询可能是他唯一真正的选择——只要他的标题中的元素不会改变。
  • 我刚刚创建了主要由设备使用的查询,他可以相应地更改它或在 700 到 767 之间再使用一个查询。n 秒我同意你的观点,通常标题应该是固定的高度和到期我们有很多选项可以正确纠正内容的位置,否则 Jquery 是您提到的唯一可以使用的选项......
【解决方案3】:

您不是在寻找 position: sticky; top: 0; 吗?当用户向右滚动时,您想拥有跟随用户的菜单吗?然后尝试将 #bottom-container 更改为:

#bottom-container {
  display: flex;
  flex-direction: column;
  text-align: center;
  box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.55);
  position: sticky;
  top: 0;
  z-index: 1; 
}

我想就是这样。但可以肯定的是——你需要重新思考你是如何创建所有这些结构的,因为它非常混乱。您可以通过以下方式获得相同的结果:

html:

<header>
    <nav id="mobileMenu"><a href="#">Menu</a></nav>
    <nav id='menu'>
      <div class="menuItem">
        <a href="#">ITEM ONE</a>
      </div>
      <div class="bigMenuItem">
        HOVER ME
        <div class="menuItemsCon">
          <div class="menuItem"><a href="#">Sub Item 1</a></div>
          <div class="menuItem"><a href="#">Sub Item 2</a></div>
          <div class="menuItem"><a href="#">Sub Item 3</a></div>
          <div class="menuItem"><a href="#">Sub Item 4</a></div>
        </div>
      </div>
      <label class="bigMenuItem" for="inputClick">
        CLICK ME
        <input type="checkbox" name="input" id="inputClick" style="display:none;">
        <div class="menuItemsCon click">
          <div class="menuItem"><a href="#">Sub Item 1</a></div>
          <div class="menuItem"><a href="#">Sub Item 2</a></div>
          <div class="menuItem"><a href="#">Sub Item 3</a></div>
          <div class="menuItem"><a href="#">Sub Item 4</a></div>
        </div>
      </label>
    </nav>
  </header>

  <main>
    <p>content top not visible but should be able to see</P>
    <p>line 1</P>
    <p>line 2</P>
    <p>line 3</P>
    <p>line 4</P>
    <p>line 5</P>
    <p>line 6</P>
    <p>line 7</P>
    <p>line 8</P>
    <p>line 9</P>
    <p>line 10</P>
  </main>

style.css:

* {
  margin: 0;
}

@media (min-width: 48rem) {
  :root {
    font-size: calc(1rem + ((1vw - .48rem) * 1.389));
  }
}

body {
  background: #eee;
  font-family: "HelveticaNeue-Light", Arial;
  height: auto !important;
}
main{
  height:100vh;
  position:relative;
}

/*Changed classes*/

header{
  position: sticky;
  top:0;
  z-index: 1;
}

a{
  display: block;
  color: rgba(0, 0, 0, .65);
  text-decoration: none;
  width: 100%;
  height: 100%;
}

#mobileMenu{
  display: none;
  background-color: rgba(0, 0, 0, .15);
  height: 2.6rem
}

#mobileMenu a{
  color:rgba(255, 255, 255, .85);
  display: block;
  font-size: 0.85em;
  font-weight: 600;
  padding: 0 2.5rem;
  text-decoration: none;
  transition: all 300ms ease;
  padding-top: .9rem;
}

#menu{
  background-color: rgb(250, 209, 14);
  border-top: calc(5vh + 2vw) solid yellow;
  display: flex;
  z-index: 999;
  box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.55);
}

@media only screen and (max-width:751px) {
  #mobileMenu{
    display: block;
  }
  #menu{
    display: none;
  }
}

#menu > .menuItem, #menu > .bigMenuItem{
  width: calc(100%/3);
  height: 3rem;
  text-align: center;
  line-height: 3rem;
}

#menu > .bigMenuItem{
  position: relative;
  cursor: pointer;
}

#menu > .bigMenuItem .menuItemsCon{
  position: absolute;
  top: 100%;
  left: 0;
  width: 100%;
  z-index: -1;
  opacity: 0;
  position: relative;
  top: -100vh;
  transition: all .5s;
}


#menu > .bigMenuItem .menuItemsCon > .menuItem{
  height: 3rem;
  background-color: #FFF;
}

/* and if you want to click for submenu to show*/
#menu  .bigMenuItem input:checked + .menuItemsCon, #menu  .bigMenuItem:hover .menuItemsCon:not(.click){
  opacity: 1;
  top: 0;
}

如果您不必使用它,则没有 JS cuz。我希望这会有所帮助。

【讨论】:

    【解决方案4】:

    请移除 header 元素的前两个 div 容器,因为不需要包装 header。 header 元素已经是容器。

    请删除标题样式中的height:200rem; 和主元素样式中的padding-top: 13rem or 5rem

    最后,请将标题样式的位置属性更新为sticky,而不是absolute,并添加z-index。

    下面,我已经对其进行了测试并更新了代码库。

    $(document).ready(function() {
      $('#navToggle').click(function() {
        $("div#bottom-container > nav").slideToggle();
      });
    
      $(window).resize(function() {
          if(window.innerWidth >= "751") {
              $("header > div#bottom-container > nav").show();
          }else {
              $("header > div#bottom-container > nav").hide();
          }
      });
    
      $("header > div#bottom-container > nav > ul > li > a").click(function(e) {
         if (window.innerWidth <= "750") {
           if ($(this).siblings().size() > 0) {
             e.preventDefault();
             $(this).siblings().slideToggle("slow");
          }
        }
      });
    
       $("header > div#bottom-container > nav > ul > li").hover(function() {
            if (window.innerWidth >= "751") {
              if ($(this).children("nav").size() > 0) {
                $(this).children("nav").stop().show();
             }
           }
         },function(){
           if (window.innerWidth >= "751") {
             if ($(this).children("nav").size() > 0) {
               $(this).children("nav").hide();
            }
          }
      });
    });
    * {
      margin: 0;
    }
    
    @media (min-width: 48rem) {
      :root {
        font-size: calc(1rem + ((1vw - .48rem) * 1.389));
      }
    }
    
    body {
      background: #eee;
      font-family: "HelveticaNeue-Light", Arial;
      height: auto !important;
    }
    
    main{
      height:4000px;
      position:relative;
    }
    
    header{
      position: sticky;
      z-index: 100;
      top:0;
      left:0;
      width:100%;
    }
    
    #navToggle {
      background-color: rgba(0, 0, 0, .15);
      position: relative;
      right: 0;
      top: 0;
      z-index:999;
      height: 2.6rem;
    }
    
    #navToggle>a {
      color: rgba(255, 255, 255, .85);
      display: block;
      font-size: 0.85em;
      font-weight: 600;
      padding: 0 2.5rem;
      text-decoration: none;
      transition: all 300ms ease;
      padding-top:.9rem;
    }
    
    #bottom-container {
      display: flex;
      flex-direction: column;
      text-align: center;
      box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.55);
    }
    
    #bottom-container>nav {
      background-color: rgb(250, 209, 14);
      display: none;
      flex: 1;
    }
    
    #bottom-container nav>ul {
      list-style-type: none;
    }
    
    #bottom-container nav>ul>li {
      position: relative;
    }
    
    #bottom-container nav>ul>li>a {
      display: block;
      color: rgba(0, 0, 0, .65);
      padding: 1.3rem 0;
      text-decoration: none;
    }
    
    #bottom-container nav>ul>li>a span.toggle {
      background-color: rgba(0, 0, 0, .05);
      color: rgba(0, 0, 0, .25);
      padding: 2px 8px;
    }
    
    #bottom-container>nav>ul>li>nav {
      display: none;
      overflow: hidden;
      position: absolute;
      top:100%;
      right: 5%;
      width: 90%;
      z-index: 100;
      background-color: rgb(250, 250, 250);
      margin-bottom:10rem;
    }
    
    header>nav>ul>li>nav>ul>li>a {
      color: rgba(255, 255, 255, .85);
    }
    
    /*
    /////////////////////////////////////////////////
    /////////////////////////////////////////////////
    ////   THIS IS THE ONLY FIX I KNOW OF  //////////
    */
    main{
      /* remove padding top */
    }
    /*
    ////////////////////////////////////////////////
    ////////////////////////////////////////////////
    */
    
    /* Medium screens */
    @media all and (min-width: 751px) {
      header{
        overflow-y:visible;
        overflow-x:visible;
        padding-bottom:0;
      }
    
      #navToggle {
        display: none;
      }
    
      #bottom-container {
        background-color: rgb(250, 209, 14);
        width: 100%;
        border-top: calc(5vh + 2vw) solid yellow;
      }
    
      #bottom-container>nav {
        display: block;
      }
    
      #bottom-container>nav>ul {
        display: flex;
        justify-content: center;
        flex-direction: row;
        height: 3rem;
      }
    
      #bottom-container nav>ul>li {
        position: static;
        flex:1;
        display: flex;
        justify-content: center;
        align-items: center;
      }
    
      #bottom-container nav>ul>li>a {
       padding: 0;
      }
    
      #bottom-container nav>ul>li>a span.toggle {
        display: none;
      }
    
      #bottom-container >nav>ul>li>nav>ul>li{
        line-height: 2.5rem;
      }
      #bottom-container>nav>ul>li>nav {
        margin-top:-194.5rem;
      }
    <html>
    <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    </head>
    <body>
    
      <header>
        <div id="navToggle"><a href="#">Menu</a></div>
        <div id='bottom-container'>
          <nav>
            <ul>
              <li><a href="#">ITEM ONE</a></li>
              <li class="sub1">
                <a href="#">ITEM TWO <span class="toggle">Expand</span></a>
              <nav>
                <ul>
                  <li><a href="#">Sub Item 1</a></li>
                  <li><a href="#">Sub Item 2</a></li>
                  <li><a href="#">Sub Item 3</a></li>
                  <li><a href="#">Sub Item 4</a></li>
                </ul>
              </nav>
              <li><a href="#">ITEM THREE</a></li>
            </ul>
          </nav>
        </div>
      </header>
    
      <main>
        <p>content top not visible but should be able to see</P>
        <p>line 1</P>
        <p>line 2</P>
        <p>line 3</P>
        <p>line 4</P>
        <p>line 5</P>
        <p>line 6</P>
        <p>line 7</P>
        <p>line 8</P>
        <p>line 9</P>
        <p>line 10</P>
          <p>line 11</P>
          <p>line 12</P>
          <p>line 13</P>
          <p>line 14</P>
          <p>line 15</P>
          <p>line 16</P>
          <p>line 17</P>
          <p>line 18</P>
          <p>line 19</P>
          <p>line 20</P>
      </main>
    </body>
    </html>
     Run code snippet

    【讨论】:

    • 在小屏幕上,当页眉为灰色时,主要内容滚动到页眉前面。
    • 因为在标题的 navToggle 元素中设置了背景不透明度。要修复它,您可以删除该不透明度。
    【解决方案5】:

    我得到了相同的结果(如果我错了,请纠正我),但没有 js。看起来,下面的内容考虑了任何标题高度。

    主要思想 - 不包裹&lt;header&gt; 并申请position: stickyz-index 也没有必要。

    我没有完全使用您的代码,但尝试重复结果。希望您能找到一些有用的想法来解决您的问题。

    屏幕宽度较小时的一些答案代码并切换菜单,它会下推主要内容。我的代码不包含该问题。

    * {
        margin: 0;
    }
      
    @media (min-width: 48rem) {
        :root {
            font-size: calc(1rem + ((1vw - .48rem) * 1.389));
        }
    }
      
    body {
        background: #eee;
        font-family: "HelveticaNeue-Light", Arial;
        height: auto !important;
     }
    
    header {
        width: 100%;
        position: sticky;
        top: 0;
        box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.55);
    }
    
    .wrapper {
        position: relative;
        background-color: rgba(0, 0, 0, .15);
    }
    
    #navToggle {
        display: inline-block;
        height: 2.6rem;
    }
    
    #navToggle > a {
        color: rgba(255, 255, 255, .85);
        display: block;
        font-size: 0.85em;
        font-weight: 600;
        padding: 0 2.5rem;
        text-decoration: none;
        transition: all 300ms ease;
        padding-top: .9rem;
    }
    
    #navToggle:hover + #bottom-container, #bottom-container:hover  {
        visibility: visible;
        opacity: 1;
        transition: all 0.2s ease-in-out;
    }
    
    #bottom-container {
        background-color: rgb(250, 209, 14);
        width: 100%;
        visibility: hidden;
        opacity: 0;
        position: absolute;
        top: 100%;
        left: 0;
    }
    
    #bottom-container > nav  ul {
        margin: 0;
        padding: 0;
        list-style-type: none;
    }
    
    #bottom-container > nav > ul {
        display: flex;
        flex-direction: column;
        flex: 1;
        align-items: center;
    }
    
    #bottom-container > nav > ul li {
        display: flex;
        justify-content: center;
        width: 100%;
    
    }
    
    #bottom-container nav > ul > li > a {
        display: block;
        color: rgba(0, 0, 0, .65);
        padding: 1.3rem 0;
        text-decoration: none;
    }
    
    .sub1 {
        position: relative;
    }
    
    .sub1 > nav {
        position: absolute;
        top: 100%;
        left: 0;
        visibility: hidden;
        opacity: 0;
        background-color: rgb(250, 250, 250);
        width: 100%;
        transition: all 0.2s ease-in-out;
    }
    
    .sub1 > nav ul li {
        text-align: center;
    }
    
    .sub1 > a:hover + nav, .sub1 > a + nav:hover {
        visibility: visible;
        opacity: 1;
        transition: all 0.2s ease-in-out;
    }
    
    #bottom-container nav>ul>li>a span.toggle {
        background-color: rgba(0, 0, 0, .05);
        color: rgba(0, 0, 0, .25);
        padding: 2px 8px;
    }
    
    main {
        height:4000px;
    }
    
    @media (min-width: 751px){
        #bottom-container > nav > ul {
            flex-direction: row;
            height: 3rem;
        }
        
        #bottom-container nav>ul>li>a span.toggle {
            display: none;
        }
        
        #bottom-container {
            height: 100%;
            border-top: calc(5vh + 2vw) solid yellow;
            visibility: visible;
            opacity: 1;
            position: static;
        }
    
        #navToggle {
            display: none;
        }
    }
    <!doctype html>
    
    <html lang="en">
    
    <head>
        <meta charset="utf-8">
    
        <title></title>
    
        <link rel="stylesheet" href="styles.css">
    
    </head>
    
    <body>
        <header>
            <div class="wrapper">
                <div id="navToggle"><a href="#">Menu</a></div>
                <div id='bottom-container'>
                    <nav>
                        <ul>
                            <li><a href="#">ITEM ONE</a></li>
                            <li class="sub1">
                                <a href="#">ITEM TWO <span class="toggle">Expand</span></a>
                                <nav>
                                    <ul>
                                        <li><a href="#">Sub Item 1</a></li>
                                        <li><a href="#">Sub Item 2</a></li>
                                        <li><a href="#">Sub Item 3</a></li>
                                        <li><a href="#">Sub Item 4</a></li>
                                    </ul>
                                </nav>
                            <li><a href="#">ITEM THREE</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
            
        </header>
    
    
        <main>
            <p>content top not visible but should be able to see</P>
            <p>line 1</P>
            <p>line 2</P>
            <p>line 3</P>
            <p>line 4</P>
            <p>line 5</P>
            <p>line 6</P>
            <p>line 7</P>
            <p>line 8</P>
            <p>line 9</P>
            <p>line 10</P>
            <p>line 11</P>
            <p>line 12</P>
            <p>line 13</P>
            <p>line 14</P>
            <p>line 15</P>
            <p>line 16</P>
            <p>line 17</P>
            <p>line 18</P>
            <p>line 19</P>
            <p>line 20</P>
        </main>
    </body>
    
    </html>

    【讨论】:

    • 在小屏幕上,当header为灰色时,主要内容滚动到header前面。
    • @thingEvery 这是因为背景颜色中的 alpha 通道:rgba(0, 0, 0, .15);我从作者的代码中取色
    【解决方案6】:

    我可以为您提供 Vanilla-JavaScript 而不是 jQuery……

    尝试在页面加载时(onload事件)获取“header”的大小并将其添加到“main”的padding中:

    window.addEventListener("load", function(e){
      my_main.style.paddingTop = my_header.clientHeight + "px";
    }, 1);
    

    为了工作,我给“header”和“main”元素赋予了一个“id”:

    <header id="my_header"> <main id="my_main">
    

    window.addEventListener("load", function(e){
      my_main.style.paddingTop = my_header.clientHeight + "px";
    }, 1);
    * {
        margin: 0;
    }
      
    @media (min-width: 48rem) {
        :root {
            font-size: calc(1rem + ((1vw - .48rem) * 1.389));
        }
    }
      
    body {
        background: #eee;
        font-family: "HelveticaNeue-Light", Arial;
        height: auto !important;
     }
    
    header {
        width: 100%;
        position: sticky;
        top: 0;
        box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.55);
    }
    
    .wrapper {
        position: relative;
        background-color: rgba(0, 0, 0, .15);
    }
    
    #navToggle {
        display: inline-block;
        height: 2.6rem;
    }
    
    #navToggle > a {
        color: rgba(255, 255, 255, .85);
        display: block;
        font-size: 0.85em;
        font-weight: 600;
        padding: 0 2.5rem;
        text-decoration: none;
        transition: all 300ms ease;
        padding-top: .9rem;
    }
    
    #navToggle:hover + #bottom-container, #bottom-container:hover  {
        visibility: visible;
        opacity: 1;
        transition: all 0.2s ease-in-out;
    }
    
    #bottom-container {
        background-color: rgb(250, 209, 14);
        width: 100%;
        visibility: hidden;
        opacity: 0;
        position: absolute;
        top: 100%;
        left: 0;
    }
    
    #bottom-container > nav  ul {
        margin: 0;
        padding: 0;
        list-style-type: none;
    }
    
    #bottom-container > nav > ul {
        display: flex;
        flex-direction: column;
        flex: 1;
        align-items: center;
    }
    
    #bottom-container > nav > ul li {
        display: flex;
        justify-content: center;
        width: 100%;
    
    }
    
    #bottom-container nav > ul > li > a {
        display: block;
        color: rgba(0, 0, 0, .65);
        padding: 1.3rem 0;
        text-decoration: none;
    }
    
    .sub1 {
        position: relative;
    }
    
    .sub1 > nav {
        position: absolute;
        top: 100%;
        left: 0;
        visibility: hidden;
        opacity: 0;
        background-color: rgb(250, 250, 250);
        width: 100%;
        transition: all 0.2s ease-in-out;
    }
    
    .sub1 > nav ul li {
        text-align: center;
    }
    
    .sub1 > a:hover + nav, .sub1 > a + nav:hover {
        visibility: visible;
        opacity: 1;
        transition: all 0.2s ease-in-out;
    }
    
    #bottom-container nav>ul>li>a span.toggle {
        background-color: rgba(0, 0, 0, .05);
        color: rgba(0, 0, 0, .25);
        padding: 2px 8px;
    }
    
    main {
        height:4000px;
    }
    
    @media (min-width: 751px){
        #bottom-container > nav > ul {
            flex-direction: row;
            height: 3rem;
        }
        
        #bottom-container nav>ul>li>a span.toggle {
            display: none;
        }
        
        #bottom-container {
            height: 100%;
            border-top: calc(5vh + 2vw) solid yellow;
            visibility: visible;
            opacity: 1;
            position: static;
        }
    
        #navToggle {
            display: none;
        }
    }
    <!doctype html>
    
    <html lang="en">
    
    <head>
        <meta charset="utf-8">
    
        <title></title>
    
        <link rel="stylesheet" href="styles.css">
    
    </head>
    
    <body>
        <header id="my_header">
            <div class="wrapper">
                <div id="navToggle"><a href="#">Menu</a></div>
                <div id='bottom-container'>
                    <nav>
                        <ul>
                            <li><a href="#">ITEM ONE</a></li>
                            <li class="sub1">
                                <a href="#">ITEM TWO <span class="toggle">Expand</span></a>
                                <nav>
                                    <ul>
                                        <li><a href="#">Sub Item 1</a></li>
                                        <li><a href="#">Sub Item 2</a></li>
                                        <li><a href="#">Sub Item 3</a></li>
                                        <li><a href="#">Sub Item 4</a></li>
                                    </ul>
                                </nav>
                            <li><a href="#">ITEM THREE</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
            
        </header>
    
    
        <main id="my_main">
            <p>content top not visible but should be able to see</P>
            <p>line 1</P>
            <p>line 2</P>
            <p>line 3</P>
            <p>line 4</P>
            <p>line 5</P>
            <p>line 6</P>
            <p>line 7</P>
            <p>line 8</P>
            <p>line 9</P>
            <p>line 10</P>
            <p>line 11</P>
            <p>line 12</P>
            <p>line 13</P>
            <p>line 14</P>
            <p>line 15</P>
            <p>line 16</P>
            <p>line 17</P>
            <p>line 18</P>
            <p>line 19</P>
            <p>line 20</P>
        </main>
    </body>
    
    </html>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      相关资源
      最近更新 更多