html - 当遇到 float 内容时粘性导航会中断?

标签 html css css-float css-position sticky

出于教学目的,我正在使用最基本的 CSS。我将导航栏设置为 position: Sticky ,该导航栏效果很好,直到它与页面下方的一组 float 列进行交互。

gif of site scrolling and breaking nav

我不确定这是因为 float ,还是因为布局的简单性而导致的一些糟糕的计算。现在,两列布局是用以下内容制作的:

#main-menu {
  width: 100%;
  height: auto;
  text-align: right;
  position: sticky;
  position: -webkit-sticky;
  top: 0px;
  z-index: 2;
}
.column {
    width: 50%;
    float: left;
}

使用内联 block 显示可以工作并且不会影响粘性菜单,但正如预期的那样,我无法将它们设置为 50% 宽度。如果能解决就太好了,但也能解释一下我为什么会遇到这种情况。

谢谢!

#main-menu {
  width: 100%;
  height: auto;
  background-color: #222222;
  line-height: 2em;
  text-align: right;
  position: sticky;
  position: -webkit-sticky; /* Safari */
  top: 0px;
  z-index: 2;
}
.site-name {
  float: left;
  margin: auto 1em;
  padding: 0.5em 1em;
}
#main-menu a {
  color: #FFFFFF;
  text-decoration: none;
}
#main-menu .site-name a:hover {
  color: #00BBBB;
}
.menu-item {
  min-width: 2em;
  text-align: center;
  display: inline-block;
  padding: 0.5em 1em;
}
.menu-item:hover {
  background-color: #00BBBB;
}

#main {
  padding: 2em 4em;
  clear: both;
}
.column-lg {
  width: 50%;
  float: left;
  
}
<h1>Site Above Fold Content</h1>

<nav id="main-menu">
  <div class="site-name">
    <a href="#">Title</a>
  </div>
  <div class="menu-item">
    <a href="#">L1</a>
  </div>
  <div class="menu-item">
    <a href="#">L2</a>
  </div>
</nav>

<h2>Under Fold Content (Before Floated Columns)</h2>
<p>Gentrify woke irony +1 tote bag lo-fi drinking vinegar. Bushwick YOLO retro pinterest cloud bread skateboard. Small batch retro twee scenester roof party humblebrag celiac 8-bit direct trade franzen flannel cray. Kogi knausgaard godard selfies umami deep v, woke whatever 8-bit prism cred.</p>

<br><br>

<h3>BYE-BYE NAV!!</h3>

<div class="column-lg">
  <h2>Lorem Ipusm</h2>
  <div class="row">
    <h3>1 Title Impsum Amet</h3>
      <p>Lorem ipsum dolor amet bitters ethical microdosing, narwhal jean shorts venmo umami YOLO 90's trust fund activated charcoal lomo pok pok hammock. Man bun marfa blog narwhal letterpress food truck. Umami forage disrupt, snackwave DIY mlkshk aesthetic kogi bitters vice.</p>
  </div>
  
  <div class="row">
    <h3>2 Title Impsum Amet</h3>
    <p>2 Vegan williamsburg jianbing, gluten-free tote bag try-hard mixtape yuccie +1 everyday carry shabby chic umami vexillologist pop-up edison bulb. Whatever everyday carry listicle, coloring book hell of microdosing gastropub banh mi yuccie tumblr art party. Aesthetic hammock kitsch microdosing, viral biodiesel tumblr cliche beard readymade seitan. Copper mug chambray street art raclette shaman fam neutra.</p>
  </div>
</div>

<div class="column-lg">
  <h2>Lorem Ipusm</h2>
   <div class="row">
    <p>Gentrify woke irony +1 tote bag lo-fi drinking vinegar. Bushwick YOLO retro pinterest cloud bread skateboard. Small batch retro twee scenester roof party humblebrag celiac 8-bit direct trade franzen flannel cray. Kogi knausgaard godard selfies umami deep v, woke whatever 8-bit prism cred. Intelligentsia heirloom keytar, hot chicken synth tote bag vaporware williamsburg pok pok kickstarter 3 wolf moon selvage hoodie trust fund cronut. Occupy bicycle rights drinking vinegar small batch, vaporware taxidermy flannel live-edge marfa.</p>
  </div>
</div>

最佳答案

float 元素不再处于 DOM 的正常流程中,从而降低了主体的整体高度。使用检查器,您可以看到这一点(蓝色代表 body 的高度):

enter image description here

因此,当您遇到 float 时,相对于主体的 position: Sticky 将出现滚动。

“修复”是清除你的 float 。我将以下 clearfix 应用于正文:

body:after {
    content: "."; 
    display: block; 
    height: 0; 
    clear: both; 
    visibility: hidden;
}

这是带有演示的片段:

body:after {
    content: "."; 
    display: block; 
    height: 0; 
    clear: both; 
    visibility: hidden;
}
#main-menu {
  width: 100%;
  height: auto;
  background-color: #222222;
  line-height: 2em;
  text-align: right;
  position: sticky;
  position: -webkit-sticky; /* Safari */
  top: 0px;
  z-index: 2;
}
.site-name {
  float: left;
  margin: auto 1em;
  padding: 0.5em 1em;
}
#main-menu a {
  color: #FFFFFF;
  text-decoration: none;
}
#main-menu .site-name a:hover {
  color: #00BBBB;
}
.menu-item {
  min-width: 2em;
  text-align: center;
  display: inline-block;
  padding: 0.5em 1em;
}
.menu-item:hover {
  background-color: #00BBBB;
}

#main {
  padding: 2em 4em;
  clear: both;
}
.column-lg {
  width: 50%;
  float: left;
}
<h1>Site Above Fold Content</h1>

<nav id="main-menu">
  <div class="site-name">
    <a href="#">Title</a>
  </div>
  <div class="menu-item">
    <a href="#">L1</a>
  </div>
  <div class="menu-item">
    <a href="#">L2</a>
  </div>
</nav>

<h2>Under Fold Content (Before Floated Columns)</h2>
<p>Gentrify woke irony +1 tote bag lo-fi drinking vinegar. Bushwick YOLO retro pinterest cloud bread skateboard. Small batch retro twee scenester roof party humblebrag celiac 8-bit direct trade franzen flannel cray. Kogi knausgaard godard selfies umami deep v, woke whatever 8-bit prism cred.</p>

<br><br>

<h3>BYE-BYE NAV!!</h3>

<div class="column-lg">
  <h2>Lorem Ipusm</h2>
  <div class="row">
    <h3>1 Title Impsum Amet</h3>
      <p>Lorem ipsum dolor amet bitters ethical microdosing, narwhal jean shorts venmo umami YOLO 90's trust fund activated charcoal lomo pok pok hammock. Man bun marfa blog narwhal letterpress food truck. Umami forage disrupt, snackwave DIY mlkshk aesthetic kogi bitters vice.</p>
  </div>
  
  <div class="row">
    <h3>2 Title Impsum Amet</h3>
    <p>2 Vegan williamsburg jianbing, gluten-free tote bag try-hard mixtape yuccie +1 everyday carry shabby chic umami vexillologist pop-up edison bulb. Whatever everyday carry listicle, coloring book hell of microdosing gastropub banh mi yuccie tumblr art party. Aesthetic hammock kitsch microdosing, viral biodiesel tumblr cliche beard readymade seitan. Copper mug chambray street art raclette shaman fam neutra.</p>
  </div>
</div>

<div class="column-lg">
  <h2>Lorem Ipusm</h2>
   <div class="row">
    <p>Gentrify woke irony +1 tote bag lo-fi drinking vinegar. Bushwick YOLO retro pinterest cloud bread skateboard. Small batch retro twee scenester roof party humblebrag celiac 8-bit direct trade franzen flannel cray. Kogi knausgaard godard selfies umami deep v, woke whatever 8-bit prism cred. Intelligentsia heirloom keytar, hot chicken synth tote bag vaporware williamsburg pok pok kickstarter 3 wolf moon selvage hoodie trust fund cronut. Occupy bicycle rights drinking vinegar small batch, vaporware taxidermy flannel live-edge marfa.</p>
  </div>
</div>

关于html - 当遇到 float 内容时粘性导航会中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55780455/

相关文章:

javascript - iFrame 未在 Android 设备中正确修复

javascript - 在 javascript 中检索 Firefox 中表格的高度

javascript - 无法在 html 表格的下拉列表中显示 JSON 数据

html - 即使在最后一个序列中,CSS 样式表也会被覆盖

html - 如何停止下拉菜单成为导航栏的一部分?

html - Flex-direction column 使 flex 元素重叠 IE11

c# - 我需要更改 asp :buttons that are in a ListView from code behind

html - 如何以响应方式 float 按钮?

css - float DIV 列错位

asp.net - 水平并排设置两个 <divs>