javascript - div 和位置之间共享 100vh :sticky navbar

标签 javascript html css

我想在幻灯片和导航栏之间共享页面的初始可见区域,如下图所示,当您向下滚动文档时,该区域将粘在顶部。这就是我遇到问题的地方。

我尝试过为我的幻灯片设置 height: 90vh 和为我的导航栏设置 height: 10vh,但我希望网站是动态的并且能够适应大多数分辨率,直到您达到手机级别或至少像 Microsoft Edge 上的 200% 缩放一样,其中将使用另一个样式表。

我还尝试将它们放在同一个 div 中,为幻灯片设置 height: 90% ,为导航栏设置 height: auto 。这在动态性方面效果最好,但 position: Sticky 显然不起作用,因为它只遍历父 div 的高度。

最有效的方法是将幻灯片高度设置为 height: 90vh 并允许导航栏相应移动。它有点有效,但对我来说还不够好。

导航栏必须最初位于底部,然后粘在顶部。如果可能的话,我宁愿有一个纯粹的 CSS 解决方案,但我对 javascript 持开放态度。虽然我宁愿使用纯 javascript 而不是 jQuery,但如果它解释得很好,我就同意了。

This is a diagram of what I'm trying to do

实际问题是:如何使我的导航栏和幻灯片动态共享初始可见高度?

这是所有相关代码:

        #container {
        display: flex;
        flex-direction: column;
        height: 100vh;
    }
    .slideshow-base {
        flex-grow: 1;
        width: 100%;
        margin: 0px;
    }
    .slideshow-container {
        height: 100%;
        width: 100%;
        position: relative;
        overflow: hidden;
    }
    .Slides {
        position: absolute;
        transform: translateX(-100%);
        transition: transform 2s;
        display: inline-block;
        width: 100%;
        height: 100%;
        margin: 0;
    }
    .Slides-Images {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    .navbar-base {
        font-weight: bold;
        z-index: 2;
        font-variant: small-caps;
        height: 100%;
        width: auto;
        top: 0px;
        background-color: rgba(50, 64, 147, 0.9);
        display: block;
        border-bottom: 1px solid rgb(226, 208, 0);
    }
        <div id="container"> 
        <!--Slideshow-->
        <div class="slideshow-base" style="background-color: rgb(50, 64, 147); height: 90vh">
          <div class="slideshow-container">
    
            <div class="Slides">
              <img src="~/Images/Slideshow/Gallery-1.jpg" class="Slides-Images">
            </div>
    
            <div class="Slides">
              <img src="~/Images/Slideshow/Gallery-2.jpg" class="Slides-Images">
            </div>
    
            <div class="Slides">
              <img src="~/Images/Slideshow/Gallery-3.jpg" class="Slides-Images">
            </div>
    
            <a class="prev" onclick="plusSlides(-1)">&#10094;</a>
            <a class="next" onclick="plusSlides(1)">&#10095;</a>
    
            <div class="dot-base">
              <span class="dot" onclick="currentSlide(1)">&#5867;</span>
              <span class="dot" onclick="currentSlide(2)">&#5867;</span>
              <span class="dot" onclick="currentSlide(3)">&#5867;</span>
            </div>
          </div>
        </div>
    
        <hr />
    
        <!--Sticky Navbar-->
        <div class="navbar-base" style="width: 100%; height: auto; position: sticky;">
          <ul>
            <li class="navbar-button" style="display: inline-block;"> @Html.ActionLink("main page", "MainPage", "Home") </li>
            <li class="navbar-button" style="display: inline-block;">
              @Html.ActionLink("about", "About", "About")
              <ul class="navbar-ddmenu">
                <li class="navbar-ddcontent" style="display: inline-block;">@Html.ActionLink("academy", "Academy", "About")</li>
                <li class="navbar-ddcontent" style="display: inline-block;">@Html.ActionLink("the club", "DKClub", "About")</li>
                <li class="navbar-ddcontent" style="display: inline-block;">@Html.ActionLink("taebo", "TaeBo", "About")</li>
                <li class="navbar-ddcontent" style="display: inline-block;">@Html.ActionLink("founders and staff", "Staff", "About")</li>
              </ul>
            </li>
            <li class="navbar-button" style="float:right"> @Html.ActionLink("contacts", "Contacts")</li>
            <li class="navbar-button" style="float:right"> @Html.ActionLink("gallery", "Gallery")</li>
            <li class="navbar-button" style="float:right"> @Html.ActionLink("shop dk", "Index", "Shop")</li>
          </ul>
        </div>
     </div>

最佳答案

使用 CSS 网格

body {
  margin: 0;
}

#container {
  width: 100vw;
  background: #ccc;
  padding: 10px;
  height: 100vh;
  display: grid;
  grid-template-rows: 90vh 10vh;
  grid-gap: 10px;
}

#container>div {
  background: #999;
}
<section id="container">
  <div>Sticky</div>
  <div>NavBar</div>
</section>

关于javascript - div 和位置之间共享 100vh :sticky navbar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49424866/

相关文章:

jquery - 菜单链接在 iPad 上无法正常工作

javascript - 使用 AngularJS 将玩家添加到列表中

javascript - 更改字符/字体内的颜色

html - 当 <body> 设置为 90% margin 0 auto 时,如何使 <div> 水平跨越视口(viewport)?

html - 将选定的选项卡设置为向下以隐藏边框

javascript - Angular 2如何从innerHTML执行脚本标签

javascript - .attr 与 D3.js 中的 .classed

javascript - 在 node.js 中,为什么会有一个 util.isArray 和一个 Array.isArray?

javascript - 谷歌地图和 GeoJSon : latitude and longitude conversion

html - 多个单词在绝对定位元素上中断