如何让图像在导航栏后面滚动
How to get image to scroll behind navbar
我有一个导航栏固定在顶部的网页,页面的其余部分应该在导航栏下方向上滚动。大多数元素确实在它后面滚动。三个图像并排显示。两个外部图像(img 1 和 img 3)按应有的方式在导航栏下方滚动,但中央图像(img 2)不会。它在导航栏上方滚动。我认为这与它是绝对位置有关,但我怎样才能让这幅图像表现得像页面上的其他所有图像一样?如果我删除绝对位置,图像将不再与其他图像对齐。如果我添加一个 1 的 z-index,它仍然会越过导航栏,尽管导航栏的 z-index 为 300。如果我给图像一个 z-index 为 -1,它就会完全消失。我已尝试将不同的 z-index 值添加到不同的元素,但找不到有效的组合。
这是我的相关 css:
.navigate{
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
}
.toggle,
[id^=drop] {
display: none;
}
nav {
margin:0;
padding: 0;
background-color: #ffffff;
z-index: 300;
}
nav:after {
content:"";
display:table;
clear:both;
}
.container{
width: 100%;
margin-top: 70px;
}
.spread1{
display: inline-block;
width: 100%;
padding: 20px 0px;
background-color: #0555bd;
color: #ffffff;
}
.imgHolder{
width:60%;
margin: auto;
}
.img1{
display: block;
width: 27%;
left: 0;
right: 0 ;
float: left;
}
.img2{
position: absolute;
width: 25%;
display: block;
left: 0;
right: 0;
margin: 0 auto;
}
.img3{
width: 27%;
display: block;
left: 0;
right: 0 ;
float: right;
}
这里是 HTML:
<div class="navigate">
<nav>
<div id="logo"><img src="images/logo.png" alt="AMD logo"></div>
<label for="drop" class="toggle">Menu</label>
<input type="checkbox" id="drop" />
<ul class="menu">
<li><a href="index.php">Home</a></li>
<li> <a href="about.php">About</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</nav>
</div>
<div class="container">
<div class="spread1">
<div class="imgHolder">
<img class="img1" src="images/image1.jpg" alt="img1" />
<img class="img2" src="images/image2.jpg" alt="img 2" />
<img class="img3" src="images/image3" alt="img 3" />
</div>
</div>
</div>
您必须上树并找到 <nav>
的祖先是 img2
的祖先的同级。然后将更高的 z-index
值应用到 <nav>
的祖先,它恰好是 div.navigate
,现在有 z-index:300
。请参阅下面的演示。
.navigate{
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
/* FIX */
z-index:300;
}
此外,我不得不向 .spread1
添加 2 个规则集,因为 OP 没有滚动。这 2 个更改不是解决方案的要求,只是为了演示图像在 <nav>
下滚动
.spread1{
display: inline-block;
width: 100%;
padding: 20px 0px;
background-color: #0555bd;
color: #ffffff;
/* Added to test scroll */
overflow-y:scroll;
height:100vh;
}
演示
.navigate{
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
/* FIX */
z-index:300;
}
.toggle,
[id^=drop] {
display: none;
}
nav {
margin:0;
padding: 0;
background-color: #ffffff;
z-index: 300;
}
nav:after {
content:"";
display:table;
clear:both;
}
.container{
width: 100%;
margin-top: 70px;
}
.spread1{
display: inline-block;
width: 100%;
padding: 20px 0px;
background-color: #0555bd;
color: #ffffff;
/* Added to test scroll */
overflow-y:scroll;
height:100vh;
}
.imgHolder{
width:60%;
margin: auto;
}
.img1{
display: block;
width: 27%;
left: 0;
right: 0 ;
float: left;
}
.img2{
position: absolute;
width: 25%;
display: block;
left: 0;
right: 0;
margin: 0 auto;
}
.img3{
width: 27%;
display: block;
left: 0;
right: 0 ;
float: right;
}
<div class="navigate">
<nav>
<div id="logo"><img src="images/logo.png" alt="AMD logo"></div>
<label for="drop" class="toggle">Menu</label>
<input type="checkbox" id="drop" />
<ul class="menu">
<li><a href="index.php">Home</a></li>
<li> <a href="about.php">About</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</nav>
</div>
<div class="container">
<div class="spread1">
<div class="imgHolder">
<img class="img1" src="http://placehold.it/50x50/000/fff?text=1'" alt="img1" />
<img class="img2" src='http://placehold.it/50x50/0ff/000?text=2' alt="img 2" />
<img class="img3" src="http://placehold.it/50x50/83d800/000?text=3" alt="img 3" />
</div>
</div>
</div>
因为你的 navigate
class 和 container
class 在同一个 "level" 上,你应该在那里应用你的 z-indexing。有些项目会出现在您的菜单上方是因为 position: absolute
并且在 navigate
class 上应用您的 z-index
将修复它。
.navigate{
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
z-index: 300;
}
你曾经为 CSS 使用过 flexbox 吗?它使在页面上定位和对齐元素变得容易得多。
当我解决对齐问题时,我的第一步通常是删除不需要的元素。你似乎有很多 div。我知道您可能没有发布所有代码来说明为什么这些嵌套 div 可能与您的项目相关,但为了我的回答,我将它们取出或更新它们以添加 HTML5 元素,例如 header
.
Flexbox 提供了一种在容器中动态布局元素的方法。如需深入了解 description/tutorial,请查看此 here。
您希望将 imgHolder 元素设置为 display: flex
,并将子图像设置为 flex: 1
。这将使它们更接近您想要的位置,而不会混合绝对定位和浮动。浮动实际上只应该与 text/img 位置一起使用(尽管我们通常不遵循这一点)。
HTML
<div class="imgHolder">
<img class="img1" src="images/image1.jpg" alt="img1" />
<img class="img2" src="images/image2.jpg" alt="img 2" />
<img class="img3" src="images/image3" alt="img 3" />
</div>
CSS
body {
padding: 0;
margin: 0;
}
header {
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
z-index: 300;
background-color: #ffffff;
height: 110px;
}
.toggle, [id^=drop] {
display: none;
}
.container {
margin-top: 110px; /* height of header */
}
.imgHolder{
display: flex;
justify-content: center;
padding: 20px 0px;
background-color: #0555bd;
color: #ffffff;
}
.imgHolder img {
flex: 1;
}
之后,您需要调整图像以将它们对齐到您想要的位置。有一些 css 属性,例如 justify-content
可以帮助您将它们居中、向右、向左等放置。
最后做了一个工作箱here供大家参考
我有一个导航栏固定在顶部的网页,页面的其余部分应该在导航栏下方向上滚动。大多数元素确实在它后面滚动。三个图像并排显示。两个外部图像(img 1 和 img 3)按应有的方式在导航栏下方滚动,但中央图像(img 2)不会。它在导航栏上方滚动。我认为这与它是绝对位置有关,但我怎样才能让这幅图像表现得像页面上的其他所有图像一样?如果我删除绝对位置,图像将不再与其他图像对齐。如果我添加一个 1 的 z-index,它仍然会越过导航栏,尽管导航栏的 z-index 为 300。如果我给图像一个 z-index 为 -1,它就会完全消失。我已尝试将不同的 z-index 值添加到不同的元素,但找不到有效的组合。
这是我的相关 css:
.navigate{
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
}
.toggle,
[id^=drop] {
display: none;
}
nav {
margin:0;
padding: 0;
background-color: #ffffff;
z-index: 300;
}
nav:after {
content:"";
display:table;
clear:both;
}
.container{
width: 100%;
margin-top: 70px;
}
.spread1{
display: inline-block;
width: 100%;
padding: 20px 0px;
background-color: #0555bd;
color: #ffffff;
}
.imgHolder{
width:60%;
margin: auto;
}
.img1{
display: block;
width: 27%;
left: 0;
right: 0 ;
float: left;
}
.img2{
position: absolute;
width: 25%;
display: block;
left: 0;
right: 0;
margin: 0 auto;
}
.img3{
width: 27%;
display: block;
left: 0;
right: 0 ;
float: right;
}
这里是 HTML:
<div class="navigate">
<nav>
<div id="logo"><img src="images/logo.png" alt="AMD logo"></div>
<label for="drop" class="toggle">Menu</label>
<input type="checkbox" id="drop" />
<ul class="menu">
<li><a href="index.php">Home</a></li>
<li> <a href="about.php">About</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</nav>
</div>
<div class="container">
<div class="spread1">
<div class="imgHolder">
<img class="img1" src="images/image1.jpg" alt="img1" />
<img class="img2" src="images/image2.jpg" alt="img 2" />
<img class="img3" src="images/image3" alt="img 3" />
</div>
</div>
</div>
您必须上树并找到 <nav>
的祖先是 img2
的祖先的同级。然后将更高的 z-index
值应用到 <nav>
的祖先,它恰好是 div.navigate
,现在有 z-index:300
。请参阅下面的演示。
.navigate{
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
/* FIX */
z-index:300;
}
此外,我不得不向 .spread1
添加 2 个规则集,因为 OP 没有滚动。这 2 个更改不是解决方案的要求,只是为了演示图像在 <nav>
.spread1{
display: inline-block;
width: 100%;
padding: 20px 0px;
background-color: #0555bd;
color: #ffffff;
/* Added to test scroll */
overflow-y:scroll;
height:100vh;
}
演示
.navigate{
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
/* FIX */
z-index:300;
}
.toggle,
[id^=drop] {
display: none;
}
nav {
margin:0;
padding: 0;
background-color: #ffffff;
z-index: 300;
}
nav:after {
content:"";
display:table;
clear:both;
}
.container{
width: 100%;
margin-top: 70px;
}
.spread1{
display: inline-block;
width: 100%;
padding: 20px 0px;
background-color: #0555bd;
color: #ffffff;
/* Added to test scroll */
overflow-y:scroll;
height:100vh;
}
.imgHolder{
width:60%;
margin: auto;
}
.img1{
display: block;
width: 27%;
left: 0;
right: 0 ;
float: left;
}
.img2{
position: absolute;
width: 25%;
display: block;
left: 0;
right: 0;
margin: 0 auto;
}
.img3{
width: 27%;
display: block;
left: 0;
right: 0 ;
float: right;
}
<div class="navigate">
<nav>
<div id="logo"><img src="images/logo.png" alt="AMD logo"></div>
<label for="drop" class="toggle">Menu</label>
<input type="checkbox" id="drop" />
<ul class="menu">
<li><a href="index.php">Home</a></li>
<li> <a href="about.php">About</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</nav>
</div>
<div class="container">
<div class="spread1">
<div class="imgHolder">
<img class="img1" src="http://placehold.it/50x50/000/fff?text=1'" alt="img1" />
<img class="img2" src='http://placehold.it/50x50/0ff/000?text=2' alt="img 2" />
<img class="img3" src="http://placehold.it/50x50/83d800/000?text=3" alt="img 3" />
</div>
</div>
</div>
因为你的 navigate
class 和 container
class 在同一个 "level" 上,你应该在那里应用你的 z-indexing。有些项目会出现在您的菜单上方是因为 position: absolute
并且在 navigate
class 上应用您的 z-index
将修复它。
.navigate{
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
z-index: 300;
}
你曾经为 CSS 使用过 flexbox 吗?它使在页面上定位和对齐元素变得容易得多。
当我解决对齐问题时,我的第一步通常是删除不需要的元素。你似乎有很多 div。我知道您可能没有发布所有代码来说明为什么这些嵌套 div 可能与您的项目相关,但为了我的回答,我将它们取出或更新它们以添加 HTML5 元素,例如 header
.
Flexbox 提供了一种在容器中动态布局元素的方法。如需深入了解 description/tutorial,请查看此 here。
您希望将 imgHolder 元素设置为 display: flex
,并将子图像设置为 flex: 1
。这将使它们更接近您想要的位置,而不会混合绝对定位和浮动。浮动实际上只应该与 text/img 位置一起使用(尽管我们通常不遵循这一点)。
HTML
<div class="imgHolder">
<img class="img1" src="images/image1.jpg" alt="img1" />
<img class="img2" src="images/image2.jpg" alt="img 2" />
<img class="img3" src="images/image3" alt="img 3" />
</div>
CSS
body {
padding: 0;
margin: 0;
}
header {
overflow: hidden;
top: 0;
width: 100%;
position: fixed;
z-index: 300;
background-color: #ffffff;
height: 110px;
}
.toggle, [id^=drop] {
display: none;
}
.container {
margin-top: 110px; /* height of header */
}
.imgHolder{
display: flex;
justify-content: center;
padding: 20px 0px;
background-color: #0555bd;
color: #ffffff;
}
.imgHolder img {
flex: 1;
}
之后,您需要调整图像以将它们对齐到您想要的位置。有一些 css 属性,例如 justify-content
可以帮助您将它们居中、向右、向左等放置。
最后做了一个工作箱here供大家参考