【发布时间】:2018-03-22 09:25:25
【问题描述】:
我想在幻灯片和导航栏之间共享页面的初始可见区域,如下图所示,然后当您向下滚动文档时,该区域将停留在顶部。这是我遇到问题的地方。
我已经尝试为我的幻灯片做类似height: 90vh 和我的导航栏的height: 10vh 但我希望网站是动态的并且能够适应大多数分辨率,直到你达到手机级别或至少像 200% 缩放在 Microsoft 边缘,其中将使用另一个样式表。
我也尝试将它们放在同一个 div 中,将 height: 90% 设置为幻灯片,height: auto 设置为导航栏。这在动态性方面效果最好,但position: sticky 显然不起作用,因为它只遍历父 div 的高度。
最好的方法是将幻灯片高度设置为height: 90vh,并允许导航栏相应地移动。它有点工作,但对我来说还不够好。
导航栏必须最初位于底部,然后粘在顶部。如果可能的话,我宁愿有一个纯粹的 CSS 解决方案,但我对 javascript 持开放态度。虽然我宁愿使用纯 javascript 而不是 jQuery,但如果解释得很好,我可以接受。
实际问题是:如何让导航栏和幻灯片动态共享初始可见高度?
以下是所有相关代码:
#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)">❮</a>
<a class="next" onclick="plusSlides(1)">❯</a>
<div class="dot-base">
<span class="dot" onclick="currentSlide(1)">᛫</span>
<span class="dot" onclick="currentSlide(2)">᛫</span>
<span class="dot" onclick="currentSlide(3)">᛫</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>
【问题讨论】:
-
flex 是你的朋友
-
你可以试试 CSS-Grid。
-
@gavgrif 你们会推荐哪一个?我只会将两者中的一个用于文档的第一部分,如果我确实返回它,我对它们的使用将非常少。你们也可以给我一个关于我将如何去做的事情吗?
-
@WaleedIqbal 见上面的评论 :)
-
如果您的项目将来很可能扩展,那么 IMO,请使用 CSS-Grid。如果它可能保持原样,请使用 FlexBox。
标签: javascript html css