当前,我正在尝试在X和Y轴上平移10px的父元素,同时在其他方向上变换相等量的::after
(这是为了模拟伪元素无处移动的体验)。我希望这相当琐碎,但是::after
不想在转换时留在其父级后面。
我以为创建一个新的堆栈上下文是可行的,而且我以前从未遇到过这个问题(具有多年的CSS经验)。
body {
background-color: #FFF;
}
button {
padding: .75rem 1rem;
background-color: #eee;
border: none;
font-weight: 500;
font-size: 1rem;
position: relative;
transition: ease all .15s;
}
button::after {
content: '';
position: absolute;
z-index: -1;
height: 100%;
width: 100%;
background-color: #000;
top: 0;
left: 0;
transition: ease all .15s;
}
button:hover {
transform: translate(-10px, -10px);
}
button:hover::after {
transform: translate(10px, 10px);
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Fun Button</title>
</head>
<body>
<button type="button">Fun Button!</button>
</body>
</html>
答案 0 :(得分:1)
一个简单的解决方法是考虑使用另一个伪元素来创建灰色背景,并且首先使它们都属于同一堆叠上下文(通过在按钮上添加z-index
),这样您就不必添加转换时出现任何问题
body {
background-color: #FFF;
}
button {
padding: .75rem 1rem;
border: none;
font-weight: 500;
font-size: 1rem;
position: relative;
z-index:0;
transition: ease all .15s;
}
button::after,
button::before{
content: '';
position: absolute;
z-index: -2;
height: 100%;
width: 100%;
background-color: #000;
top: 0;
left: 0;
transition: ease all .15s;
}
button::before{
z-index:-1;
background-color: #eee;
}
button:hover {
transform: translate(-10px, -10px);
}
button:hover::after {
transform: translate(10px, 10px);
}
<button type="button">Fun Button!</button>