左右浮动使2列高度相同[重复]

Posted

技术标签:

【中文标题】左右浮动使2列高度相同[重复]【英文标题】:float left and right make 2 column to be same height [duplicate] 【发布时间】:2018-01-28 00:32:17 【问题描述】:

为什么右侧浮动列的高度为 100% 不能使其高度为 100%?现在我很困惑 100% 高度的真正含义。

https://jsfiddle.net/7ybLa9fj/

如果我使用浮动,如何使 2 列具有相同的高度?

.wrap 
  height: 100%;
  overflow: hidden;
  width: 400px;


.left 
  float: left;
  width: 50%;
  background: #fafafa;
  text-align: center;


.right 
  float: right;
  background: #ccc;
  width: 50%;
  text-align: center;
  height: 100%; //make right has the same with left doesn't work
<div class="wrap">
  <div class="left">
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>

  </div>
  <div class="right">right content is not</div>
</div>

【问题讨论】:

Bootstrap 使用浮点数,因此我链接的欺骗中的解决方案将回答这个问题。 @Paulie_D 同意它确实有答案,但仍未解释原因。随意再次关闭它,我会留下它:) 我不认为我现在可以再次关闭,但您也许可以 @Paulie_D 试试...如果没有,我丢失了链接,所以将它作为评论发布,我会 它仍然显示在链接的问题侧边栏中 【参考方案1】:

当使用百分比表示高度时,上级也需要一个高度,一直到html,除非有一个固定高度,即视口单位vh,如示例 2 所示

示例 1,height: 100% 位于 html, body

html,
body 
  height: 100%;


.wrap 
  height: 100%;
  overflow: hidden;
  width: 400px;


.left 
  float: left;
  width: 50%;
  background: #fafafa;
  text-align: center;


.right 
  float: right;
  background: white;
  width: 50%;
  text-align: center;
  height: 100%;
<div class="wrap">
  <div class="left">
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>

  </div>
  <div class="right">right content is not</div>
</div>

示例 2,height: 100vh 位于 wrap

.wrap 
  height: 100vh;
  overflow: hidden;
  width: 400px;


.left 
  float: left;
  width: 50%;
  background: #fafafa;
  text-align: center;


.right 
  float: right;
  background: white;
  width: 50%;
  text-align: center;
  height: 100%;
<div class="wrap">
  <div class="left">
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>

  </div>
  <div class="right">right content is not</div>
</div>

更新

此外,一种更现代的方式是使用 Flexbox 而不是 float,这样的代码响应速度更快,代码更优雅。

.wrap 
  display: flex;
  overflow: hidden;
  width: 400px;


.left, .right 
  flex-basis: 50%;
  text-align: center;
  border: 1px dotted gray;
<div class="wrap">
  <div class="left">
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>
    <p>
      left content is long
    </p>

  </div>
  <div class="right">right content is not</div>
</div>

【讨论】:

使用 vh 有什么缺点吗? @JennyMok 在这种情况下,没有。 @JennyMok 我更新了我的答案并添加了一些重复项以引起对这些答案/问题的更多关注 什么情况下vh有问题?永远不要使用它,但在这种情况下它仍然有效哈哈。 @JennyMok 它没有任何问题,虽然它是基于视口的,但出于同样的原因,它有时可能会有缺点。【参考方案2】:

您不能将 100% 添加到相同的高度,因为元素具有浮动权利,而不是之前没有子元素。而100%是均值,身高为100%身高的孩子。所以你必须将375px的高度设置为相同的高度。

.right 
height:375px;

在此处查看 Js fiddle:https://jsfiddle.net/7ybLa9fj/1/

【讨论】:

【参考方案3】:

如果 div 内的元素需要这么高的高度,Height 100% 会将高度作为其父元素的 100%。

在你的情况下,右 div 只有一个元素,不需要这么大的高度来渲染。

如果您希望左右容器的高度相同,请提供以 px 为单位的高度,如下所示

.left
height:200px

.right
height:200px

【讨论】:

以上是关于左右浮动使2列高度相同[重复]的主要内容,如果未能解决你的问题,请参考以下文章

HTML/CSS:使两个浮动 div 具有相同的高度

Float浮动

如何使 2 列 Bootstrap 网格中的第 2 列与第 1 列的高度相同

具有相等高度的弹性盒子内部项目[重复]

如何使 HTML 面向列和基于 div 的表格的高度在反应中相同

li横向并排2列排版,保证每行的两个li高度一致