6 угольники по диагонали

Вообще делаю тут одну задачу, которую не могу решить, а именно на данный момент не могу расположить гексогены как показано на фото, так же не знаю как размер изменить для отдельных гексов как надо, создал объект с данными, и мапил его, в итоге получилось как на скрине как я сделал, сделал через объект потому что, в конечном итоге эти гексогены должны менять положение и данные внутри выбранного. Попробовал через грид, и как то не очень выглядит, но буду не против любых решений) Основная страница, ее css, и как мапил

import React, {useRef, useState} from "react";
import {InfoBlocks} from "./InfoBlocks";
import "../styles/main.css";
import {Hexogon} from "./Hexogon";

export const Main = () => {
    return (
        <main>
            <div className="versus-items">
                <div className="werh">
                    <div className="triangle-top">
                        <p>123</p>
                    </div>
                </div>
                <Hexogon/>
                <div className="niz">
                    <div className="triangle-bottom">
                        <p>123</p>
                    </div>
                </div>
            </div>
        </main>
    )
}

main {
    display: flex;
    height: 100%;
    justify-content: center;
    flex-wrap: wrap;
    flex-direction: column;
}

.werh:nth-child(1) {
    margin-right: 3%;
    height: 152px;
    z-index: 3;
    align-self: flex-start;
    flex: 1 1 auto;
}

.centre:nth-child(2) {
    align-self: center;
    flex: 0 1 auto;
}

.niz:nth-child(3) {
    margin-left: 3%;
    height: 152px;
    align-self: flex-end;
    flex: 1 1 auto;
}

.versus-items {
    display: flex;
    color: #FFFFFF;
    flex-direction: row;
    flex-wrap: wrap;
    align-content: center;
    justify-content: center;
}

.triangle-top {
    z-index: 3;
    height: 152px;
    display: flex;
    border-bottom-right-radius: 5px;
    border-top-right-radius: 20px;
    background: #FFF;
}
.triangle-top p {
    transform: skew(-150deg);
}

.triangle-bottom {
    height: 152px;
    display: flex;
    background: #FFF;
    border-top-left-radius: 5px;
    border-bottom-left-radius: 20px;
    align-items: center;
    justify-content: center;
}

.triangle-bottom p {
    transform: skew(-156deg);
}

.roundHex {
    position:relative;
    background: #FFF;
    border-radius:14px;
    height:320px;
    width:192px;
    z-index: 444;
    overflow-wrap: break-word;
}

.roundHex p {
    margin: 0;
    color: black;
}

.roundHex:before, .roundHex:after {
    content:"";
    position:absolute;
    top:0;
    left:0;
    background:inherit;
    border-radius:inherit;
    height:100%;
    width:100%;
    z-index: -1;
}
.roundHex:before {
    -webkit-transform:rotate(60deg);
    -moz-transform:rotate(60deg);
    transform:rotate(60deg);
}
.roundHex:after {
    -webkit-transform:rotate(-60deg);
    -moz-transform:rotate(-60deg);
    transform:rotate(-60deg);
}

.hexparty {
    position: absolute;
}

import React from "react";
import {InfoBlocks} from "./InfoBlocks";
import '../styles/main.css'

export const Hexogon = () => {
    return (
        <div className="hexparty">
            <div className="centre">
                {InfoBlocks.map((block) =>
                    <div className="roundHex">
                        <p>{block.date}</p>
                    </div>
                )}
            </div>
        </div>
    )
}

Ответы (2 шт):

Автор решения: xydope

не могу расположить гексогены как показано на фото

У вас шестиугольники расположены на окружности. Один гекс вам нужно расположить слева в центре, другой справа в центре, после чего окружность можно повернуть через transform: rotate(45deg) (ваш угол укажите), после чего не забудьте свои гексы выровнять обратным поворотом:

.hex {
  transform: rotate(-45deg)
}

пример позиционирования на окружности.

как размер изменить для отдельных гексов

Правильный шестиугольник имеет радиус, сделайте компонент Hexagon, который при рендеринге получает проп radius и строит шестиугольник нужного размера. <Hexagon radius='200' />

→ Ссылка
Автор решения: Zombotron

Вот на чистых html+css. В Хроме и Огнелисе адаптивно, в режиме адаптивного дизайна тоже. На физическом моб. не проверял.

body {
    margin: 0;
    padding: 0;
    overflow: hidden;
}
    
.hex-cont {
    position: relative;
}

.circle_1, .circle_2 {
    position: absolute;
    width: 36vw;
    height: 36vw;
    border: 1px solid gray;
    border-radius: 50%;
    left: calc(50vw - 36vw / 2);
    top: calc(50vh - 36vw / 2);
    transform: rotate(-30deg);
}

.circle_2 {
    width: 60vw;
    height: 60vw;
    left: calc(50% - 60vw / 2);
    top: calc(50vh - 60vw / 2);
}
    
.hexagon {
    position: absolute;
    transform: rotate(30deg);
}
    
.hexagon_0 {
    width: 20vw;
    height: 17.4vw;
    left: calc(50vw - 20vw / 2);
    top: calc(50vh - 17.4vw / 2);
    transform: rotate(0deg);
}
    
.hexagon_1, .hexagon_-1 {
    width: 12vw;
    height: 10.44vw;
    left: calc(50% + 18vw - 12vw / 2);
    top: calc(50% - 10.44vw / 2);
}
    
.hexagon_-1 {
    left: calc(-12vw / 2);
}

.hexagon_2, .hexagon_-2 {
    width: 8vw;
    height: 6.96vw;
    left: calc(50% + 30vw - 8vw / 2);
    top: calc(50% - 6.96vw / 2);
}
    
.hexagon_-2 {
    left: calc(-8vw / 2);
}

.hexagon > div {
    width: 50%;
    height: 100%;
    position: absolute;
    left: 25%;
    border-radius: 10%;
    background-color: #82C6BE;
}

.hexagon > div::before, .hexagon > div::after {
    content: "";
    display: block;
    width: 17%;
    height: 8%;
    background-color: #82C6BE;
    transform: rotate(-30deg);
    border-radius: 50%;
    margin-left: -4%;
    margin-top: 1%;
}
.hexagon > div::after {
    margin-left: 87%;
    margin-top: 144%;
}

.hexagon > .f {
    transform: rotate(0deg);
}
.hexagon > .s {
    transform: rotate(60deg);
}
.hexagon > .t {
    transform: rotate(-60deg);
}

.line_1, .line_2 {
    width: calc(50%);
    height: calc(17.4vw / 2);
    position: absolute;
    top: calc(50vh - 17.4vw / 2);
    transform: skew(-30deg);
    background-color: #82C6BE;
    border-radius: 10px;
}
.line_1 {
    left: -9vw;
}
.line_2 {
    right: -9vw;
    top: calc(50vh);
}
    <div class="hex-cont">
        <div class="hexagon hexagon_0">
            <div class="f"></div>
            <div class="s"></div>
            <div class="t"></div>
        </div>
        <div class="circle_1">
            <div class="hexagon hexagon_1">
                <div class="f"></div>
                <div class="s"></div>
                <div class="t"></div>
            </div>
            <div class="hexagon hexagon_-1">
                <div class="f"></div>
                <div class="s"></div>
                <div class="t"></div>
            </div>
        </div>
        <div class="circle_2">
            <div class="hexagon hexagon_2">
                <div class="f"></div>
                <div class="s"></div>
                <div class="t"></div>
            </div>
            <div class="hexagon hexagon_-2">
                <div class="f"></div>
                <div class="s"></div>
                <div class="t"></div>
            </div>
        </div>
        <div class="line_1"></div>
        <div class="line_2"></div>
    </div>

Надписи стало лень выводить и стилизировать. Пробуйте.

upd: css:

.hexagon span {
    position: ansolute;
    font-family: serif;
    color: #123456;
}

js:

var span = document.createElement('span');
span.style.left = '10px';
span.style.top = '10px';
span.style.fontSize = '0.7em';
span.innerHTML = InfoBlocks[0].place; // тут в зависимости от структуры
document.querySelector(".hexagon.hexagon_NN").appendChild(span); // NN - номер гекса

И таких js-операций столько, сколько строк - 14 видимых и +сколько-то тех, которые будут появляться при сдвиге (в ф-цию засунуть).

А вот реализацию слайдера я не знаю какую, с таким расположением много чего интересного выдумать можно...

→ Ссылка