垂直和水平居中图像下方的标题

时间:2016-01-09 17:00:18

标签: javascript jquery html css

我在我正在构建的网站上创建了以下 jsfiddle

第一个标题有3行,而另外2个只有一行。我在我的方框中添加了min-height,所以它们都是平等的。

我现在想要将标题置于垂直和水平轴上。

我试图用flexbox实现这一点,但它只是水平对齐。我在这里做错了什么?

.container {
  width: 600px;
  max-width: 90%;
  margin: 0 auto;
}
.third {
  float: left;
  width: 32%;
  min-height: 227px;
  margin: 0 2% 2% 0;
  background: #fff;
}
.last {
  margin: 0 0 2% 0;
}
header {
  padding: 12px;
}
h2 {
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}
img {
  display: block;
  height: auto;
  max-width: 100%;
}
<div class="container">
  <section class="third">
    <img src="http://bit.ly/1OTNPkt" alt="Kitten">
    <header>
      <h2>Title one which is slightly longer goes here</h2>
    </header>
  </section>
  <section class="third">
    <img src="http://bit.ly/1OTNPkt" alt="Kitten">
    <header>
      <h2>Title two</h2>
    </header>
  </section>
  <section class="third last">
    <img src="http://bit.ly/1OTNPkt" alt="Kitten">
    <header>
      <h2>Title three</h2>
    </header>
  </section>
</div>

更新

我正在寻找支持IE的解决方案,包括9。

3 个答案:

答案 0 :(得分:3)

我建议使用嵌套的flexbox,将floatmin-height放在section上。 flex布局非常智能,可以自动获得相同的高度。有关IE9支持,请参阅底部。

&#13;
&#13;
.container {
  width: 600px;
  max-width: 90%;
  margin: 0 auto;
  display: flex;
}
.third {
  /* float: left; */
  width: 32%;
  /* min-height: 227px; */
  margin: 0 2% 2% 0;
  background: gold;
  display: flex;
  flex-direction: column;
}
.last {
  margin: 0 0 2% 0;
}
header {
  padding: 12px;
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
}
h2 {
  margin: 0;
}
img {
  display: block;
  height: auto;
  max-width: 100%;
}
&#13;
<div class="container">
  <section class="third">
    <img src="http://bit.ly/1OTNPkt" alt="Kitten">
    <header>
      <h2>Title one which is slightly longer goes here</h2>
    </header>
  </section>
  <section class="third">
    <img src="http://bit.ly/1OTNPkt" alt="Kitten">
    <header>
      <h2>Title two</h2>
    </header>
  </section>
  <section class="third last">
    <img src="http://bit.ly/1OTNPkt" alt="Kitten">
    <header>
      <h2>Title three</h2>
    </header>
  </section>
</div>
&#13;
&#13;
&#13;

编辑:IE9支持。我会用一些Javascript做同等高度的东西,下面的例子用jQuery + CSS表格单元做垂直中心。

&#13;
&#13;
$(document).ready(function() {
  var maxHeight = 0;
  $("h2").each(function() {
    if ($(this).height() > maxHeight) {
      maxHeight = $(this).height();
    }
  });
  $("h2").height(maxHeight);
});
&#13;
.container {
  width: 600px;
  max-width: 90%;
  margin: 0 auto;
}
.third {
  float: left;
  width: 32%;
  /* min-height: 227px; */
  margin: 0 2% 2% 0;
  background: gold;
}
.last {
  margin: 0 0 2% 0;
}
header {
  padding: 12px;
}
h2 {
  margin: 0;
  display: table-cell;
  vertical-align: middle;
}
img {
  display: block;
  height: auto;
  max-width: 100%;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="container">
  <section class="third">
    <img src="http://bit.ly/1OTNPkt" alt="Kitten">
    <header>
      <h2>Title one which is slightly longer goes here</h2>
    </header>
  </section>
  <section class="third">
    <img src="http://bit.ly/1OTNPkt" alt="Kitten">
    <header>
      <h2>Title two</h2>
    </header>
  </section>
  <section class="third last">
    <img src="http://bit.ly/1OTNPkt" alt="Kitten">
    <header>
      <h2>Title three</h2>
    </header>
  </section>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

尝试使用display: table并且它有点有效,但事实证明你不能使用border-spacing

的百分比

演示:https://jsfiddle.net/2dkycc1L/

答案 2 :(得分:1)

我使用flexbox制作了整个网格,使它们都具有相同的高度并移除了最小高度。 header元素也在弯曲以使标题在中间垂直对齐:https://jsfiddle.net/5yq37fha/