在下面的代码段中,div元素(.main> div)相对定位并向左浮动。
由于相对定位,div元素(.main> div)彼此相邻放置。
span元素位于div元素(.main> div> span)
下span元素的位置绝对是为了使文本居中(Food,Health)。
但我面临的问题是文本重叠。
根据我的理解,绝对定位的元素(.main> div> span)应相对于其相对或绝对定位的容器(.main> div)定位。
为什么元素重叠?不仅是span元素,还有div元素(相对定位)重叠。
我试图自己解决这个问题,但无法解决问题。
我搜索了类似的StackOverflow问题,但他们没有提供解决方案。
html, body {
width: 100%;
height: 100%;
}
.main {
height: 5%;
border: 1px solid thistle;
}
.main > div {
position: relative;
float: left;
height: 100%;
border: 1px solid black;
}
.main > div > span {
position: absolute;
top: 50%;
transform: translateY(-50%);
}

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div class="main">
<div><span>Food</span></div>
<div><span>Health</span></div>
</div>
</body>
</html>
&#13;
答案 0 :(得分:0)
原因是每个position:absolute;
元素都从DOM的本机流中删除,并且绝对定位到其父元素。由于它们都具有相同的定位,因此它们被放置在彼此之上。使用position:relative
将元素相对于DOM中的原始位置进行定位。
答案 1 :(得分:0)
你的理解是正确的,虽然在div
被浮动的情况下,它们会折叠成宽度为0,因为div
没有任何正常的流动内容,因此你的绝对span
重叠。
在下面的示例中,我给了div
一个宽度,现在您可以看到它的效果如何。
html, body {
width: 100%;
height: 100%;
}
.main {
height: 5%;
border: 1px solid thistle;
}
.main > div {
position: relative;
float: left;
height: 100%;
border: 1px solid black;
width: 100px; /* added a width */
}
.main > div > span {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div class="main">
<div><span>Food</span></div>
<div><span>Health</span></div>
</div>
</body>
</html>