Фиддл https://jsfiddle.net/mz2jmsdx/21/
Иконка внутри гексагона условно показана в виде чёрного квадрата, можно заполнить чем угодно и заложить для неё любые размеры.
Ответ 2
Полигоны можно создать с помощью SVG, указывая points по оси X & Y от 1 до 6.
Update 1.0: Добавил иконки, но есть один нюанс. Тег не действителен в SVG, поэтому я использовал иконки таким образом:
ðс1;
Затем добавил font-family:
svg text {
font-family: FontAwesome;
}
Update 1.1: Добавил анимацию вращения иконок:)
* {
margin: 0;
padding: 0;
user-select: none;
}
.wrapper {
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
}
svg text {
font-family: FontAwesome;
font-size: 1.5rem;
fill: #ffffff;
pointer-events: none;
transition: all .4s;
}
.hex {
fill: #FC635E;
stroke: #FE8682;
stroke-width: 2px;
transition: all .4s;
}
.hex:hover {
fill: #fff;
stroke: #FC635E;
}
.hex:hover+g text {
fill: #FC635E;
transform: rotate(360deg) scale(0.9);
}
Генератор кривоугольников.
Скрипт генерирует не только шестиугольники но и многогранники с любым количество
вершин. Вариант с равными гранями есть много где, поэтому в этом примере равные грани мы немного подправим, что бы фигуры стали более индивидуальными.
В данном примере мы делаем 4,5,6 и 7 угольники.
var svgNS = "http://www.w3.org/2000/svg";
var points;
for (var i = 0; i <= 3; i++) {
points = MakeIdealMnogogrannik(30, 4 + i);
for (var j = 1; j <= 3; j++) {
document.getElementById(`svg${i}${j}g`).appendChild(MakeRandomMnogogrannik(7));
}
}
function MakeIdealMnogogrannik(rad, n) {
var angle = 2 * Math.PI / n;
var points = [];
for (var i = 0; i < n; i++) {
points.push({
x: rad * Math.sin(angle * i),
y: -rad * Math.cos(angle * i)
});
}
return points;
}
function MakeRandomMnogogrannik(distance) {
var path = document.createElementNS(svgNS, "path");
var points1 = new Array(points.length);
for (var i = 0; i < points.length; i++) {
points1[i] = {
x: points[i].x + randomMax(distance),
y: points[i].y + randomMax(distance)
}
}
var d = `M ${points1[0].x} ${points1[0].y}`;
for (var i = 1; i < points.length; i++) {
d += ` L ${points1[i].x} ${points1[i].y}`;
}
d += " Z";
// path.classList.add("hex");
var rot = randomMax(360);
path.setAttribute("d", d);
return path;
}
function randomMax(max) {
return Math.floor(Math.random() * (max + 1));
}
body {
display: flex;
flex-direction: column;
}
.line {
display: flex;
justify-content: space-around;
}
.hex {
fill: #FC635E;
stroke: #FE8682;
stroke-width: 2px;
transition: all .4s;
}
.hex:hover {
fill: #fff;
stroke: #FC635E;
}
svg text {
font-family: FontAwesome;
font-size: 1.35rem;
fill: #ffffff;
pointer-events: none;
transition: all .4s;
}
.hex:hover+g text {
fill: #FC635E;
color: red;
}
Стили и часть разметки взяты из ответа St1myL.
Ответ 4
SVG конечно хорошо но если можно избежать других технологий то я стараюсь не применять ни чего кроме html и css.... надеюсь мой ответ помог понять
* {
margin: 0;
padding: 0;
}
.item {
width: 150px;
height: 60px;
background: red;
margin: 100px auto;
position: relative;
}
.item:after {
content: "";
display: block;
width: 150px;
height: 60px;
background: red;
position: ;
transform: rotate(45deg);
}
.item:before {
content: "";
display: block;
width: 150px;
height: 60px;
background: red;
position: ;
transform: rotate(-45deg);
position: absolute;
}
.outer {
width: 65px;
height: 147px;
background: red;
position: absolute;
left: 28%;
top: -71%;
margin-left: -0%;
border-radius: 4px;
z-index: 100;
line-height: 140px;
text-align: center;
}
Комментариев нет:
Отправить комментарий