【发布时间】:2017-03-19 22:42:13
【问题描述】:
我有一个父 div 和一个子 div。父级有一个图像。子 div 有另一个图像。子图像需要出现在父图像的左上角,我想将子图像的位置设置为absolute,并将父图像的位置设置为某个非静态位置,例如relative 或absolute。 (我也设置了left 和top,但我们暂时忘记它。)
这是因为为子元素设置 absolute 只有当它的第一个祖先按照 W3Schools absolute 非静态定位时才应该起作用,这意味着 元素相对于它的第一个定位(不是static) 祖先元素。
但我注意到,即使我没有设置父级的位置(即默认情况下它的位置将是“静态”),那么子图像仍然可以很好地定位在左上角。
有人可以帮助我理解为什么我不必将父级的位置设置为某个非静态值以使absolute 属性正常工作吗?还是我对absolute 的工作理解有误?
<div class="parent">
<img src="https://lh4.ggpht.com/wKrDLLmmxjfRG2-E-k5L5BUuHWpCOe4lWRF7oVs1Gzdn5e5yvr8fj-ORTlBF43U47yI=w300">
<div class="child">
<img src="http://xiostorage.com/wp-content/uploads/2015/10/test.png" width="200">
</div>
</div>
/*.parent {
position:relative;
}*/
.child {
display:none;
position:absolute;
left:0;
}
.parent:hover .child {
display:initial;
}
更新: Connexo 帮助更新了代码。
尝试取消注释 position 以解开谜团。接受的答案有更多信息。
<h1>
Positioning test
</h1>
<div class="parent">
<img src="https://lh4.ggpht.com/wKrDLLmmxjfRG2-E-k5L5BUuHWpCOe4lWRF7oVs1Gzdn5e5yvr8fj-ORTlBF43U47yI=w300">
<div class="child">
<img src="http://xiostorage.com/wp-content/uploads/2015/10/test.png" width="200">
</div>
/*
.parent {
position:relative;
}*/
.child {
display: none;
position: absolute;
left: 0;
top: 0;
}
.parent:hover .child {
display:initial;
}
【问题讨论】:
-
但是我注意到,即使我没有设置父级的位置(即默认情况下它的位置将是“静态”),事件然后子图像仍然很好地定位在顶部-left。现在用
right: 0;而不是left: 0;试试同样的方法,你就更接近谜团了。 -
元素相对于其第一个定位(非静态)祖先元素进行定位。如果没有,则定位到
body。在您的示例中,哪个与div.parent共享左上角。 -
@connexo,而不是
body。initial containing block或HTML/ 视口。 -
@connexo 您的第一条评论并没有帮助我接近谜团,但由于引入了新的 H1 标签,jsfiddle 示例确实有所帮助。 :) 谢谢。
标签: css css-position