蜂巢式图片墙布局

时间:2022-01-07 08:13:43

蜂巢式图片布局类似这样的布局方式,一般主要用在导航,或者图片展示.

蜂巢式图片墙布局蜂巢式图片墙布局   蜂巢式图片墙布局

六边形的图片墙比普通正方形的图片排版比起来更加新颖,灵活,有新意.正六边形的图片展示还给人一种炫酷的感觉.并且带有特殊的规则感.

先做一个正六边形的DEMO:

蜂巢式图片墙布局蜂巢式图片墙布局   蜂巢式图片墙布局

怎么做一个六边形?其实是三个矩形div旋转60deg得到的,例如中间横着的橙色矩形。

先假定正六边形每个边的边长是100px,那么高度为173px(也就是矩形的宽度).

html代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <style type="text/css">
 7         .box{
 8             margin: 100px auto;
 9         }
10         .comm{
11             height: 100px;
12             width: 173px;
13             position: absolute;
14         }
15         .first{
16             background-color: orange;
17         }
18         .second{
19             background-color: orchid;
20             transform: rotate(60deg);
21             -moz-transform: rotate(60deg);
22             -webkit-transform: rotate(60deg);
23             -ms-transform: rotate(60deg);
24             -o-transform: rotate(60deg);
25         }
26         .third{
27             background-color: palegreen;
28             transform: rotate(-60deg);
29             -moz-transform: rotate(-60deg);
30             -webkit-transform: rotate(-60deg);
31             -ms-transform: rotate(-60deg);
32             -o-transform: rotate(-60deg);
33         }
34     </style>
35 </head>
36 <body>
37 <div class="box">
38     <div class="comm first"></div>
39     <div class="comm second"></div>
40     <div class="comm third"></div>
41 </div>
42 </body>
43 </html>

效果截图:

蜂巢式图片墙布局

注意:first second third 这三个div要绝对定位.并顺时针和逆时针旋转其中两个.

接下来就是把图片裁剪成六边形,先在first的div中加入图片.

 
1 <div class="comm first">
2     <img src="img/1.jpg" alt="花花姑娘" title="花花姑娘" class="firstImg">
3 </div>
 

注意:图片的宽度为div的宽度,高度为两倍div高度。为了图片不失真,最好把图片尺寸的高宽比裁为 根号3比2的。

蜂巢式图片墙布局

first的z-index:999999;===在最顶层展示;

这里的图片还要向上移动一点,上移动图片高度的一半就可以.

1 .firstImg{
2          margin-top: -50px;
3   }

设置父级first的css属性overflow:hidden;就可以裁剪了.

蜂巢式图片墙布局

加入第二张和第三张图片:

第二张图片,第三张图片和第一张图片是同一张图片;类名不一样.

 1 <div class="box">
 2     <div class="comm first">
 3         <img src="img/1.jpg" alt="花花姑娘" title="花花姑娘" class="firstImg">
 4     </div>
 5     <div class="comm second">
 6         <img src="img/1.jpg" alt="花花姑娘" title="花花姑娘" class="secondImg">
 7     </div>
 8     <div class="comm third">
 9         <img src="img/1.jpg" alt="花花姑娘" title="花花姑娘" class="thirdImg">
10     </div>
11 </div>

因为插入的图片父级是旋转过的,所以此处需要图片旋转回来.与第一张图片拼合起来.还需要margin-top: -50px;

 

蜂巢式图片墙布局  蜂巢式图片墙布局

 1         .secondImg{
 2             transform: rotate(-60deg);
 3             -moz-transform: rotate(-60deg);
 4             -webkit-transform: rotate(-60deg);
 5             -ms-transform: rotate(-60deg);
 6             -o-transform: rotate(-60deg);
 7             margin-top: -50px;
 8         }
 9         .thirdImg{
10             transform: rotate(60deg);
11             -moz-transform: rotate(60deg);
12             -webkit-transform: rotate(60deg);
13             -ms-transform: rotate(60deg);
14             -o-transform: rotate(60deg);
15             margin-top: -50px;
16         }

第二张图片旋转回来,第三张图片旋转回来.

蜂巢式图片墙布局

得到了正六边形.

六边形的边其实是三个div的左边框及右边框围成的。所以只用设置border-left及border-right。

但要注意边框不要设置过大,否则会出现缺口,像这样:

蜂巢式图片墙布局

之后我尝试使用border-style:inset;去解决这个问题.效果不理想;还是建议把border设置成1px的宽度.

蜂巢式图片墙布局

 代码整理:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>蜂巢式图片墙布局</title>
 6     <style type="text/css">
 7         .box{
 8             margin: 100px auto;
 9         }
10         .comm{
11             height: 100px;
12             width: 173px;
13             position: absolute;
14         }
15         .first{
16             background-color: orange;
17             z-index: 999999;
18             overflow: hidden;
19             border-left: 1px solid orange;
20             border-right: 1px solid orange;
21         }
22         .second{
23             background-color: orchid;
24             overflow: hidden;
25             transform: rotate(60deg);
26             -moz-transform: rotate(60deg);
27             -webkit-transform: rotate(60deg);
28             -ms-transform: rotate(60deg);
29             -o-transform: rotate(60deg);
30             border-left: 1px solid orange;
31             border-right: 1px solid orange;
32         }
33         .third{
34             background-color: palegreen;
35             overflow: hidden;
36             transform: rotate(-60deg);
37             -moz-transform: rotate(-60deg);
38             -webkit-transform: rotate(-60deg);
39             -ms-transform: rotate(-60deg);
40             -o-transform: rotate(-60deg);
41             border-left: 1px solid orange;
42             border-right: 1px solid orange;
43         }
44         .firstImg{
45             margin-top: -50px;
46         }
47         .secondImg{
48             transform: rotate(-60deg);
49             -moz-transform: rotate(-60deg);
50             -webkit-transform: rotate(-60deg);
51             -ms-transform: rotate(-60deg);
52             -o-transform: rotate(-60deg);
53             margin-top: -50px;
54         }
55         .thirdImg{
56             transform: rotate(60deg);
57             -moz-transform: rotate(60deg);
58             -webkit-transform: rotate(60deg);
59             -ms-transform: rotate(60deg);
60             -o-transform: rotate(60deg);
61             margin-top: -50px;
62         }
63     </style>
64 </head>
65 <body>
66 <div class="box">
67     <div class="comm first">
68         <img src="img/1.jpg" alt="花花姑娘" title="花花姑娘" class="firstImg">
69     </div>
70     <div class="comm second">
71         <img src="img/1.jpg" alt="花花姑娘" title="花花姑娘" class="secondImg">
72     </div>
73     <div class="comm third">
74         <img src="img/1.jpg" alt="花花姑娘" title="花花姑娘" class="thirdImg">
75     </div>
76 </div>
77 </body>
78 </html>

 导航菜单:

蜂巢式图片墙布局

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>蜂巢</title>
  6     <style type="text/css">
  7         .hex{
  8             float: left;
  9             margin-left: 2px;
 10             margin-bottom: -18px;
 11             cursor: pointer;
 12         }
 13         .hex_top{
 14             width: 0;
 15             border-bottom: 20px solid orange;
 16             border-left: 35px solid transparent;
 17             border-right: 35px solid transparent;
 18             margin-top: -1px\9\0;
 19             margin-top: 0px\0;
 20         }
 21         .hex_middle {
 22             width: 70px;
 23             height: 30px;
 24             line-height: 30px;
 25             background: orange;
 26             text-align: center;
 27             font-family: "宋体";
 28             color: #FFFFFF;
 29         }
 30         .hex_bottom {
 31             width: 0;
 32             border-top: 20px solid orange;
 33             border-left: 35px solid transparent;
 34             border-right: 35px solid transparent;
 35             margin-top: -1px\9\0;
 36             margin-top: 0px\0;
 37         }
 38         .hex-row.even{
 39             margin-left: 38px;
 40         }
 41         .hex-row {
 42             clear: left;
 43         }
 44         .hex.hexActive .hex_top{
 45             width: 0;
 46             border-bottom: 20px solid #86ccac;
 47             border-left: 35px solid transparent;
 48             border-right: 35px solid transparent;
 49             margin-top: -1px\9\0;
 50             margin-top: 0px\0;
 51         }
 52         .hex.hexActive .hex_middle{
 53             width: 70px;
 54             height: 30px;
 55             line-height: 30px;
 56             background: #86ccac;
 57             text-align: center;
 58             font-family: "宋体";
 59             color: #FFFFFF;
 60         }
 61         .hex.hexActive .hex_bottom{
 62             width: 0;
 63             border-top: 20px solid #86ccac;
 64             border-left: 35px solid transparent;
 65             border-right: 35px solid transparent;
 66             margin-top: -1px\9\0;
 67             margin-top: 0px\0;
 68         }
 69     </style>
 70 </head>
 71 <body>
 72 <div class="hex">
 73     <div class="hex_top"></div>
 74     <div class="hex_middle">首页</div>
 75     <div class="hex_bottom"></div>
 76 </div>
 77 <div class="hex">
 78     <div class="hex_top"></div>
 79     <div class="hex_middle">社区</div>
 80     <div class="hex_bottom"></div>
 81 </div>
 82 <div class="hex">
 83     <div class="hex_top"></div>
 84     <div class="hex_middle">导航</div>
 85     <div class="hex_bottom"></div>
 86 </div>
 87 <div class="hex">
 88     <div class="hex_top"></div>
 89     <div class="hex_middle">商城</div>
 90     <div class="hex_bottom"></div>
 91 </div>
 92 <div class="hex hex-row even">
 93     <div class="hex_top"></div>
 94     <div class="hex_middle">游戏</div>
 95     <div class="hex_bottom"></div>
 96 </div>
 97 <div class="hex">
 98     <div class="hex_top"></div>
 99     <div class="hex_middle">文件</div>
100     <div class="hex_bottom"></div>
101 </div>
102 <div class="hex">
103     <div class="hex_top"></div>
104     <div class="hex_middle">视频</div>
105     <div class="hex_bottom"></div>
106 </div>
107 <div class="hex hex-row">
108     <div class="hex_top"></div>
109     <div class="hex_middle">应用商店</div>
110     <div class="hex_bottom"></div>
111 </div>
112 <div class="hex">
113     <div class="hex_top"></div>
114     <div class="hex_middle">动漫</div>
115     <div class="hex_bottom"></div>
116 </div>
117 <div class="hex">
118     <div class="hex_top"></div>
119     <div class="hex_middle">邮箱</div>
120     <div class="hex_bottom"></div>
121 </div>
122 <div class="hex">
123     <div class="hex_top"></div>
124     <div class="hex_middle">其他</div>
125     <div class="hex_bottom"></div>
126 </div>
127 <script type="text/javascript" src="js/jquery-1-8-3.js"></script>
128 <script type="text/javascript">
129     $("div.hex").on("click",function(){
130         $(this).addClass("hexActive").siblings().removeClass("hexActive");
131     });
132 </script>
133 </body>
134 </html>