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 шт):
не могу расположить гексогены как показано на фото
У вас шестиугольники расположены на окружности. Один гекс вам нужно расположить слева в центре, другой справа в центре, после чего окружность можно повернуть через transform: rotate(45deg) (ваш угол укажите), после чего не забудьте свои гексы выровнять обратным поворотом:
.hex {
transform: rotate(-45deg)
}
пример позиционирования на окружности.
как размер изменить для отдельных гексов
Правильный шестиугольник имеет радиус, сделайте компонент Hexagon, который при рендеринге получает проп radius и строит шестиугольник нужного размера.
<Hexagon radius='200' />
Вот на чистых 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 видимых и +сколько-то тех, которые будут появляться при сдвиге (в ф-цию засунуть).
А вот реализацию слайдера я не знаю какую, с таким расположением много чего интересного выдумать можно...