#css #animation #3d #css-animations
#css #Анимация #3D #css-анимация
Вопрос:
Я смотрел учебник Youtube по созданию 3d анимированного куба (разум будет прямоугольным, а не квадратным, потому что я хочу, чтобы он выглядел как dvd), но у меня это не работает. Моя цель — сделать так, чтобы 3D dvd выглядел плавающим и вращающимся. Это учебное пособие, которое я смотрел: https: //www.youtube.com/watch?v=ea4YvO8Pt0E Это страница, которую я кодирую: https://jasmines-fav-films.glitch.me
Это мой код:
HTML
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Jasmine's Fav Films</title>
<!-- import the webpage's stylesheet -->
<link rel="stylesheet" href="/style.css" />
<!-- import the webpage's javascript file -->
<script src="/script.js" defer></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
</head>
<body>
<center><h1>a collection of my favorite films</h1></center>
<center><h2>
enjoy :)
</h2></center>
<!--Lady Bird-->
<div class="wrap">
<div class="cube">
<!--top--> <img src="https://cdn.glitch.com/a6eaa6c7-b4e8-4683-a819-2311ed0ff01e/top.jpg?v=1604625879849">
<!--cover--><img src="https://cdn.glitch.com/a6eaa6c7-b4e8-4683-a819-2311ed0ff01e/lbcover.jpg?v=1604626841181">
<!--spine--><img src="https://cdn.glitch.com/a6eaa6c7-b4e8-4683-a819-2311ed0ff01e/lbspine.jpg?v=1604625904326">
<!--back--><img src="https://cdn.glitch.com/a6eaa6c7-b4e8-4683-a819-2311ed0ff01e/lbback.jpg?v=1604625885941">
<!--side--><img src="https://cdn.glitch.com/a6eaa6c7-b4e8-4683-a819-2311ed0ff01e/side.jpg?v=1604625875017">
<!--bottom--><img src="https://cdn.glitch.com/a6eaa6c7-b4e8-4683-a819-2311ed0ff01e/bottom.jpg?v=1604625871667">
</div>
</div>
CSS:
body {
font-family: font-family: 'Abril Fatface', cursive;
margin: 2em;
background: #FFD0C1;
}
h1 {
color: red;
wrap{
margin-top:150px;
perspective:1000px;
perspective-origin: 50% 50%;
}
.cube{
transform-style:preserve-3d;
width:210;
height: 300px;
margin: auto;
position: relative;
}
.cube img {
position: absolute;
opacity: 0.8;
}
.cube img:nth-child(1){
transform:rotateY(0deg) translateZ(100px);
}
.cube img:nth-child(2) {
transform:rotateY(90deg) translateZ(100px);
}
.cube img:nth-child(3) {
transform:rotateY(180deg) translateZ(100px);
}
.cube img:nth-child(4){
transform:rotateY(-90deg) translateZ(100px);
}
.cube img:nth-child(5) {
transform:rotateY(90deg) translateZ(100px);
}
.cube img:nth-child(6) {
transform:rotateY(-90deg) translateZ(100px);
}
@keyframes loop{
from(transform:rotateX(0deg) rotateY(0deg);}
to(transform:rotateX(360deg) rotateY(360deg);}
}
.cube{
animation:loop 10s linear infinite;
}
Ответ №1:
Недавно поиграл с этим и получил: https://jsfiddle.net/allenski/2bqm075p /
Надеюсь, это немного поможет!
Cube HTML:
<div class="cube">
<div class="side front">1</div>
<div class="side back">2</div>
<div class="side right">3</div>
<div class="side left">4</div>
<div class="side top">5</div>
<div class="side bottom">6</div>
</div>
Cube CSS:
.cube {
position: absolute;
top: 50%;
left: 50%;
width: 100px;
height: 100px;
transform: translate(-50%, -50%) rotateX(-13deg) rotateY(-13deg);
transform-style: preserve-3d;
transition: all .3s ease-in;
animation-name: rotateY-loop;
animation-delay: 0;
animation-iteration-count: infinite;
animation-timing-function: linear;
animation-direction: forward;
animation-duration: 12s;
}
.cube:hover {
animation-play-state: paused;
}
Стороны куба обращены к CSS:
.side {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
position: absolute;
backface-visibility: inherit;
font-size: 20px;
color: #000;
text-shadow: 0 0 77px #000;
border: 1px solid #000;
transition: all 210ms;
cursor: pointer;
}
.side:hover {
font-size: 70px;
text-shadow: 0 0 7px #000;
color: #FFF;
}
.front {
background: rgba(90,90,90,.7);
transform: translateZ(50px);
}
.back {
background: rgba(0,210,0,.7);
transform: rotateY(180deg) translateZ(50px);
}
.right {
background: rgba(210,0,0,.7);
transform: rotateY(90deg) translateZ(50px);
}
.left {
background: rgba(0,0,210,.7);
transform: rotateY(-90deg) translateZ(50px);
}
.top {
background: rgba(210,210,0,.7);
transform: rotateX(90deg) translateZ(50px);
}
.bottom {
background: rgba(210,0,210,.7);
transform: rotateX(-90deg) translateZ(50px);
}
Ключевые кадры куба CSS:
@keyframes rotateY-loop {
0% {
transform: translate(-50%, -50%) rotateX(-13deg) rotateY(-13deg);
}
50% {
transform: translate(-50%, -50%) rotateX(-13deg) rotateY(-193deg);
}
100% {
transform: translate(-50%, -50%) rotateX(-13deg) rotateY(-373deg);
}
}
Повеселились еще немного и получили: https://jsfiddle.net/allenski/k65p0yv1 /