[英]How to align a label with wrapping tags?
我有一个标签和多个标签,它们可能会换行到多行:
.container { background-color: #ddd; display: flex; width: 200px; margin-bottom: 50px; } .label { margin-right: 10px; } .boxes-container { display: flex; flex-wrap: wrap; } .box { display: inline-block; height: 40px; width: 60px; margin-bottom: 10px; margin-right: 10px; background-color: blue; }
<div class="container"> <label class="label">Tags:</label> <span class="boxes-container"> <span class="box"></span> <span class="box"></span> </span> </div> <div class="container"> <label class="label">Tags:</label> <span class="boxes-container"> <span class="box"></span> <span class="box"></span> <span class="box"></span> <span class="box"></span> </span> </div>
它看起来像这样:
我想实现以下目标:
这是期望的结果:
我怎么能做到这一点?
我已将 last 和 second last child 的margin-bottom
为0px
并将vertical-align: middle
为.label
, line-height 等于.box
的高度。
.container { background-color: #ddd; display: flex; width: 200px; margin-bottom: 50px; } .label { margin-right: 10px; line-height:40px; vertical-align:middle; } .boxes-container { display: flex; flex-wrap: wrap; } .box { display: inline-block; height: 40px; width: 60px; margin-bottom: 10px; margin-right: 10px; background-color: blue; } .box:last-child,.box:nth-last-child(2) { margin-bottom: 0px; }
<div class="container"> <label class="label">Tags:</label> <span class="boxes-container"> <span class="box"></span> <span class="box"></span> </span> </div> <div class="container"> <label class="label">Tags:</label> <span class="boxes-container"> <span class="box"></span> <span class="box"></span> <span class="box"></span> <span class="box"></span> </span> </div>
请试试这个。 我已经添加了 css ie
.boxes-container .box:nth-last-of-type(-n+2) {
margin-bottom: 0;
}
.label {
margin-top: 8px;
}
.container { background-color: #ddd; display: flex; width: 200px; margin-bottom: 50px; } .label { margin-right: 10px; margin-top: 8px; } .boxes-container { display: flex; flex-wrap: wrap; } .box { display: inline-block; height: 40px; width: 60px; margin-bottom: 10px; margin-right: 10px; background-color: blue; } .boxes-container .box:nth-last-of-type(-n+2) { margin-bottom: 0; }
<div class="container"> <label class="label">Tags:</label> <span class="boxes-container"> <span class="box"></span> <span class="box"></span> </span> </div> <div class="container"> <label class="label">Tags:</label> <span class="boxes-container"> <span class="box"></span> <span class="box"></span> <span class="box"></span> <span class="box"></span> </span> </div>
正如其他人所指出的,有多种方法可以解决这个问题。 这是另一个使用flex
对齐标签的方法:
.label {
height: 40px;
display: flex;
align-items: center;
}
假设盒子的高度是固定的,我们可以将.label
设置为相同的高度并使用 flex 将其内容居中。 一个同样有效的单行解决方案是指定line-height: 40px
,假设您的标签内容不会换行到多行。
在我的Codepen 演示中可以看到我删除每个.boxes-container
的最后两个元素之后的空白空间的原始解决方案,但是ankita patel 的回答使用了一个相当优雅的表达式来覆盖最后一个和倒数第二个.box
元素:
.box:nth-last-of-type(-n+2)
一个简单的解决方案是使用边距(请注意,如果包装发生变化,则nth-child 解决方案将不起作用):
向box
添加margin: 5px
以替换 10px 的右侧和底部边距。
现在,对于容器boxes-container
您可以设置负margin: -5px
将box
es 拉到边缘。
除了label
的对齐方式之外,这会整理出所有内容。 在当前的标记中,没有通用的修复程序可以动态地适用于所有box
大小和box-container
宽度 - 因此您可以提供一些margin-top
来对齐它。
请参阅下面的演示:
.container { background-color: #ddd; display: flex; width: 200px; margin-bottom: 50px; } .label { margin-right: 10px; margin-top: 10px; /* adjust this*/ } .boxes-container { display: flex; flex-wrap: wrap; margin: -5px; /* NEW */ } .box { display: inline-block; height: 40px; width: 60px; /*margin-bottom: 10px; margin-right: 10px;*/ margin: 5px; /* NEW */ background-color: blue; }
<div class="container"> <label class="label">Tags:</label> <span class="boxes-container"> <span class="box"></span> <span class="box"></span> </span> </div> <div class="container"> <label class="label">Tags:</label> <span class="boxes-container"> <span class="box"></span> <span class="box"></span> <span class="box"></span> <span class="box"></span> </span> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.