【问题标题】:How to align an element within a div to be even across the others in a row?如何将 div 中的元素对齐以连续排列其他元素?
【发布时间】:2019-03-27 01:20:51
【问题描述】:

我在尝试对齐行中显示的三个图标容器时遇到了困难。我尝试了flex-endbaseline 的组合,但它们在容器内的img 标签或h3 标签上都不起作用。这是我的代码以及jsfiddle

编辑:我希望能够将图像与 div 的底部对齐,因此内容是均匀的。我记得之前用 flexbox 就搞定了,忘了是怎么做的了。这是使用我已经尝试过的属性的一些变化,但也许我用错了?不完全确定!

.icons {
  display: inline-flex;
}
.icons img {
  vertical-align: baseline;
  align-self: flex-end;
  align-content: flex-end;
  align-items: flex-end;
  justify-content: flex-end;
  flex-direction: column;
}
.icons h3 {
  vertical-align: baseline;
  align-self: baseline;
  align-content: baseline;
  align-items: baseline;
  justify-content: baseline;
  flex-direction: column;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

<div class="container">
  <div class="icons">
    <div class="col-md-4">
      <div class="icon">
        <img src="https://via.placeholder.com/88x131"/>
        <h3>Header 1</h3>
        <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit</span>
      </div>
    </div>
    <div class="col-md-4">
      <div class="icon">
        <img src="https://via.placeholder.com/116x98"/>
        <h3>Header 2</h3>
        <span>Lorem ipsum dolor sit amet</span>
      </div>
    </div>
    <div class="col-md-4">
      <div class="icon">
        <img src="https://via.placeholder.com/107x116"/>
        <h3>Header 3</h3>
        <span>Lorem ipsum dolor sit amet, consectetur adipiscing elitl Lorem ipsum dolor sit amet, consectetur adipiscing elit</span>
      </div>
    </div>
  </div>
</div>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

【问题讨论】:

    标签: html css twitter-bootstrap-3 flexbox vertical-alignment


    【解决方案1】:

    您可以使用引导程序中的row 类将图像放在自己的行中。 (可能需要调整以放入一些 col-sm 类,但这可能会让你开始)

    .icons img {
        vertical-align: baseline;
        align-self: flex-end;
        align-content: flex-end;
        align-items: flex-end;
        justify-content: flex-end;
        flex-direction: column;
    }
    .icons h3 {
        vertical-align: baseline;
        align-self: baseline;
        align-content: baseline;
        align-items: baseline;
        justify-content: baseline;
        flex-direction: column;
    }
    
    .bottom-align {
        height: 150px;
    }
    
    .bottom-align img {
        position: absolute;
        bottom:0;
    }
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    
    
    <div class="container">
      <div class="icons">
        <div class="row">
          <div class="col-md-4 bottom-align">
            <img src="https://via.placeholder.com/88x131">
          </div>
          <div class="col-md-4 bottom-align">
            <img src="https://via.placeholder.com/116x98">
          </div>
          <div class="col-md-4 bottom-align">
            <img src="https://via.placeholder.com/107x116">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4">
          <div class="icon">
            <h3>Header 1</h3>
            <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit</span>
          </div>
        </div>
        <div class="col-md-4">
          <div class="icon">
            <h3>Header 2</h3>
            <span>Lorem ipsum dolor sit amet</span>
          </div>
        </div>
        <div class="col-md-4">
          <div class="icon">
            <h3>Header 3</h3>
            <span>Lorem ipsum dolor sit amet, consectetur adipiscing elitl Lorem ipsum dolor sit amet, consectetur adipiscing elit</span>
          </div>
        </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 不是我想要的。我想将图像至少与标题之前的 div 底部或至少标题对齐以具有某种类型的基线,因此它甚至跨越其他两个。
    • 更新为与底部对齐,绝对位置和设定高度
    【解决方案2】:

    https://jsfiddle.net/DTcHh/95598/

    您可以将图像包装在 div 中并为 div 分配一个类 (myImg):

    .icons {
      display: flex;
    }
    
    .myImg {
      height: 140px;
      display: flex;
      align-items: flex-end;
    }
    <div class="container">
      <div class="icons">
        <div class="col-md-4">
          <div class="icon">
            <div class="myImg">
            <img src="https://via.placeholder.com/88x131"/>
            </div>
            <h3>Header 1</h3>
            <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit</span>
          </div>
        </div>
        <div class="col-md-4">
          <div class="icon">
            <div class="myImg">
            <img src="https://via.placeholder.com/116x98"/>
            </div>
            <h3>Header 2</h3>
            <span>Lorem ipsum dolor sit amet</span>
          </div>
        </div>
        <div class="col-md-4">
          <div class="icon">
            <div class="myImg">
             <img src="https://via.placeholder.com/107x116"/>
            </div>
            <h3>Header 3</h3>
            <span>Lorem ipsum dolor sit amet, consectetur adipiscing elitl Lorem ipsum dolor sit amet, consectetur adipiscing elit</span>
          </div>
        </div>
      </div>
    </div>

    然后使用 min-height,如果您也想要相同高度的图像,也可以设置 div 的图像min-width(他们调整大小的想法,所以考虑使用 object-fit:cover 甚至更好的设置图像作为背景,然后使用 background-size: cover;)

    【讨论】:

    • 我不想调整图像高度。我想将图像至少与标题之前的 div 底部或至少标题对齐以具有某种类型的基线,因此它甚至跨越其他两个。
    • 已编辑,可以在 myImg 类中添加 display: flex 和 align-self: flex-end 。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2014-12-01
    • 2021-11-04
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多