Próbuję stworzyć jakąś mapę cieplną dla sieci, nad którą pracuję. Chciałem użyć ula na to, ponieważ wygląda fantazyjnie i daje mi świetne wykorzystanie przestrzeni.Tworzenie elastycznego, wypełniającego przestrzeń ula za pomocą CSS
jeśli znalazłem tę stronę, na której dowiedziałem się, jak używać sześciokątów z czystym CSS. ale to było bardzo zależne od wierszy i przesunięć. Cały mój interfejs użytkownika jest oparty na KnockoutJS i ma dynamiczną liczbę komputerów w sieci w danym momencie. (w większości pojemniki dokowane idą w górę lub w dół).
Klastry mogą się różnić od 1 do n + 1 węzłów.
Spojrzałem na tę stronę: CSS Hexagon i znalazłem kilka rozwiązań do zarządzania sześciokątami, ale wszystkie z nich są NAPRAWDĘ ograniczone w ich dynamicznym użyciu.
Jest to kod przeznaczone:
<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>
W oparciu o to, że daje sześciokąta kolor, który będzie wskazywać górę/w dół
Mam bita non nokaut skrzypce z mojego schematu flexbox pomysł , ale nie w pełni zrozumieć schematu flexbox że dobrze więc to oczywiście nie działa: 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>
Problemy biegnę na to:
- Jak skalować te DIV dynamicznie, niezależnie od liczby i zajmując maksymalną przestrzeń.
- Jak używać czystego rozwiązania CSS, aby upewnić się, że wszystkie "rzędy" są przesunięte o pół sześciokąta.
!! AKTUALIZACJA !!
Dodałem więc koncepcję wcześniej ustalonych wierszy: fiddle Ciągle szukam sposobu, aby przesunięcie wiersza było zależne od szerokości klasy ".hex". i mieć skalę klasy szesnastkowej z ilością elementów. ale myślę, że sama siatka wygląda teraz naprawdę dobrze.
idealnie chciałbym użyć czegoś podobnego :: nawet linii ale znaleźliśmy tylko :: first-line, aby zrobić przesunięcia dla sześciokątów. – Puzzle84
Jeśli już używasz nokautu, dlaczego potrzebujesz czystego rozwiązania CSS? Polecam wykonanie komponentu typu knockout i powiązanie atrybutów css z obliczonymi właściwościami, które obliczają skalowanie na podstawie liczby węzłów. –
Nie ma prawdziwego powodu, po prostu wyobrażałem sobie, że css jest o wiele ładniejszy od czasów ładowania ui. A jak byś zrobił logikę liniową parzystą/nieparzystą, jeśli twój ui reaguje? – Puzzle84