【问题标题】:Set image baseline within a flexbox layout在 flexbox 布局中设置图像基线
【发布时间】:2016-04-04 19:19:41
【问题描述】:

我正在尝试使用 flexbox 创建多列布局并对齐所有列中的基线。我使用align-items: baseline 属性执行此操作。现在,当每列中的第一个元素是文本时,这很有效,例如:

CSS

.container {
  display: flex;
  align-items: baseline; 
}

.col-2 {
  width: 48%;
}

HTML

<div class='container'> 
  <div class='col-2'>
    <h2>Nullam eget metus suscipit, auctor diam quis, sagittis eros. Phasellus quis iaculis nisi.</h2>
  </div>
  <div class='col-2'>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lobortis nulla in elit hendrerit congue. Nullam eleifend, neque vitae finibus accumsan, augue dui lacinia leo, eget sagittis ipsum dui id leo.</p>
  </div>
</div>

我遇到的问题是当列中的第一个元素是图像时,如下所示:

<div class='container'> 
  <div class='col-2'>
    <h2>Nullam eget metus suscipit, auctor diam quis, sagittis eros. Phasellus quis iaculis nisi.</h2>
  </div>
  <div class='col-2'>
    <img src='https://c1.staticflickr.com/1/644/23373656961_9d6426d815_h.jpg'>
  </div>
</div>

第一列中的标题与第二列中图像的底部对齐。我想做的是更改图像基线,以便标题将移向列的顶部。我知道您可以通过将align-items 属性设置为flex-start 来解决此问题,但我更愿意将align-items 属性保持原样。这样,无论有多少列,文本基线都将始终对齐。

我的目标 - 弄清楚如何在不更改 .container 类的情况下调整图像基线。这可能吗?

这是一个你可以用http://codepen.io/jonathink/pen/wMwgwZ玩的codepen

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    我想做的是更改图像基线,以便标题将移向列的顶部。

    我的目标 - 弄清楚如何在不更改 .container 类的情况下调整图像基线。这可能吗?

    您可以为图像创建一个类,然后使用align-self 属性仅调整图像的对齐方式。

    来自您的codepen:

    修改后的 HTML(在两个地方添加了 .image 类)

    <div class='container'>
      <div class='col-2'>
        <h2>Nullam eget metus suscipit...</h2>
      </div>
      <div class='col-2'>
        <p>Lorem ipsum dolor sit amet, cons...</p>
      </div>
    </div>
    <div class='container'>
      <div class='col-2'>
        <h2>Nullam eget metus suscipit...</h2>
      </div>
      <div class='col-2 image'><!-- ADJUSTMENT HERE -->
        <img src='https://c1.staticflickr.com/1/644/23373656961_9d6426d815_h.jpg'>
      </div>
    </div>
    <div class='container'>
      <div class='col-3'>
        <h2>Nullam eget metus suscipit...</h2>
      </div>
      <div class='col-3'>
        <p>Lorem ipsum dolor sit amet...</p>
      </div>
      <div class='col-3 image'><!-- ADJUSTMENT HERE -->
        <img src='https://c1.staticflickr.com/1/644/23373656961_9d6426d815_h.jpg'>
      </div>
    </div>
    

    修改后的 CSS(添加了一条规则)

    .image { align-self: flex-end; }
    

    Revised DEMO

    【讨论】:

    • 差不多了。存在一个问题,如果文本列高于包含图像的列,则图像会与底部对齐。我已通过将 align-self 属性设置为 flex-start 来解决此问题。
    • 是的,不知道您对布局的总体目的,我没有测试每个用例场景。但关键是将align-self 属性应用于图像,这样它们就可以独立于文本进行对齐。
    • 我只想补充一点,我不希望向列“
      ”添加类,而是编辑影响“”的 CSS。在进一步试验之后,我偶然发现了一个使用 inline-block 和 vertical-align 属性的解决方案。 Ideal SOLUTION感谢您的帮助@Michael_B
    • 哈哈!我在图像上有一个vertical-align 解决方案,但我选择坚持使用 flex 方法。很高兴你解决了。保重。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签