【问题标题】:Vertical alignment of inline-grid elements内联网格元素的垂直对齐
【发布时间】:2017-05-29 14:44:33
【问题描述】:

我不明白inline-grid 元素垂直对齐的逻辑。

第二个例子工作正常(见代码),但第一个不是。为什么?以及如何修复它,如下图所示?

另请注意。

我们可以使用display: inline-flex + flex-direction: column 来代替display: inline-grid,结果相同。

因此,如果使用inline-grid 无法完成任务,则可能可以使用inline-flex 解决。

For ones, who prefer jsFiddle

body {
	width: 500px;
}

.inline-grid {
	display: inline-grid;
	width: 49%;
}

div {
	border: 1px solid red;
}
<h3>not ok</h3>

<div class="inline-grid">
<div><img src="http://i.imgur.com/joY41yV.png"></div>
<div>Lorem ipsum</div>
</div>

<div class="inline-grid">
<div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
<div>Lorem ipsum</div>
</div>

<hr>

<h3>ok</h3>

<div class="inline-grid">
<div><img src="http://i.imgur.com/joY41yV.png"></div>
<div>Lorem ipsum</div>
</div>

<div class="inline-grid">
<div><img src="http://i.imgur.com/joY41yV.png"></div>
<div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
</div>

【问题讨论】:

    标签: html css css-grid


    【解决方案1】:

    vertical-align 属性适用于内联级和表格单元格元素。默认值为baseline。因为您使用的是display: inline-grid,所以这条规则会影响您的代码。

    vertical-align: bottom覆盖默认值。

    .inline-grid {
      display: inline-grid;
      width: 49%;
      vertical-align: bottom; /* new */
    }
    

    revised demo

    更多信息:


    更新(基于 cmets)

    唯一的问题是vertical-align: bottom(以及其他 垂直对齐的值)也影响第二个例子。我实际上是什么 想要的是根据中间的红线对齐项目。 (如图所示 我的截图)。我不知道,也许这是不可能的?

    是的,这是可能的。这是修改后的 Grid 解决方案:

    revised demo

    .grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      grid-template-rows: auto auto;
      grid-auto-flow: column;
      grid-gap: 5px;
    }
    
    div > div { border: 1px solid red; }
    img       { vertical-align: bottom; }
    body      { width: 500px; }
    <div class="grid">
      <div><img src="http://i.imgur.com/joY41yV.png"></div>
      <div>Lorem ipsum</div>
      <div style="align-self: end;"><code>align-self: end</code> || Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
      <div>Lorem ipsum</div>
    </div>
    
    <hr>
    
    <div class="grid">
      <div><img src="http://i.imgur.com/joY41yV.png"></div>
      <div style="align-self: start"><code>align-self: start</code></div>
      <div><img src="http://i.imgur.com/joY41yV.png"></div>
      <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
    </div>

    注意:考虑移除图像周围的 div 包装器。它们可能不是必需的。我只将它们留在我的答案中,因为它们是正确渲染(演示?)边界所必需的。删除这些包装后,您还可以摆脱 CSS 中的 vertical-align 规则。

    【讨论】:

      【解决方案2】:

      你必须添加vertical-align: bottom;

      body {
          width: 500px;
      }
      
      .inline-grid {
          display: inline-grid;
          width: 49%;
          vertical-align: bottom;
      }
      
      div {
          border: 1px solid red;
      }
      

      这里是 JSFIDDLE:https://jsfiddle.net/4sh9oo5k/

      【讨论】:

      • 谢谢。我赞成正义,但我也应该注意,这个答案与迈克尔的没有任何不同。
      猜你喜欢
      • 2012-09-07
      • 2014-01-22
      • 2012-03-29
      • 2011-07-17
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多