html - 如何使用可变文本基线垂直对齐元素

标签 html css flexbox vertical-alignment

我需要对齐一个元素列表,这些元素应该以长度不同且底部对齐的标题为基线。图片应始终位于顶部。

我试过将列表容器设置为 display:table 并将元素设置为 display: table-cell, vertical-align: baseline。我可以将表格单元格的元素设置为position:relative,并将图像设置为position:absolute和顶部:0,但一旦标题很长,这就会失败。

基本上,这是代码:

<div class="container">
    <div class="item">
    <img src="http://dummyimage.com/100x60/000/fff" alt="ALT">
        <h2>
        title
        </h2>
        <p>Lorem<br>ipsum</p>
    </div>
    <div class="item">
    <img src="http://dummyimage.com/100x60/000/fff" alt="ALT">
        <h2>
        longer title
        </h2>
        <p>Lorem<br>ipsum</p>
    </div>
    <div class="item">
    <img src="http://dummyimage.com/100x60/000/fff" alt="ALT">
        <h2>
        long long long long title
        </h2>
        <p>Lorem<br>ipsum</p>
    </div>
    <div class="item">
    <img src="http://dummyimage.com/100x60/000/fff" alt="ALT">
        <h2>
        not long title
        </h2>
        <p>Lorem<br>ipsum</p>
    </div>
</div>
<style>
.container {
    display: table;
    border: 1px solid grey;
}
.item {
  background: yellow;
    display: table-cell;
    padding: 10px;
    vertical-align: bottom;
    max-width:100px;
}
.item h2 {
    vertical-align: bottom; /* only needed for removing a few pixel gap between image and paragraph */
    border-bottom: 1px solid;
    padding-bottom:10px;
}
.item p {
    margin: 0;
    text-align: left;
}
</style>

http://jsfiddle.net/q0nbp54v/

请参阅下图我目前所做的工作。 image of my progress

最佳答案

<html>

<head>
    <style>
        .container {
            display: flex;
            flex-direction: row;
            justify-content: space-between;
            height: 600px;
        }

        .flex-card {
            display: flex;
            flex-direction: column;
            justify-content: space-between;
            flex-basis: 0;
            flex-grow: 1;
            margin: 15px;
        }

        .flex-card div {
            display: flex;
            flex-direction: column;
        }

        span {
            border-bottom: 1px solid #ddd;
            padding: 15px;
        }
        a {
            margin: 15px;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="flex-card">
            <img src="https://via.placeholder.com/300x200">
            <div>
                <span>Lorem ipsum dolsdfgvfgpk fgiko kkdfl;gkdf; l;kdfkgfl;dk or sit amet</span>
                <a href="/">View Idea Starter</a>
            </div>
        </div>
        <div class="flex-card">
            <img src="https://via.placeholder.com/300x200">
            <div>
                <span>Lorem ipsum dolor sit amet</span>
                <a href="/">View Idea Starter</a>
            </div>
        </div>
        <div class="flex-card">
            <img src="https://via.placeholder.com/300x200">
            <div>
                <span>Lorem ipsum dolsdfgvfgpk fgiko kkdfl;gkdf; l;kdfkgfl;dk or sit amet</span>
                <a href="/">View Idea Starter</a>
            </div>
        </div>
    </div>
</body>

</html>

这是您需要的吗?

关于html - 如何使用可变文本基线垂直对齐元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58250928/

相关文章:

html - Bootstrap : navbar-colapse div enters navbar

html - 数据协议(protocol) URL 大小限制

android - Ionic 3 - 如何实现 viewpager?

css - Flexbox 可能的布局?

JavaScript 日期时间格式

html - a/b 测试主要的 html/css 重新设计

html - 为什么我的 HTML 文档总是加载我的两个外部样式表的最后一次出现?

html - 为什么 height=100% 不起作用?

html - Flexbox - 4 Column Grid 最后一项拉伸(stretch)

javascript - 在表最后一行(链接)显示菜单并在单击菜单项时显示模态窗口