У меня проблема, но я не могу найти, где допустил ошибку ...
Я сделал небольшую анимацию, используя преобразование в CSS, как вы можете видеть в коде.
Но иногда при наведении указателя мыши анимация становится сумасшедшей. Мне кажется, что это часто случается, когда я наводю указатель мыши снизу слева направо.
Не могли бы вы помочь мне исправить это, пожалуйста?
*{
box-sizing: border-box;
}
body{
margin: 0;
padding: 0;
background: #ccc;
}
.container{
width: 400px;
margin: 0 auto;
margin-top: 200px;
position: relative;
}
.carre{
float: right;
width: 200px;
height: 300px;
position: relative;
background-color: #63aace;
border: 3px solid #f9f9f9;
border-radius: 10px;
transform-style: preserve-3d;
transition: all ease 1s;
box-shadow: 0px 0px 20px rgba(0,0,0,.5);
}
.carre__front{
position: absolute;
width: 180px;
height: 200px;
left: 7px;
top: 50px;
border: 2px solid #f9f9f9;
border-radius: 10px;
background: #c65d5d;
transform-style: preserve-3d;
transition: all ease 1s;
transform: scale(1);
opacity: .9;
}
.carre__tippy{
position: absolute;
width: 100px;
height: 60px;
left: 47px;
bottom: 70px;
border: 2px solid #f9f9f9;
border-radius: 10px;
background: rgba(255,255,255,.2);
transform-style: preserve-3d;
transition: all ease 1s;
opacity: .9;
}
.description{
position: absolute;
top: 100px;
left: 0px;
font-family: sans-serif;
color: #fff;
font-size: 16px;
opacity: .9;
text-transform: uppercase;
}
.carre:hover{
transform: perspective(1000px) rotateX(30deg) rotateY(20deg) rotateZ(-20deg) translateX(0) translateY(0) translateZ(100px);
box-shadow: -100px 100px 100px rgba(0,0,0,.3);
}
.carre:hover .carre__front{
transform: translateZ(50px);
box-shadow: -20px 20px 30px rgba(0,0,0,.3);
opacity: .7;
}
.carre:hover .carre__tippy{
transform: perspective(0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) translateZ(120px);
box-shadow: -50px 50px 20px rgba(0,0,0,.3);
}
p{
margin: 0;
padding: 0;
}<!DOCTYPE html>
<html lang = "fr">
<head>
<!-- En-tête de la page -->
<meta charset = "utf-8" />
<title>titre</title>
</head>
<body>
<div class = "container">
<div class = "carre">
<div class = "carre__front">
</div>
<div class = "carre__tippy">
</div>
</div>
<div class = "description"><p>Information display</p></div>
</div>
</body>
</html>





Удалите всю свою перспективу из: hover в css. Это сработает.
.carre:hover{
transform: rotateX(30deg) rotateY(20deg) rotateZ(-20deg) translateX(0)
translateY(0) translateZ(100px);
box-shadow: -100px 100px 100px rgba(0,0,0,.3);
.carre__tippy{
transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) translateZ(120px);
box-shadow: -50px 50px 20px rgba(0,0,0,.3);
}
.carre__front{
transform: translateZ(50px);
box-shadow: -20px 20px 30px rgba(0,0,0,.3);
opacity: .7;
}
}
Здесь я вложил все ваши CSS вместе, чтобы было немного легче отслеживать Обновлено: я имел в виду файл SCSS, а не CSS.
Вы не можете вкладывать такие классы в css. Это синтаксис препроцессора (scss, less и т. д.)
Это действительно файл SCSS. Извините за недопонимание.
Это связано с perspective. Вы должны установить его на родительском (т.е. perspective: 1000px; внутри .container) и удалить остальные.
Он все еще может немного «мерцать», поскольку он преобразует и вычисляет, если ваша мышь все еще наведена на элемент. (Когда он перемещается, элементы на самом деле иногда выходят из-под позиции мыши, а затем правила :hover не применяются, и преобразования меняются, возвращаясь под мышку, вызывая :hover, и так далее ...)
*{
box-sizing: border-box;
}
body{
margin: 0;
padding: 0;
background: #ccc;
}
.container{
width: 400px;
margin: 0 auto;
margin-top: 200px;
position: relative;
perspective: 1000px;
}
.carre{
float: right;
width: 200px;
height: 300px;
position: relative;
background-color: #63aace;
border: 3px solid #f9f9f9;
border-radius: 10px;
transform-style: preserve-3d;
transition: all ease 1s;
box-shadow: 0px 0px 20px rgba(0,0,0,.5);
}
.carre__front{
position: absolute;
width: 180px;
height: 200px;
left: 7px;
top: 50px;
border: 2px solid #f9f9f9;
border-radius: 10px;
background: #c65d5d;
transform-style: preserve-3d;
transition: all ease 1s;
transform: scale(1);
opacity: .9;
}
.carre__tippy{
position: absolute;
width: 100px;
height: 60px;
left: 47px;
bottom: 70px;
border: 2px solid #f9f9f9;
border-radius: 10px;
background: rgba(255,255,255,.2);
transform-style: preserve-3d;
transition: all ease 1s;
opacity: .9;
}
.description{
position: absolute;
top: 100px;
left: 0px;
font-family: sans-serif;
color: #fff;
font-size: 16px;
opacity: .9;
text-transform: uppercase;
}
.carre:hover{
transform: rotateX(30deg) rotateY(20deg) rotateZ(-20deg) translateX(0) translateY(0) translateZ(100px);
box-shadow: -100px 100px 100px rgba(0,0,0,.3);
}
.carre:hover .carre__front{
transform: translateZ(50px);
box-shadow: -20px 20px 30px rgba(0,0,0,.3);
opacity: .7;
}
.carre:hover .carre__tippy{
transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) translateZ(120px);
box-shadow: -50px 50px 20px rgba(0,0,0,.3);
}
p{
margin: 0;
padding: 0;
} <div class = "container">
<div class = "carre">
<div class = "carre__front"></div>
<div class = "carre__tippy"></div>
</div>
<div class = "description"><p>Information display</p></div>
</div>Спасибо. Действительно, некоторое мерцание все еще есть. Думаю смогу исправить;)
Вы можете установить правило :hover для родительского элемента, который не перемещается / не изменяется, как обертка.
Вы удалили мерцание, а также эффект перспективы. Перспектива должна быть добавлена к родительскому контейнеру, и она повлияет на всех дочерних элементов одинаково.
@lulius Я считаю, что всем элементам нужна одна и та же перспектива, поэтому нет необходимости в других объявлениях перспективы для дочерних элементов
@ Филипп Я не думаю, что ты меня понял. Да, всем элементам нужна была одна и та же перспектива, поэтому вы размещаете ее на родительском элементе (в его случае - на div ".container"). Если вы запустите свой фрагмент кода и его исходный фрагмент, вы увидите, что ваш не имеет перспективы.
Ах, ты прав, я ошибся. Изменил свой ответ, спасибо!
Спасибо Филиппу и Люлиусу за продолжение. Я установил наведение на другой элемент, и он отлично работает, больше не мерцает :)
Удалите перспективу из всех преобразований и поместите ее на контейнер (не при наведении).
«При определении свойства перспективы для элемента вид в перспективе получают элементы CHILD, а НЕ сам элемент».
В вашем случае родительским элементом является «.container», поскольку вы также применяете некоторые преобразования к «.carre».
*{
box-sizing: border-box;
}
body{
margin: 0;
padding: 0;
background: #ccc;
}
.container{
width: 400px;
margin: 0 auto;
margin-top: 200px;
position: relative;
perspective: 1000px;
}
.carre{
float: right;
width: 200px;
height: 300px;
position: relative;
background-color: #63aace;
border: 3px solid #f9f9f9;
border-radius: 10px;
transform-style: preserve-3d;
transition: all ease 1s;
box-shadow: 0px 0px 20px rgba(0,0,0,.5);
}
.carre__front{
position: absolute;
width: 180px;
height: 200px;
left: 7px;
top: 50px;
border: 2px solid #f9f9f9;
border-radius: 10px;
background: #c65d5d;
transform-style: preserve-3d;
transition: all ease 1s;
transform: scale(1);
opacity: .9;
}
.carre__tippy{
position: absolute;
width: 100px;
height: 60px;
left: 47px;
bottom: 70px;
border: 2px solid #f9f9f9;
border-radius: 10px;
background: rgba(255,255,255,.2);
transform-style: preserve-3d;
transition: all ease 1s;
opacity: .9;
}
.description{
position: absolute;
top: 100px;
left: 0px;
font-family: sans-serif;
color: #fff;
font-size: 16px;
opacity: .9;
text-transform: uppercase;
}
.carre:hover{
transform: rotateX(30deg) rotateY(20deg) rotateZ(-20deg) translateX(0) translateY(0) translateZ(100px);
box-shadow: -100px 100px 100px rgba(0,0,0,.3);
}
.carre:hover .carre__front{
transform: translateZ(50px);
box-shadow: -20px 20px 30px rgba(0,0,0,.3);
opacity: .7;
}
.carre:hover .carre__tippy{
transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) translateZ(120px);
box-shadow: -50px 50px 20px rgba(0,0,0,.3);
}
p{
margin: 0;
padding: 0;
}<!DOCTYPE html>
<html lang = "fr">
<head>
<!-- En-tête de la page -->
<meta charset = "utf-8" />
<title>titre</title>
</head>
<body>
<div class = "container">
<div class = "carre">
<div class = "carre__front">
</div>
<div class = "carre__tippy">
</div>
</div>
<div class = "description"><p>Information display</p></div>
</div>
</body>
</html>
Я ничего не упомянул.