实现六边形,蜂窝状分布

实现如图

1.html部分

<view class="ibox">
        <view class="gallery-container">
            <view class="gallery">
                <view class="hexagon" v-for="(item, index) in tablist" :key="index"                 @click="topagefl(item.page)">
                        <span>{{ item.name }}</span>
                        <image :src="item.img" mode=""></image>
                </view>
            </view>
        </view>
    </view>

2、js部分(普通列表数据)

3、css部分

.ibox{
    height: calc( 100vh - var(--window-bottom));
     background: #fff;
}
.gallery-container {
    height: 90%;
    display: grid;
    place-content: center; /* 水平垂直方向居中 */
    .gallery {  
        --s: 200upx; /* control the size */
        --g: 12upx; /* control the gap */
        --h:170upx;/* control the height */
        display: grid;
        .hexagon {
            background: #3EAD34;
            grid-area: 1/1; /* 规定从第一行第一列开始显示项目 */
            width: var(--s);
            height: var(--h);
            aspect-ratio: 1.15; /* 宽高比例缩放 */
            object-fit: cover; /* 保持图片原有比例, 会有剪切*/
            clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0 50%); /* 形成六边形 */
            transform: translate(var(--_x, 0), var(--_y, 0)) scale(var(--_t, 1)); /* 对图片进行移动和缩放 */
            cursor: pointer;
            // filter: grayscale(80%); /* 灰度滤镜 */
            transition: 0.2s linear; /* 过渡效果 */
            position: relative;
            image{
                width: 100%;
                height: 100%;
                
                // margin-bottom: -8upx;
            }
            view{
                width: 100%;
                height: 100%;
                position: relative;
            }
            --wy: 36%; /* 第三列以及整体与中心线的位移差别 */
            // 第三列
            &:nth-child(1),&:nth-child(2),&:nth-child(3),&:nth-child(4),&:nth-child(5){
                // --_x: calc(25% - 0.87 * var(--g));
                --_x: var(--wy);
            }
            &:nth-child(1) {
                --_y: calc(-200% - 2* var(--g));
            }
            &:nth-child(2) {
                --_y: calc(-100% - var(--g));
            }
            &:nth-child(3) {
            }
            &:nth-child(4) {
              --_y: calc(100% + var(--g));
            }
            &:nth-child(5) {
               --_y: calc(200% + 2* var(--g));
            }
            
            // 第二列
            &:nth-child(6),&:nth-child(7),&:nth-child(8),&:nth-child(9),&:nth-child(10){
                 --_x: calc(-75% + var(--wy) - 0.87 * var(--g));
            }
            &:nth-child(6) {
                --_y: calc(-150% - 1.5 * var(--g));
            }
            &:nth-child(7) {
               --_y: calc(-50% - 1 * var(--g));
            }
            &:nth-child(8) {
                --_y: calc(50%);
            }
            &:nth-child(9) {
                --_y: calc(150% + 1 * var(--g));
              
            }
            &:nth-child(10) {
               --_y: calc(250% + 1.5 *   var(--g));
            }
            
            // 第一列
            &:nth-child(11) {
              --_x: calc(-150% + var(--wy) - 0.87 * 2 * var(--g));
            }
            
            // 第四列
            &:nth-child(12),&:nth-child(13),&:nth-child(14){
                 --_x: calc(75% + var(--wy) + 0.87 * var(--g));
            }
            &:nth-child(12) {
                --_y: calc(-150% - 1.5 * var(--g));
            }
            &:nth-child(13) {
                 --_y: calc(-50% - 1 * var(--g));
            }
            &:nth-child(14) {
                --_y: calc(50%);
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值