【发布时间】:2019-08-16 03:11:33
【问题描述】:
我有以下 HTML/CSS:
.item {
border: 1px solid gray;
text-align: center;
box-sizing: border-box;
padding: 10px;
}
.flex-row {
width: 100%;
display: flex;
justify-content: space-around;
margin-top: 10px;
}
<div class="flex-row">
<div class="item" style="width: 25%;">
25%
</div>
<div class="item" style="width: 25%;">
25%
</div>
<div class="item" style="width: 10%;">
10%
</div>
<div class="item" style="width: 20%;">
20%
</div>
<div class="item" style="width: 20%;">
20%
</div>
</div>
<div class="flex-row">
<div class="item" style="width: 50%;">
50%
</div>
<div class="item" style="width: 18%;">
18%
</div>
<div class="item" style="width: 12%;">
12%
</div>
<div class="item" style="width: 20%;">
20%
</div>
</div>
(注意,我的项目中实际上并没有上面的代码,它是由ngFor中的angular生成的,但这无关紧要。)
我想在可以检测悬停和 mousedown 事件的 flexbox 中的这些 div 之间插入间距,如下所示:
.item {
border: 1px solid gray;
text-align: center;
box-sizing: border-box;
padding: 10px;
}
.spacer {
width: 25px;
}
.spacer:hover {
cursor: pointer;
background-color: blue;
}
.flex-row {
width: 100%;
display: flex;
justify-content: space-around;
margin-top: 10px;
}
<div class="flex-row">
<div class="item" style="width: 25%;">
25%
</div>
<div class="spacer" (mousedown)="someFunction()"></div>
<div class="item" style="width: 25%;">
25%
</div>
<div class="spacer" (mousedown)="someFunction()"></div>
<div class="item" style="width: 10%;">
10%
</div>
<div class="spacer" (mousedown)="someFunction()"></div>
<div class="item" style="width: 20%;">
20%
</div>
<div class="spacer" (mousedown)="someFunction()"></div>
<div class="item" style="width: 20%;">
20%
</div>
</div>
<div class="flex-row">
<div class="item" style="width: 50%;">
50%
</div>
<div class="spacer" (mousedown)="someFunction()"></div>
<div class="item" style="width: 18%;">
18%
</div>
<div class="spacer" (mousedown)="someFunction()"></div>
<div class="item" style="width: 12%;">
12%
</div>
<div class="spacer" (mousedown)="someFunction()"></div>
<div class="item" style="width: 20%;">
20%
</div>
</div>
(再次提醒,这里不用担心(mousedown)调用的语法,只要知道我点击空格键就想调用一个函数)
这里的问题是垫片破坏了弹性盒的流动(如预期的那样)。两个 25% 的元素不再与后面一行的 50% 元素完美对齐。
我发现使用border-box 可以很容易地在弹性元素之间放置空格并保持对齐,但我无法弄清楚如何在不破坏布局的情况下额外跟踪空格上的鼠标悬停/单击事件。
【问题讨论】:
-
你可以使用
display: grid来代替flexbox吗? -
@IronFlare 这是一个内部应用程序,所以我可以确保用户使用支持网格的浏览器。只要该解决方案支持每行任意数量的元素,并动态适应其他元素/改变宽度。所以
display: grid很好。 -
好的,您是否需要知道 哪个 分隔符悬停在上面,或者无论如何调用的函数是否相同,而不依赖于有关事件目标的数据?跨度>
-
我需要知道点击的是哪一个。我打算将索引从
ngFor传递到调用的函数中。 -
好的。你有预定义的一组可能的单元格宽度吗?