我在一个模板中重新创建了一个问题,其中一个 nav 有
其中一个列表是绝对定位的,以粘着到 nav 的底部。div 应用转换属性时会出现问题。
当绝对和相对定位元素之间的 div 获取变换属性时,绝对位置列表相对于 div 而不是 nav 定位。
您可以运行下面重新创建的代码片段。我在 nav 上悬停时应用 div 上的转换。
position: relative;
。在 nav 内部有一个嵌套两个列表的 div。其中一个列表是绝对定位的,以粘着到 nav 的底部。div 应用转换属性时会出现问题。
当绝对和相对定位元素之间的 div 获取变换属性时,绝对位置列表相对于 div 而不是 nav 定位。
MDN 文档关于 position:absolute 的说明如下
这是否意味着转换的元素是定位元素?为什么会出现这种情况?我在 Edge、FF 和 Chrome 中进行了测试。它们都表现得一样。不为元素留出空间。相反,如果有,请将其相对于最近的已定位祖先(如果有)或相对于包含块定位。绝对定位的框可以具有边距,并且它们不与任何其他边距折叠。
您可以运行下面重新创建的代码片段。我在 nav 上悬停时应用 div 上的转换。
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
html, body{
min-height: 100%;
height: 100%;
}
nav{
background: #000;
height: 100%;
width: 50%;
position: relative;
}
nav:hover > div{
transform: translateX(50px) translateY(0) translateZ(0);
}
a{
color: #fff;
}
ul{
padding: 16px;
}
ul.main{
background: blue;
}
ul.lower{
position: absolute;
background: red;
bottom: 0;
width: 100%;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<nav>
<div>
<ul class="main">
<li><a href="">link</a></li>
<li><a href="">link</a></li>
<li><a href="">link</a></li>
<li><a href="">link</a></li>
</ul>
<ul class="lower">
<li><a href="">link</a></li>
<li><a href="">link</a></li>
<li><a href="">link</a></li>
<li><a href="">link</a></li>
</ul>
</div>
</nav>
</body>
</html>