【发布时间】:2013-08-05 23:45:48
【问题描述】:
我很难理解为什么当容器元素的子元素被绝对定位(即position: absolute;)时,我需要为其添加position: relative;。让我举例说明。
示例 HTML 代码:
<ul>
<li>...</li>
<li id="parent">
<a href="#">Menu</a>
<div id="child">...</div>
</li>
<li>...</li>
<li>...</li>
</ul>
假设代码代表一个水平菜单。看起来有点像这样:
问题是当#parent的position属性的值是默认值(即position: static;)时,它的宽度随着#child的宽度而增加,即使是孩子元素是绝对定位的,这不应该发生,因为#child 现在由于position: absolute; 而不在流程中。
当我在#parent 上使用position: relative; 时,一切都已到位,即无论#child 的大小如何,它的宽度都保持不变。
我在这里缺少什么?为什么我需要将position: relative; 用于(我认为)应该是默认行为的事情?
更新:我创建了一个小提琴来更好地解释我的观点。 Please take a look.
重现问题的步骤:
在小提琴的预览中,点击“Channels”菜单,它应该会滑出其隐藏的菜单项。
-
现在,在您的浏览器(安装了 Firebug 的 Chrome、Safari 或 Firefox)中按 F12 键,使用检查工具检查“频道”菜单。
这应该立即将您指向现在打开的开发工具或 Firebug 窗格的“元素”选项卡中的相关 HTML 代码。
在
<ul id="top-navbar">中查找<li class="float-left top-menu">的第一个实例,并将鼠标悬停在该行上。它应该向您显示如下内容:
为什么蓝色指示框(即菜单)应该是红色边框的大小时却那么大?明白我现在在说什么了吗?
现在,在li 上应用position: relative;(即li.float-left.top-menu { position: relative; },您自己看看有什么不同。)
【问题讨论】:
-
请同时提供所使用的 CSS 和浏览器,从 html 示例您的变形块 div 到内联 a - 这可能会产生不可预知的结果,我会尝试将 display:block 添加到 a。因为我似乎无法重复您的问题。
-
@drk 当我意识到解释不够充分时,我正在努力。请检查我更新的问题。 :)
标签: css position css-position