【发布时间】:2017-05-25 09:33:28
【问题描述】:
我正在尝试为我正在处理的网络创建某种热图。 我想为此使用一个蜂箱,因为它看起来很漂亮,并且可以很好地利用空间。
如果找到这个网站,我在该网站上找到了如何使用纯 CSS 的六边形。 但它严重依赖行和偏移量。我的整个 UI 都是 KnockoutJS 驱动的,并且在任何给定时间在网络上都有动态数量的 PC。 (主要是 docker 容器上升或下降)。
集群可以在 1 到 n+1 个节点之间变化。
我看了这个网站:CSS Hexagon 并找到了几种管理六边形的解决方案,但它们的动态使用都非常有限。
这是预期的代码:
<div class="panel-body>
{{noescape "<!-- ko foreach: { data: vm.dash().nodes, as: 'node' } -->" }}
<span class="flex-span" data-bind="attr: { 'id': node.id }, css: { up: node.Status == 2, down: node.Status != 2 }">⬢</span>
{{noescape "<!-- /ko -->"}}
</div>
基于此,它会给六边形一个颜色来指示向上/向下
我已经对我的 flexbox 想法提出了一个非淘汰的小提琴,但我并不真正了解 flexbox,所以它显然不起作用:Fiddle
#container {
max-width:400px;
max-height:400px;
}
.hex:before {
content: " ";
width: 0; height: 0;
border-bottom: 30px solid #6C6;
border-left: 52px solid transparent;
border-right: 52px solid transparent;
position: absolute;
top: -30px;
flex-shrink: 1;
flex-grow:1;
flex-basis: 130px;
}
.hex {
margin-top: 30px;
width: 104px;
height: 60px;
background-color: #6C6;
position: relative;
float:left;
margin-bottom:30px;
flex-shrink: 1;
flex-grow:1;
flex-basis: 130px;
}
.hex:after {
content: "";
width: 0;
position: absolute;
bottom: -30px;
border-top: 30px solid #6C6;
border-left: 52px solid transparent;
border-right: 52px solid transparent;
flex-shrink: 1;
flex-grow:1;
flex-basis: 130px;
}
<div id="container">
<div class=hex></div>
<div class=hex></div>
<div class=hex></div>
<div class=hex></div>
<div class=hex></div>
<div class=hex></div>
<div class=hex></div>
<div class=hex></div>
<div class=hex></div>
<div class=hex></div>
</div>
我遇到的问题是:
- 如何动态缩放这些 div,而不考虑数量,并占用最大空间。
- 如何使用纯 CSS 解决方案来确保所有偶数“行”都偏移半个六边形。
!!更新!!
所以我添加了预定行的概念:fiddle 我仍在寻找一种方法来使行偏移量取决于“.hex”类宽度。并具有元素数量的十六进制类比例。但我认为网格本身现在看起来非常好。
【问题讨论】:
-
理想情况下,我会使用 ::even-line 之类的东西,但我只能找到 ::first-line 来对六边形进行偏移。
-
如果您已经在使用 Knockout,为什么还需要纯 CSS 解决方案?我建议制作一个淘汰组件并将您的 css 属性绑定到根据节点数计算缩放的计算属性。
-
没有真正的原因,我只是想象 css 对 ui 加载时间更好。如果您的 ui 是响应式的,您将如何处理偶数/奇数行逻辑?
-
这是你试图做的吗? jsfiddle.net/ndy71xos/1(
:nth-child(xn)适用于第 3 行)。要在大小变化时使六边形变大/缩小,请不要使用像素,但最终 % .Flex 不会有助于调整 .hex 的高度或伪元素 -
这正是我想要的 GCyrillus,至于 % 这很好,但我想我必须制定一些关于何时使 % 更小的规则?这可以自动完成吗?假设我将其设置为 33%,所以我连续有 3 个。 CSS 是否知道行何时超过了父级的边界? % 应该缩小到 25%?
标签: html css knockout.js flexbox