【问题标题】:How to make floated columns stretch to fill container vertically?如何使浮动列拉伸以垂直填充容器?
【发布时间】:2016-01-03 17:49:55
【问题描述】:

我需要支持>= IE9

点击Run code sn-p...查看我的两列

main {
  background-color: limegreen;
}

.row {
  overflow: hidden;
  border: 1px solid red;
  margin-bottom: 15px;
}

section {
  float: left;
  margin: 0 2%;
  width: 46%;
  background-color: palegreen;
}
<main>
  <div class="row">
    <section>
      <p>Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum.</p>
      <p>Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
    </section>
    <section>
      <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas sed diam eget risus varius blandit sit amet non magna. Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum.</p>
      <p>Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Nulla vitae elit libero, a pharetra augue. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
    </section>
  </div>
  <div class="row">
    <section>
      <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas sed diam eget risus varius blandit sit amet non magna. Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum.</p>
      <p>Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Nulla vitae elit libero, a pharetra augue. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
    </section>
    <section>
      <p>Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum.</p>
      <p>Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
    </section>
  </div>
<main>

我希望每个 &lt;section&gt; 都具有匹配的垂直高度。我不确定如何使用 CSS 来做到这一点。

【问题讨论】:

  • display: table/table-cell 是一种解决方案。二是使用flexbox。但是如果你需要使用floatshave you tried this
  • 另外,height: in pixel 可以工作,但不能使用百分比。
  • 我不必使用花车。我只是一个CSS老学生。 table/table-cell 看起来很有希望,因为我需要支持 IE &gt;= 9
  • @naomik 然后display:table/table-cell 是一个不错的解决方案。
  • @naomik 都解决了吗?

标签: css


【解决方案1】:

如果需要,您可以坚持使用float,通过使用 CSS 伪元素 + 等高背景颜色的位置技巧,请参阅以下 sn-p 和 cmets inline。

jsfiddle

main {
    background-color: limegreen;
}
.row {
    overflow: hidden;
    border: 1px solid red;
    margin-bottom: 15px;
    position: relative;
}
section {
    float: left;
    margin: 0 2%;
    width: 46%;
    background-color: palegreen;
    position: relative;
    z-index: 1; /* top of the pseudo elements */
}
.row:before, .row:after {
    content: "";
    position: absolute;
    top: 0;
    background: palegreen;
    width: 46%; /* same as section width */
    height: 100%;
}
.row:before {
    left: 2%; /* left margin */
}
.row:after {
    left: 52%; /* 2% + 46% + 2% + 2% */
}
<main>
    <div class="row">
        <section>
            <p>Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum.</p>
            <p>Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
        </section>
        <section>
            <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas sed diam eget risus varius blandit sit amet non magna. Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum.</p>
            <p>Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Nulla vitae elit libero, a pharetra augue. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
        </section>
    </div>
    <div class="row">
        <section>
            <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas sed diam eget risus varius blandit sit amet non magna. Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum.</p>
            <p>Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Nulla vitae elit libero, a pharetra augue. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
        </section>
        <section>
            <p>Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum.</p>
            <p>Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
        </section>
    </div>
</main>

另一种方法是 CSS table + table-row + table-cell,就像上面 cmets 中已经建议的其他方法一样。我在这里添加它,加上额外的border-collapse + border-spacing 功能,用于绘制差距。在响应性或移动风格方面,您可以简单地将相关的display:table* 属性重置回display:block 左右。

jsfiddle

main {
    background-color: limegreen;
    display: table;
    border-collapse: separate;
    table-layout: fixed;
    border-spacing: 20px;
    width: 100%;
}
.row {
    display: table-row;
}
section {
    display: table-cell;
    vertical-align: top;
    background: palegreen;
}
<main>
    <div class="row">
        <section>
            <p>Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum.</p>
            <p>Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
        </section>
        <section>
            <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas sed diam eget risus varius blandit sit amet non magna. Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum.</p>
            <p>Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Nulla vitae elit libero, a pharetra augue. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
        </section>
    </div>
    <div class="row">
        <section>
            <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas sed diam eget risus varius blandit sit amet non magna. Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum.</p>
            <p>Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Nulla vitae elit libero, a pharetra augue. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
        </section>
        <section>
            <p>Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum.</p>
            <p>Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
        </section>
    </div>
</main>

两种解决方案之间的输出略有不同,但大多是可调的。关于 HTML 语法的另一件事 - 最后一个 &lt;main&gt; 应该是结束 &lt;/main&gt;

编辑

添加了table-layout:fixed 以方便地等宽列,无论它们有多少。

【讨论】:

  • 你显然已经掌握了 CSS。感谢您的帮助。
  • @naomik 另请注意,&lt;main&gt; 元素在 lte IE11 - referencean article about that 中存在一些问题。
  • @naomik 修复了 border-collapse 值的拼写错误,还添加了 table-layout 功能,但您可能需要也可能不需要它。
【解决方案2】:

只需将display: flex; 添加到容器中

main {
  background-color: limegreen;
}

.row {
  overflow: hidden;
  border: 1px solid red;
  margin-bottom: 15px;
   display: flex;
}

section {
  margin: 0 2%;
  width: 46%;
  background-color: palegreen;
 

}
<main>
  <div class="row">
    <section>
      <p>Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum.</p>
      <p>Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
    </section>
    <section>
      <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas sed diam eget risus varius blandit sit amet non magna. Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum.</p>
      <p>Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Nulla vitae elit libero, a pharetra augue. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
    </section>
  </div>
  <div class="row">
    <section>
      <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas sed diam eget risus varius blandit sit amet non magna. Cras mattis consectetur purus sit amet fermentum. Maecenas faucibus mollis interdum.</p>
      <p>Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Nulla vitae elit libero, a pharetra augue. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
    </section>
    <section>
      <p>Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum.</p>
      <p>Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
    </section>
  </div>
<main>

如果你想要 IE 9 支持,你可以使用Match Height JS

【讨论】:

  • 我应该提到我需要支持 IE >= 9。对不起。
  • 我不知道 flex 的强大功能。谢谢。很好,我希望我可以使用它。 +1
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多