在第二列中垂直居中弹性项目
Vertically center flex item in a second column
我正在使用 flexbox 修改在列表视图中显示的投资组合模块,但是,我无法将 flexbox 中的最后一个子元素调整到我想要的位置。我觉得这应该是可能的,也许我的做法有点不对。
我试过将 .post-tag
div 包装在它自己的 flexbox 容器中并使用 margin-left: auto;
,虽然它在我想要的地方证明了它的合理性,但这并不是我想要的寻找,因为自动边距占据的所有内容下面都有一个空隙。我仍然在 JS fiddle 中使用其他可能的解决方案。
.parent {
display: flex;
flex-direction: column;
}
.container {
display: flex;
flex-direction: column;
border-bottom: solid 1.5px #4b0fff;
flex: 1;
}
.inner-container {
padding: 10px;
}
.post-tag {
font-style: italic;
}
<div class="parent">
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>yadayada</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
https://jsfiddle.net/7nLjwm65/2/
正如您在上面的 fiddle 中看到的那样,所有内容都显示在一个单独的列中,但是,我希望 .inner-container
的最后一个子项在一个单独的列中正确的。请查看下面的屏幕截图,以直观地了解我正在努力实现的目标。
请注意,标签应相对于左侧的其他内容居中,并且要足够灵活以在多个标签中保持如此。
提前感谢所有回复。
我认为最简单的解决方案是使用 CSS 网格。
在第二列中使用您的 .post-tag
创建一个双列网格。
然后,垂直居中.post-tag
,使网格区域横跨整个列,并将align-self: center
应用于网格项。
相关代码如下:
.inner-container {
display: grid;
grid-template-columns: 1fr auto;
grid-template-rows: repeat(4, auto);
}
.post-tag {
grid-column: 2;
grid-row: 1 / -1;
align-self: center;
}
.inner-container {
display: grid;
grid-template-columns: 1fr auto;
grid-template-rows: repeat(4, auto);
padding: 10px;
}
.post-tag {
grid-column: 2;
grid-row: 1 / -1;
align-self: center;
font-style: italic;
}
.parent {
display: flex;
flex-direction: column;
}
.container {
display: flex;
flex-direction: column;
border-bottom: solid 1.5px #4b0fff;
flex: 1;
}
<div class="parent">
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>yadayada</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
有关设计此类布局时 flex 的问题和网格的好处的详细说明,请参阅此 post:
实现您想要的方法需要更改标记。我把内容放在它自己的容器里,这样它就可以单独控制了。我还为 .tag-post
元素使用了 flex-basis
,这样您就可以控制宽度。希望这就是您要找的。
.parent {
display: flex;
flex-direction: column;
}
.container {
display: flex;
flex-direction: row;
border-bottom: solid 1.5px #4b0fff;
flex: 1;
}
.inner-container {
padding: 10px;
display: flex;
flex-direction: column;
flex: 1;
}
.align-parent {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.post-tag-parent {
display: flex;
flex-basis: 30%; /* adjust as needed */
justify-content: center;
}
.post-tag {
font-style: italic;
}
<div class="parent">
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div class="align-parent">
<div class="content-parent">
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
</div>
<div class="post-tag-parent">
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div class="align-parent">
<div class="content-parent">
<div>Subtitle Here</div>
<p>yadayada</p>
</div>
<div class="post-tag-parent">
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div class="align-parent">
<div class="content-parent">
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
</div>
<div class="post-tag-parent">
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
</div>
</div>
我正在使用 flexbox 修改在列表视图中显示的投资组合模块,但是,我无法将 flexbox 中的最后一个子元素调整到我想要的位置。我觉得这应该是可能的,也许我的做法有点不对。
我试过将 .post-tag
div 包装在它自己的 flexbox 容器中并使用 margin-left: auto;
,虽然它在我想要的地方证明了它的合理性,但这并不是我想要的寻找,因为自动边距占据的所有内容下面都有一个空隙。我仍然在 JS fiddle 中使用其他可能的解决方案。
.parent {
display: flex;
flex-direction: column;
}
.container {
display: flex;
flex-direction: column;
border-bottom: solid 1.5px #4b0fff;
flex: 1;
}
.inner-container {
padding: 10px;
}
.post-tag {
font-style: italic;
}
<div class="parent">
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>yadayada</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
https://jsfiddle.net/7nLjwm65/2/
正如您在上面的 fiddle 中看到的那样,所有内容都显示在一个单独的列中,但是,我希望 .inner-container
的最后一个子项在一个单独的列中正确的。请查看下面的屏幕截图,以直观地了解我正在努力实现的目标。
请注意,标签应相对于左侧的其他内容居中,并且要足够灵活以在多个标签中保持如此。
提前感谢所有回复。
我认为最简单的解决方案是使用 CSS 网格。
在第二列中使用您的 .post-tag
创建一个双列网格。
然后,垂直居中.post-tag
,使网格区域横跨整个列,并将align-self: center
应用于网格项。
相关代码如下:
.inner-container {
display: grid;
grid-template-columns: 1fr auto;
grid-template-rows: repeat(4, auto);
}
.post-tag {
grid-column: 2;
grid-row: 1 / -1;
align-self: center;
}
.inner-container {
display: grid;
grid-template-columns: 1fr auto;
grid-template-rows: repeat(4, auto);
padding: 10px;
}
.post-tag {
grid-column: 2;
grid-row: 1 / -1;
align-self: center;
font-style: italic;
}
.parent {
display: flex;
flex-direction: column;
}
.container {
display: flex;
flex-direction: column;
border-bottom: solid 1.5px #4b0fff;
flex: 1;
}
<div class="parent">
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>yadayada</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
有关设计此类布局时 flex 的问题和网格的好处的详细说明,请参阅此 post:
实现您想要的方法需要更改标记。我把内容放在它自己的容器里,这样它就可以单独控制了。我还为 .tag-post
元素使用了 flex-basis
,这样您就可以控制宽度。希望这就是您要找的。
.parent {
display: flex;
flex-direction: column;
}
.container {
display: flex;
flex-direction: row;
border-bottom: solid 1.5px #4b0fff;
flex: 1;
}
.inner-container {
padding: 10px;
display: flex;
flex-direction: column;
flex: 1;
}
.align-parent {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.post-tag-parent {
display: flex;
flex-basis: 30%; /* adjust as needed */
justify-content: center;
}
.post-tag {
font-style: italic;
}
<div class="parent">
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div class="align-parent">
<div class="content-parent">
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
</div>
<div class="post-tag-parent">
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div class="align-parent">
<div class="content-parent">
<div>Subtitle Here</div>
<p>yadayada</p>
</div>
<div class="post-tag-parent">
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
</div>
<div class="container">
<div class="inner-container">
<div>
<p>Client Here</p>
</div>
<h2>Title Here</h2>
<div class="align-parent">
<div class="content-parent">
<div>Subtitle Here</div>
<p>Sint praesentium et deleniti quod dolore dignissimos impedit. Ut autem tempore quidem debitis necessitatibus alias culpa. Delectus sunt pariatur eum aut aperiam quia et quibusdam. Nemo exercitationem iusto consequatur.</p>
</div>
<div class="post-tag-parent">
<p class="post-tag">Post Tag</p>
</div>
</div>
</div>
</div>
</div>