(尽管Ana的答案是在我的几个月后提出的,可能以我的作为基础来“思考”,但她能够提出一种使用单个方法的事实div
值得推广,因此也请查看她的答案-但是请注意,十六进制中的内容受到限制。)
这是一个真正令人惊讶的问题。感谢您的询问。伟大的事实是:
原始小提琴(在以后的编辑中对小提琴的链接进行了修改)-它使用了imgur.com图像,加载时似乎不太可靠,所以新的小提琴正在使用photobucket.com(让我知道是否存在持久性图片加载问题)。我已经把原来的链接,因为解释下面的代码与(也有在一些区别进入background-size
或position
新的小提琴)。
在读完您的问题后,这个想法几乎立刻传给我,但是花了一些时间来实现。我本来尝试使用div
只有一个伪元素的单个“十六进制” ,但是据我所知,没有办法只旋转background-image
(我需要的),所以我必须添加一些额外的div
元素才能正确使用/十六进制的左侧,这样我就可以将伪元素用作background-image
旋转方式。
我在IE9,FF和Chrome中进行了测试。理论上,任何支持CSS3的浏览器transform
都可以在其中运行。
第一次主要更新(添加说明)
我现在有一些时间来发布一些代码说明,所以去了:
首先,六边形由30/60度关系和三角函数定义,因此这些将成为所涉及的关键角度。其次,我们从十六进制网格的“行”开始。HTML定义为(额外的div
元素有助于构建十六进制):
<div class="hexrow">
<div>
<span>First Hex Text</span>
<div></div>
<div></div>
</div>
<div>
<span>Second Hex Text</span>
<div></div>
<div></div>
</div>
<div>
<span>Third Hex Text</span>
<div></div>
<div></div>
</div>
</div>
我们将使用inline-block
六边形display
,但我们不希望它们意外包裹到下一行并破坏网格,因此white-space: nowrap
可以解决该问题。该margin
行上的行将取决于您希望在十六进制之间的空间,并且可能需要进行一些实验才能获得所需的内容。
.hexrow {
white-space: nowrap;
margin: 0 25px 3px;
}
通过使用的直接子元素(.hexrow
这些div
元素只是元素),我们形成了十六进制形状的基础。所述width
将驱动水平十六进制的顶部时,height
从该数,因为所有的侧面上的正六边形等长的。同样,边距将取决于间距,但这是单个六边形的“重叠”将发生的地方,以使网格看起来更美观。该background-image
定义一次,就在这里。左移至少要容纳十六进制左侧增加的宽度。假设您要居中text-align
放置文本,则该句柄将水平放置(当然),但与line-height
匹配的则将height
允许垂直居中。
.hexrow > div {
width: 100px;
height: 173.2px;
margin: 0 25px;
position: relative;
background-image: url(http://i.imgur.com/w5tV4.jpg);
background-position: -50px 0;
background-repeat: no-repeat;
color: #ffffff;
text-align: center;
line-height: 173.2px;
display: inline-block;
}
我们将相对于“行”向下移的每个奇数十六进制,而每个偶数向上移。偏移计算(width x cos(30)/ 2)也与(height / 4)相同。
.hexrow > div:nth-child(odd) {
top: 43.3px;
}
.hexrow > div:nth-child(even) {
top: -44.8px;
}
我们使用2个子div
元素来创建十六进制的“翅膀”。它们的大小与主六角形矩形相同,然后旋转,然后推到“主六角形”下方。Background-image
是继承的,因此图像是相同的(当然),因为“机翼”中的图像将与主矩形中的图像“对齐”。伪元素用于生成图像,因为它们需要“重新旋转”回水平(因为我们旋转了div
它们的父级以创建“翅膀”)。
第:before
一个的会转换其背景的负量宽度,其宽度等于十六进制的主要部分加上主要十六进制的原始背景偏移。所述:before
第二的将改变翻译的原点,将主移位宽度在x轴,和在y轴高度的一半。
.hexrow > div > div:first-of-type {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: -1;
overflow: hidden;
background-image: inherit;
-ms-transform:rotate(60deg);
-moz-transform:rotate(60deg);
-webkit-transform:rotate(60deg);
-o-transform:rotate(60deg);
transform:rotate(60deg);
}
.hexrow > div > div:first-of-type:before {
content: '';
position: absolute;
width: 200px;
height: 100%;
background-image: inherit;
background-position: top left;
background-repeat: no-repeat;
bottom: 0;
left: 0;
z-index: 1;
-ms-transform:rotate(-60deg) translate(-150px, 0);
-moz-transform:rotate(-60deg) translate(-150px, 0);
-webkit-transform:rotate(-60deg) translate(-150px, 0);
-o-transform:rotate(-60deg) translate(-150px, 0);
transform:rotate(-60deg) translate(-150px, 0);
-ms-transform-origin: 0 0;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
}
.hexrow > div > div:last-of-type {
content: '';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: -2;
overflow: hidden;
background-image: inherit;
-ms-transform:rotate(-60deg);
-moz-transform:rotate(-60deg);
-webkit-transform:rotate(-60deg);
-o-transform:rotate(-60deg);
transform:rotate(-60deg);
}
.hexrow > div > div:last-of-type:before {
content: '';
position: absolute;
width: 200px;
height: 100%;
background-image: inherit;
background-position: top left;
background-repeat: no-repeat;
bottom: 0;
left: 0;
z-index: 1;
-ms-transform:rotate(60deg) translate(100px, 86.6px);
-moz-transform:rotate(60deg) translate(100px, 86.6px);
-webkit-transform:rotate(60deg) translate(100px, 86.6px);
-o-transform:rotate(60deg) translate(100px, 86.6px);
transform:rotate(60deg) translate(100px, 86.6px);
-ms-transform-origin: 100% 0;
-webkit-transform-origin: 100% 0;
-moz-transform-origin: 100% 0;
-o-transform-origin: 100% 0;
transform-origin: 100% 0;
}
这将span
容纳您的文本。该line-height
是复位,使文本行正常,但vertical-align: middle
因为作品line-height
是在父较大。该white-space
复位,因此允许再次包装。可以将左/右页边距设置为负数,以使文本进入十六进制的“翅膀”。
.hexrow > div > span {
display: inline-block;
margin: 0 -30px;
line-height: 1.1;
vertical-align: middle;
white-space: normal;
}
您可以单独指定目标行和这些行中的单元格以更改图像,span
文本设置或不透明度,或容纳较大的图像(将其移至所需位置),等等。下面是第二行的操作。
.hexrow:nth-child(2) > div:nth-child(1) {
background-image: url(http://i.imgur.com/7Un8Y.jpg);
}
.hexrow:nth-child(2) > div:nth-child(1) > span {
margin: 0 -20px;
color: black;
font-size: .8em;
font-weight: bold;
}
.hexrow:nth-child(2) > div:nth-child(2) {
background-image: url(http://i.imgur.com/jeSPg.jpg);
}
.hexrow:nth-child(2) > div:nth-child(3) {
background-image: url(http://i.imgur.com/Jwmxm.jpg);
background-position: -150px -120px;
opacity: .3;
color: black;
}
.hexrow:nth-child(2) > div:nth-child(3) > div:before {
background-position: -100px -120px;
}
.hexrow:nth-child(2) > div:nth-child(4) {
background-image: url(http://i.imgur.com/90EkV.jpg);
background-position: -350px -120px;
}
.hexrow:nth-child(2) > div:nth-child(4) > div:before {
background-position: -300px -120px;
}