展示效果图
css样式
完整代码复制体验(图片就不提供了,自己随便找一些)
模板部分
里面的事件只是为了做路由的跳转,就不展示出来了
<div class="canvas-main">
<div class="all" @mouseover="hideOtherElements1(1)" @mouseleave="showOtherElements(1)" v-if="element.element1">
<div class="lefter" @click="handleProject('项目1')">
<div class="text">项目1</div>
</div>
<div class="left" @click="handleProject('项目2')">
<div class="text">项目2</div>
</div>
<div class="center" @click="handleProject('项目3')">
<div class="explainer"><span>项目</span></div>
<div class="text">项目3</div>
</div>
<div class="right" @click="handleProject('项目4')">
<div class="text">项目4</div>
</div>
<div class="righter" @click="handleProject('项目5')">
<div class="text">项目5</div>
</div>
</div>
<div v-if="element.element2" class="all" @mouseover="hideOtherElements2(2)" @mouseleave="showOtherElements(2)">
<div class="lefter"></div>
<div class="left" @click="handleProject('产品3')">
<div class="text">产品3</div>
</div>
<div class="center" @click="handleProject('产品1')">
<div class="explainer"><span>产品</span></div>
<div class="text">产品1</div>
</div>
<div class="right" @click="handleProject('产品2')">
<div class="text">产品2</div>
</div>
<div class="righter"></div>
</div>
</div>
css部分
.canvas-main {
position: absolute;
top: 0;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
.all {
position: relative;
justify-content: center;
height: 281px;
margin: 0 260px;
-webkit-transform: perspective(300px) rotateX(20deg);
transform: perspective(300px) rotateX(20deg);
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-perspective: 10px;
perspective: 10px;
-webkit-perspective-origin: center center;
perspective-origin: center center;
transition: all 1.3s ease-out;
will-change: perspective;
}
.all:hover {
display: flex;
-webkit-transform: perspective(10000px) rotateX(0deg);
transform: perspective(10000px) rotateX(0deg);
-webkit-perspective: 1000px;
perspective: 1000px;
transition: all 1.3s ease-in;
}
.all:hover .text {
opacity: 1;
}
.all:hover > div {
opacity: 1;
transition-delay: 0s;
}
.all:hover .explainer {
opacity: 0;
}
.left,
.center,
.right,
.lefter,
.righter {
position: relative;
width: 250px;
height: 280px;
background-color: #58d;
background-repeat: no-repeat;
background-position: center center;
background-size: contain;
background-blend-mode: color-burn;
border: 1px solid rgba(255, 255, 255, 0.488);
border-radius: 10px;
box-shadow: 0 0 20px 5px rgba(100, 100, 255, 0.4);
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
cursor: pointer;
opacity: 0;
transition: all 0.3s ease;
transition-delay: 1s;
}
.left:hover,
.center:hover,
.right:hover,
.lefter:hover,
.righter:hover {
background-color: #ccf;
box-shadow: 0 0 30px 10px rgba(100, 100, 255, 0.6);
}
.text {
position: absolute;
bottom: 0;
left: 5px;
color: #fff;
text-shadow: 0 0 5px rgba(100, 100, 255, 0.6);
-webkit-transform: translateY(30px);
transform: translateY(30px);
opacity: 0;
transition: all 0.3s ease;
will-change: transform;
}
.lefter {
background-image: url(../assets/images/image/organization-512.png);
-webkit-transform: translateX(-180px) translateZ(-50px) rotateY(-5deg);
transform: translateX(-180px) translateZ(-50px) rotateY(-5deg);
}
.left {
background-image: url(../assets/images/image/creative_draw-512.png);
-webkit-transform: translateX(-150px) translateZ(-25px) rotateY(-5deg);
transform: translateX(-150px) translateZ(-25px) rotateY(-5deg);
}
.center {
position: absolute;
top: 0;
background-image: url(../assets/images/image/app_window-512.png);
opacity: 1;
}
.right {
background-image: url(../assets/images/image/cloud_weather-512.png);
-webkit-transform: translateX(150px) translateZ(-25px) rotateY(5deg);
transform: translateX(150px) translateZ(-25px) rotateY(5deg);
}
.righter {
background-image: url(../assets/images/image/search-512.png);
-webkit-transform: translateX(180px) translateZ(-50px) rotateY(5deg);
transform: translateX(180px) translateZ(-50px) rotateY(5deg);
}
.explainer {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
color: #fff;
font-weight: 300;
font-size: 2rem;
text-shadow: 0 0 10px rgba(255, 255, 255, 0.8);
background: linear-gradient(-45deg, #24ff71ca, #9b4effb7);
background-color: #303050;
border-radius: 10px;
transition: all 0.6s ease;
}
}