【问题标题】:Prevent footer from overlapping combining with float防止页脚与浮动组合重叠
【发布时间】:2020-01-31 02:29:03
【问题描述】:

我创建了一个气泡对话 html。 现在我正在尝试为其添加页脚。 (https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_fixed_footer中的页脚类似代码)

ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

ul li {
  display: inline-block;
  clear: both;
  padding: 5px;
  border-radius: 20px;
  margin-bottom: 2px;
  width: 80%;
  background: #eee;
}

.him {
  float: left;
  border: 1px solid #000000;
}

.me {
  float: right;
}

#footer {
  height: 30px;
  position: fixed;
  left: 0;
  bottom: 0;
  width: 100%;
  background-color: red;
  color: white;
  text-align: center;
}

body {
  padding-bottom: 30px;
}
<div>
  <div>
    <ul>
      <li class="me">N-19</li>
      <li class="me">N-18</li>
      <li class="him">N-17</li>
      <li class="me">N-16</li>
      <li class="me">N-15</li>
      <li class="me">N-14</li>
      <li class="him">N-13</li>
      <li class="me">N-12</li>
      <li class="me">N-11</li>
      <li class="me">N-10</li>
      <li class="me">N-9</li>
      <li class="me">N-8</li>
      <li class="him">N-7</li>
      <li class="me">N-6</li>
      <li class="me">N-5</li>
      <li class="me">N-4</li>
      <li class="me">N-3</li>
      <li class="me">N-2</li>
      <li class="me">N-1</li>
      <li class="him">N</li>
    </ul>
  </div>
  <div id="footer">
    Footer
  </div>
</div>

但我没有看到对话的最后几行。问题是由于

  • 元素的 float 属性,页脚与它们重叠。

    如何避免?

  • 【问题讨论】:

    标签: html css css-float footer


    【解决方案1】:

    检查一下:css gridcss 的一个非常好的属性。
    我们可以将屏幕分为列数和行数。我在这里使用了css-grid。

    更多关于 css-grid 的信息请阅读
    https://css-tricks.com/snippets/css/complete-guide-grid/

    ul {
          list-style: none;
          margin: 0;
          padding: 0;
          display:grid;
          grid-template-columns:33% 33% 34%;
      
        }
    
        ul li {
          display: block;
          clear: both;
          padding: 5px;
          border-radius: 20px;
          margin-bottom: 2px;
          
          background: #eee;
        }
    
        .him {
          grid-column:1/3;
          border: 1px solid #000000;
        }
    
        .me {
        grid-column:2/4
          
        }
    
        #footer {
          height: 30px;
          position: fixed;
          bottom:0;
          
          width: 100%;
          background-color: red;
          color: white;
          text-align: center;
        }
    
        body {
          padding-bottom: 30px;
        }
    <div>
          <div>
            <ul>
              <li class="me">N-19</li>
              <li class="me">N-18</li>
              <li class="him">N-17</li>
              <li class="me">N-16</li>
              <li class="me">N-15</li>
              <li class="me">N-14</li>
              <li class="him">N-13</li>
              <li class="me">N-12</li>
              <li class="me">N-11</li>
              <li class="me">N-10</li>
              <li class="me">N-9</li>
              <li class="me">N-8</li>
              <li class="him">N-7</li>
              <li class="me">N-6</li>
              <li class="me">N-5</li>
              <li class="me">N-4</li>
              <li class="me">N-3</li>
              <li class="me">N-2</li>
              <li class="me">N-1</li>
              <li class="him">N</li>
            </ul>
          </div>
          <div id="footer">
            Footer
          </div>
        </div>

    【讨论】:

    • 比“检查一下”更全面的解释怎么样?
    • 页脚正在工作,但现在“我”气泡的右侧有空白区域。他们没有卡在右边距
    • 浮动在 .me 和 .him 元素上似乎导致正文 {padding-bottom: 30px} 无法按预期应用。使用不同的布局方法可以解决这个问题。
    • @Cathy 我想他问如果你看到第一段,如何制作固定页脚。我们并没有结束这个问题,而是提供替代解决方案,所以至少现在他可以决定什么对他最有利。选择什么。
    • @NaveenJain 我严格来说不需要 float 属性。但我需要保持对话的视觉效果。似乎 .him {grid-column:1/4;width:75%;} 和 .me {grid-column:2/4} 成功了。如果您上传答案,我会接受。谢谢
    【解决方案2】:

    由于padding-bottom 无法在此处应用,因此我的答案不适合这种情况,因此我对建议的网格布局的替代方案进行了研究,令人惊讶的是,对于fixed 的定位页脚块。

    在这个例子中,我决定不使用&lt;ul&gt; 的代码,因为default element css values 的列表很大。我认为第一条消息总是来自用户,并使用:not() CSS 选择器来设置回复块的样式。您可以根据您的 HTML 将.user:not(user) 更改为.me.him 等任何类。

    section {display:flex;flex-direction:column}
    
    section * {
      width: 75%;
      border: 1px solid #757575;
      border-radius:20px;
      padding:2px 10px;
      margin-bottom:2px
    }
    
    .user {
      background:#ccc;
      margin-left: auto
    }
    
    section :not(.user) {
      background:#eee
    }
    
    section :not(.user) + .user, .user + :not(.user) {
      margin-top:5px
    } 
    
    footer { 
      height: 30px;
      position: sticky; /* Yes. It works now */
      bottom: 0;
      background: #000;
      color: white;
      text-align: center; 
      line-height: 28px
    }
    <section>
          <div class="user">Need some help with HTML</div>
          <div class="user">And CSS maybe</div>
          <div class="user">Want it to work with long-lenth messages as well, you know. And in all the browsers, even IE...</div>
          <div>Sure</div>
          <div>Lets test this one</div>
          <div>Quite a good in terms of browser support in 2019</div>
          <div class="user">Awsome!</div>
          <div class="user">Thank you so much</div>
          <div>You are welcome</div>
          <div class="user">Goodbye</div>
    </section>
    
    <footer>
    <p>Sticky Footer</p>
    </footer>

    【讨论】:

    • 或者只是在 ul 本身上添加 padding-bottom
    • @Cathy 如果页面的 HTML 部分是自动生成的 - CSS 仍然是最好的解决方案
    • 我的意思是添加 CSS,但不是在 :last-child 上,而是将它添加到 ul 本身。如果内容发生变化,它也可以放在正文标签上。 @Senpai.D
    • @Cathy 抱歉,我以为你的意思是最后一个 li 内联样式?这也是一个选项
    • 作为旁注 - 这是 .me 和 .him 项目上的浮动使身体的填充底部不起作用。使用不同的方式来布局列表,也许就像@Naveen Jain 提出的网格解决方案一样,可以解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多