利用css3实现六边形蜂窝矩阵(自适应)

1,367 阅读1分钟

示例效果:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        /*六边形样式--start*/
        .imgBox {
            /* overflow: hidden; */
            width: 100%;
            margin: 0 auto;
            padding:0.866% 0;
            font-family: 'Raleway', sans-serif;
            font-size: 15px;
        }
        .imgBox:after {
            content: "";
            display: block;
            clear: both;
        }
        .hex{
            position: relative;
            list-style-type: none;
            float: left;
            visibility: hidden;
            outline:1px solid transparent; /* fix for jagged edges in FF on hover transition */
            /* -webkit-transform: rotate(-60deg) skewY(30deg) translatez(-1px);
            -ms-transform: rotate(-60deg) skewY(30deg) translatez(-1px);
            transform: rotate(-60deg) skewY(30deg) translatez(-1px); */
        }
        .hex *{
            position: absolute;
            visibility: visible;
            outline:1px solid transparent; /* fix for jagged edges in FF on hover transition */
        }
        .hexIn {
            display:block;
            width: 100%;
            height: 100%;
            text-align: center;
            color: #fff;
            /* -webkit-transform: skewY(-30deg) rotate(60deg);
            -ms-transform: skewY(-30deg) rotate(60deg);
            transform: skewY(-30deg) rotate(60deg); */
        }
        .hex .img {
            display: inline-block;
            left: -100%;
            right: -100%;
            width: auto;
            /* padding: 22% 10%; */
            height: 100%;
            border-radius: 50%;
            box-sizing: border-box;
            margin: 0 auto;
        }
        .hex {
            width: 9.6%; /* = (100-4) / 10 */
            padding-bottom: 11.085%; /* =  width / sin(60deg) */
        }
        .hex{
            margin-right: 1%;
            margin-top: -2.5%;
        }
        .hex:nth-child(n+1):nth-child(-n+9){
            margin-top: 0;
        }
        .hex:nth-child(17n+10){
            margin-left: 5.3%;
        }
        .hexIn>.mark{
            /* display: none; */
            position: absolute;
            top:0;
            left: 0;
            width: 100%;
            height: 100%;
            overflow: hidden;
        }
        .hexIn>.mark:before {
            display: block;
            position: absolute;
            content: '';
            width: 100%;
            height: 100%;
            transform: rotate(-60deg) skewY(30deg) translatez(-1px);
            background-color: rgba(0,0,0,.1);
        }
        .hexIn>.text_box{
            display: none;
            background-color: #f00;
            position: absolute;
            top: 36%;
            left:114%;
            opacity: 1;
            z-index: 999;
            padding: 0 20px;
        }
        .hexIn>.text_box *{
            position: relative;
        }
        /*六边形样式--end*/
    </style>
    <script src="./js/jquery.3.4.1.min.js"></script>
</head>
<body>
    <div class="imgBox">
        <!-- <div class="hex">
            <div class="hexIn">
                <img class="img" src="./images/amherst.png">
                <span class="mark"></span>
            </div>
        </div>
        <div class="hex">
            <div class="hexIn">
                <img class="img" src="./images/amherst.png">
                <span class="mark"></span>
            </div>
        </div> -->
    </div>
    <script>
        $(function(){
            //页面渲染
            var str = ''
            for(var i=0;i<19;i++){
                str += '<div class="hex">'+
                    '<div class="hexIn">'+
                        '<img class="img" src="./images/amherst.png">'+
                        '<span class="mark"></span>'+
                        '<div class="text_box">内容</div>'+
                    '</div>'+
                '</div>'
            };
            $('.imgBox').html(str);
            //显示效果
            $('.imgBox>.hex').hover(function(e){
                $(this).parent().find('.img').css('opacity',.2);
                $(this).siblings('.hex').find('.mark').hide();
                $(this).parent().find('.text_box').hide();
                $(this).find('.img').css('opacity',1);
                $(this).find('.mark').show();
                $(this).find('.text_box').show();
                var domLeft = e.pageX+150;
                var winWidth = document.documentElement.clientWidth;
                var markWidth = $(this).find('.text_box').outerWidth();
                if(winWidth-domLeft <= markWidth){
                    $(this).find('.text_box').css({
                        left: 'unset',
                        right: '114%'
                    });
                };
            },function(){
                $(this).parent().find('.img').css('opacity',1);
                $(this).parent().find('.mark').hide();
                $(this).parent().find('.text_box').hide();
            })
        });
    </script>
</body>
</html>