Я пытаюсь создать сетку шестиугольников для веб-страницы, где каждый шестиугольник кликабелен, что перенаправит меня на другую веб-страницу. Я искал в Интернете и нашел этот базовый исходный код на GitHub: https://github.com/web-tiki/responsive-grid-of-hexagons.
Кроме того, могу ли я узнать, как отобразить текст в шестиугольнике вместо того, чтобы наводить курсор на негопоявиться?
Спасибо всем за помощь!
Я использую этот код CSS:
* {
margin: 0;
padding: 0;
}
body {
background: rgb(123, 158, 158);
}
#hexGrid {
display: flex;
flex-wrap: wrap;
width: 90%;
margin: 0 auto;
overflow: hidden;
font-family: 'Raleway', sans-serif;
font-size: 15px;
list-style-type: none;
}
.hex {
position: relative;
visibility:hidden;
outline:1px solid transparent; /* fix for jagged edges in FF on hover transition */
}
.hex::after{
content:'';
display:block;
padding-bottom: 86.602%; /* = 100 / tan(60) * 1.5 */
}
.hexIn{
position: absolute;
width:96%;
padding-bottom: 110.851%; /* = width / sin(60) */
margin:0 2%;
overflow: hidden;
visibility: hidden;
outline:1px solid transparent; /* fix for jagged edges in FF on hover transition */
-webkit-transform: rotate3d(0,0,1,-60deg) skewY(30deg);
-ms-transform: rotate3d(0,0,1,-60deg) skewY(30deg);
transform: rotate3d(0,0,1,-60deg) skewY(30deg);
}
.hexIn * {
position: absolute;
visibility: visible;
outline:1px solid transparent; /* fix for jagged edges in FF on hover transition */
}
.hexLink {
display:block;
width: 100%;
height: 100%;
text-align: center;
color: #fff;
overflow: hidden;
-webkit-transform: skewY(-30deg) rotate3d(0,0,1,60deg);
-ms-transform: skewY(-30deg) rotate3d(0,0,1,60deg);
transform: skewY(-30deg) rotate3d(0,0,1,60deg);
}
/*** HEX CONTENT **********************************************************************/
.hex img {
left: -100%;
right: -100%;
width: auto;
height: 100%;
margin: 0 auto;
-webkit-transform: rotate3d(0,0,0,0deg);
-ms-transform: rotate3d(0,0,0,0deg);
transform: rotate3d(0,0,0,0deg);
}
.hex h1, .hex p {
width: 100%;
padding: 5%;
box-sizing:border-box;
background-color: rgba(0, 128, 128, 0.8);
font-weight: 300;
-webkit-transition: -webkit-transform .2s ease-out, opacity .3s ease-out;
transition: transform .2s ease-out, opacity .3s ease-out;
}
.hex h1 {
bottom: 50%;
padding-top:50%;
font-size: 1.5em;
z-index: 1;
-webkit-transform:translate3d(0,-100%,0);
-ms-transform:translate3d(0,-100%,0);
transform:translate3d(0,-100%,0);
}
.hex h1::after {
content: '';
position: absolute;
bottom: 0;
left: 45%;
width: 10%;
text-align: center;
border-bottom: 1px solid #fff;
}
.hex p {
top: 50%;
padding-bottom:50%;
-webkit-transform:translate3d(0,100%,0);
-ms-transform:translate3d(0,100%,0);
transform:translate3d(0,100%,0);
}
/*** HOVER EFFECT **********************************************************************/
.hexLink:hover h1, .hexLink:focus h1,
.hexLink:hover p, .hexLink:focus p{
-webkit-transform:translate3d(0,0,0);
-ms-transform:translate3d(0,0,0);
transform:translate3d(0,0,0);
}
/*** HEXAGON SIZING AND EVEN ROW INDENTATION *****************************************************************/
@media (min-width:1201px) { /* <- 5-4 hexagons per row */
#hexGrid{
padding-bottom: 4.4%
}
.hex {
width: 33.333%; /* = 100 / 3 */
}
.hex:nth-child(7n+4){ /* first hexagon of even rows */
margin-left:16.666%; /* = width of .hex / 2 to indent even rows */
}
}
@media (max-width: 1200px) and (min-width:901px) { /* <- 4-3 hexagons per row */
#hexGrid{
padding-bottom: 5.5%
}
.hex {
width: 33.333%; /* = 100 / 3 */
}
.hex:nth-child(7n+4){ /* first hexagon of even rows */
margin-left:16.666%; /* = width of .hex / 2 to indent even rows */
}
}
@media (max-width: 900px) and (min-width:601px) { /* <- 3-2 hexagons per row */
#hexGrid{
padding-bottom: 7.4%
}
.hex {
width: 33.333%; /* = 100 / 3 */
}
.hex:nth-child(5n+4){ /* first hexagon of even rows */
margin-left:16.666%; /* = width of .hex / 2 to indent even rows */
}
}
@media (max-width: 600px) { /* <- 2-1 hexagons per row */
#hexGrid{
padding-bottom: 11.2%
}
.hex {
width: 50%; /* = 100 / 3 */
}
.hex:nth-child(3n+3){ /* first hexagon of even rows */
margin-left:25%; /* = width of .hex / 2 to indent even rows */
}
}
@media (max-width: 400px) {
#hexGrid {
font-size: 13px;
}
}
HTML-код:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="hexagons.css">
<link href='https://fonts.googleapis.com/css?family=Raleway:300' rel='stylesheet' type='text/css'>
</head>
<body>
<ul id="hexGrid">
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt=""/>
<h1>Text here</h1>
</a>
</div>
</li>
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt=""/>
<h1>Text here</h1>
</a>
</div>
</li>
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt="" />
<h1>Text here</h1>
</a>
</div>
</li>
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt="" />
<h1>Text here</h1>
</a>
</div>
</li>
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt="" />
<h1>Text here</h1>
</a>
</div>
</li>
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt="" />
<h1>Text here</h1>
</a>
</div>
</li>
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt="" />
<h1>Text here</h1>
</a>
</div>
</li>
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt="" />
<h1>Text here</h1>
</a>
</div>
</li>
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt="" />
<h1>Text here</h1>
</a>
</div>
</li>
<li class="hex">
<div class="hexIn">
<a class="hexLink" href="#">
<img src="" alt="" />
<h1>Text here</h1>
</a>
</div>
</li>
</ul>
</body>
</html>
Я пытаюсь использовать базовый код на GitHub для создания, но он появляется в другом порядке (3-2-3-2). Тем не менее, я хочу, чтобы он был в определенном порядке, в частности, 3-4-3 дерева: https://imgur.com/a/TGaF7SB
Я следовал логике, в соответствии с которой;
Настроить с помощью элементов .hexwith:
w = width of the .hex elements in percent
x = the number of hexagons you want on the odd rows (1st, 3rd, 5th...)
w = 100 / x
Пример для 8 шестиугольников на нечетных строках (это означает, что в четных строках будет 7 шестиугольников):
w = 100 / 8 = 12.5%
Отступ четных строк Четные строки (2-й, 4-й, 6-й ...) с отступом в левом поле первого шестиугольника четных строк.
Селектор: Вы можете выбрать этот шестиугольник с помощью селектора .hex: nth-child (an + b) (большеинформация о псевдоклассе nth-child () по MDN). Чтобы определить селектор, вы можете использовать это правило:
.hex:nth-child(an+b)
x = the number of hexagons on odd rows(1st, 3rd, 5th...)
y = the number of hexagons on even rows(2nd, 4th, 6th...)
a = x + y
b = x + 1
Пример для 8 шестиугольников в нечетных строках (это означает, что в четных строках будет 7 шестиугольников):
x = 8
y = 7
a = 8 + 7 = 15
b = 8 + 1 = 9
селектор: .hex: nth-child (15n + 9)