简体   繁体   English

内联网格元素的垂直对齐

[英]Vertical alignment of inline-grid elements

I don't understand the logic of vertical alignment of inline-grid elements. 我不理解inline-grid元素的垂直对齐逻辑。

The 2nd example works fine (see the code), but the 1st is not. 第二个例子工作正常(见代码),但第一个不是。 Why? 为什么? And how I could fix it, as shown below in screenshot? 我如何解决它,如下面的截图所示?

在此输入图像描述

Also note. 另请注意。

Instead of using display: inline-grid , we can use display: inline-flex + flex-direction: column with the same result. 而不是使用display: inline-grid ,我们可以使用display: inline-flex + flex-direction: column ,结果相同。

Thus, if the task could not be achieved with inline-grid , probably it could be solved using inline-flex . 因此,如果使用inline-grid无法实现任务,可能可以使用inline-flex来解决。

For ones, who prefer jsFiddle 对于那些喜欢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> 

The vertical-align property applies to inline-level and table-cell elements. vertical-align属性适用于内联级和表单元格元素。 The default value is baseline . 默认值为baseline Because you're using display: inline-grid , this rule is factoring into your code. 因为您使用的是display: inline-grid ,所以此规则会考虑您的代码。

Override the default with vertical-align: bottom . 使用vertical-align: bottom覆盖默认值。

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

revised demo 修订演示

More info: 更多信息:


UPDATE (based on comments) 更新 (根据评论)

The only problem, is that vertical-align: bottom (as well as other values of vertical align) also affects second example. 唯一的问题是vertical-align: bottom (以及vertical align的其他值)也影响第二个例子。 What I actually want is to align items according to the middle red line. 我真正想要的是根据中间的红线对齐项目。 (As shown in my screenshot). (如我的截图所示)。 I don't know, maybe it just impossible? 我不知道,也许这是不可能的?

Yes, it's possible. 是的,这是可能的。 Here's a revised Grid solution: 这是一个经过修改的网格解决方案:

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> 

Note: Consider removing the div wrappers around the images. 注意:考虑删除图像周围的div包装器。 They may not be necessary. 他们可能没有必要。 I only left them in my answer because they are needed for properly rendering the (demo?) borders. 我只是将它们留在我的答案中,因为它们需要正确渲染(演示?)边框。 Once you remove those wrappers, you can also get rid of the vertical-align rule in the CSS. 删除这些包装器后,您还可以删除CSS中的vertical-align规则。

You have to add vertical-align: bottom; 你必须添加vertical-align: bottom;

body {
    width: 500px;
}

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

div {
    border: 1px solid red;
}

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM