详解flex布局做骰子案例


此文转载自:https://blog.csdn.net/yun_shuo/article/details/111754151#commentBox

详解flex布局做骰子案例

上次案例用到了css3的3D特效,3D特效做正方体也是很常用的,所有我想到了利用css3做一个骰子,而骰子每一面的点数利用定位做起来很麻烦,利用css3的flex布局是很方便的,这次来看看如何利用flex弹性盒子的一些属性完成骰子点数的布局~
首先,建立一个3D空间元素,做成正方体,是上一篇中详细介绍过如何创建一个3D空间元素,这里就不细说了~实现一个正方体的原理是,在一个父元素中包含六个子元素,transform:rotate和translate来转变好每一个的面,在编写过程中,以下是我觉得对视觉效果有很好体验的一些细节:1、视距设置在body中,值给大一些。2、背景为黑色,骰子的每一面边框带一些圆角和内阴影。以下是我做出一个正方体的效果。
在这里插入图片描述
正方体创建好后,到了这次的重点–利用弹性盒子flex的一些属性来布局每一面的点数。
首先在每一面中创建对应的div个数,并给每一面的div设置display:flex;和flex-wrap:wrap;(弹性盒子中元素在必要时换行)样式
点数1
第一面只有一个子div,所以只需将其中心对齐就好了。设置justify-content: center;(元素在弹性盒子主轴中心开始排列)和 align-items: center;(元素在弹性盒子交叉轴中心开始排列),就可以实现水平垂直对称了。部分代码如下

.father1{
            justify-content: center;
            align-items: center;
        }

点数2
第二面两个元素首先设置主轴元素两侧的间距相等排列,再将第二个元素靠交叉轴终点排列。部分代码如下

		.father2{
            justify-content: space-around;
        }
        .father2 .son:nth-child(2){
            align-self:flex-end;
        }

点数3
第三面三个元素首先设置主轴元素两侧的间距相等排列,再将第二个元素靠交叉轴中心排列,第三个元素靠交叉轴终点排列,部分代码如下

		.father3{
            justify-content: space-around;
        }
        .father3 .son:nth-child(2){
            align-self:center;
        }
        .father3 .son:nth-child(3){
            align-self:flex-end;
        }

点数4
第三面两个元素一排并且都是靠垂直居中些排列,这里我设置主轴元素两侧的间距相等排列,由于元素在一列排不下会自动换行,所以增大每个元素外边距就实现效果了,部分代码如下

		.father4{
            justify-content:space-around;
        }
        .father4 .son{
            margin: 25px;
        }

点数5
第五面在子元素创建时分别创三个div里面分别放2、1、2div,设置主轴元素两侧的间距相等排列,设置盒子元素纵向排列,将面底下的三个div设为弹性盒子,第一、三个div设置主轴元素两侧的间距相等排列,第二个div设置主轴元素靠中心排列,部分代码如下

		.father5{
            justify-content: space-around;
            flex-direction: column;
        }
        .father5>div{
            display: flex;
        }
        .five_1{
            justify-content: space-around;
        }
        .five_2{
            justify-content: center;
        }
        .five_3{
            justify-content: space-around;
        }

点数6
第五面在子元素创建时分别创三个div里面分别放2、1、2div,设置主轴元素两侧的间距相等排列,设置盒子元素纵向排列,将面底下的三个div设为弹性盒子设置主轴元素两侧的间距相等排列,和盒子元素横向排列,部分代码如下

		.father6{
            flex-direction:column;
            justify-content: space-around;
        }
        
        .father6>div{
            display: flex;
            flex-direction:row;
            justify-content:space-around;
        }

再给骰子用animation属性加一个自动旋转的效果,就更加炫酷啦,示例图和完整代码如下。
在这里插入图片描述
代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style> *{ margin: 0px; padding:0px; } body{ perspective:8000px; background-color: black; } .big{ position: relative; top: 300px; left: 400px; width: 200px; height: 200px; /* border: 1px solid red; */ transform-style: preserve-3d; transform:rotateX(180deg); /* transform:rotatey(90deg); */ /* transition:all 10s linear; */ animation: run 10s linear 0s infinite; } /* .big:hover{ transform:rotateX(180deg) rotatey(180deg) rotatez(180deg); } */ @keyframes run { 0%{ transform:rotateX(0deg) rotatey(0deg) rotatez(0deg); } 100%{ transform:rotateX(180deg) rotatey(180deg) rotatez(180deg); } } .father{ position: absolute; width: 200px; height: 200px; display: flex; flex-wrap:wrap; border-radius: 30px; box-shadow: 0px 0px 10px 10px #fff inset; background-color: #EEE; /* padding: 10px; */ } .son{ width: 50px; height: 50px; border-radius: 25px; background-color: black; /* margin: 25px; */ } /* 第一个面 */ .father1{ transform:rotateX(-90deg) translatez(-100px); justify-content: center; align-items: center; } .father1 .son{ background-color: brown; } /* 第六个面 */ .father6{ transform:rotateX(-90deg) translatez(100px); flex-direction:column; justify-content: space-around; } .father6>div{ display: flex; flex-direction:row; justify-content:space-around; } /* 第二个面 */ .father2{ transform:rotateY(-90deg) translatez(100px); justify-content: space-around; } .father2 .son:nth-child(2){ /* background-color: brown; */ align-self:flex-end; } /* 第五个面 */ .father5{ transform:rotateY(-90deg) translatez(-100px); justify-content: space-around; flex-direction: column; } .father5>div{ display: flex; } .father5 .son{ margin: 0px; } .five_1{ justify-content: space-around; } .five_2{ justify-content: center; } .five_3{ justify-content: space-around; } /* 第三个面 */ .father3{ transform: translatez(100px); justify-content: space-around; /* align-content:space-between; */ } .father3 .son{ margin: 0px; } .father3 .son:nth-child(2){ align-self:center; } .father3 .son:nth-child(3){ align-self:flex-end; } /* 第四个面 */ .father4{ transform: translatez(-100px); justify-content:space-around; /* align-content:space-around; */ } .father4 .son{ margin: 25px; } </style>
</head>
<body>
    <div class="big">
        <div class="father father1">
            <div class="son son1"></div>
        </div>  
        <div class="father father2">
            <div class="son"></div>
            <div class="son"></div>
        </div>
        <div class="father father3">
            <div class="son son1"></div>
            <div class="son son1"></div>
            <div class="son son1"></div>
        </div>
        <div class="father father4">
            <div class="son son1"></div>
            <div class="son son1"></div>
            <div class="son son1"></div>
            <div class="son son1"></div>
        </div>
        <div class="father father5">
            <div class="five_1">
                <div class="son"></div>
                <div class="son"></div>
            </div>
            <div class="five_2">
                <div class="son"></div>   
            </div>
            <div class="five_3">
                <div class="son"></div>
                <div class="son"></div>
            </div>   
        </div>
        <div class="father father6">
            <div class="six_1">
                <div class="son"></div>
                <div class="son"></div>
            </div>
            <div class="six_2">
                <div class="son"></div>
                <div class="son"></div>
            </div>
            <div class="six_3">
                <div class="son"></div>
                <div class="son"></div>
            </div>
        </div> 
    </div>
</body>
</html>

css3的flex布局做骰子效果就实现啦,对你有帮助的话点个赞支持下哦~


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM