移动相对定位的元素后​​,如何避免空格?

时间:2013-05-11 14:19:36

标签: html css

我在<article>中有一个<div>元素,article有一个position: relative;。 我将它向上移动了95px(bottom: 95px;),但它在原始位置占据的空间仍然存在。我怎么能让它消失?当我将article置于绝对位置时,也没有问题。但是我也需要把它固定在中间,margin: auto不能与position:absolute一起使用。

http://jsfiddle.net/xnvMD/2/

3 个答案:

答案 0 :(得分:1)

使用负上边距而不是相对位置。像这样:

margin:-95px auto 0 auto;

正如CBroe已经指出的那样,为了让箭头显示在上面的图像上,当你设置{时,你需要添加position:relative(但不是bottom) {1}}。

z-index

从技术上讲,您甚至不需要position:relative; z-index:1;

如果您对它的工作原理感到好奇,您需要了解CSS中绘制顺序的规则。 full details相当复杂,但the section on the z-index property中概述了基础知识。

  

在每个堆叠上下文中,以下按顺序绘制以下图层:

     
      
  1. 构成堆叠背景的元素的背景和边框。
  2.   
  3. 子堆叠上下文具有负堆栈级别(最多为负数)。
  4.   
  5. 流入的,非内联级别,未定位的后代。
  6.   
  7. 未定位的花车。
  8.   
  9. in-flow,内联级别,非定位后代,包括内联表和内联块。
  10.   
  11. 堆叠级别为0的子堆叠上下文和堆栈级别为0的已定位后代。
  12.   
  13. 具有正堆栈级别的子堆叠上下文(最少积极的第一个)。
  14.   

默认情况下,图像(分类为内联级别,非定位后代)位于级别5,高于级别3的z-index元素(非内联级别后代)。

通过向article元素添加postion:relative,您已将其设置为级别6的定位后代,从而将其向上移动到堆栈上方并再次移到图像上方。

请注意,如果您的article包含自己的内嵌内容,则会显示在article元素上方(它们都是内联的,但文章的内联内容会在树后面出现)但是img背景和边框仍然会在下面绘制。

答案 1 :(得分:1)

  

我在<article>中有一个<div>元素,article有一个position: relative;。   我将它向上移动了95px(bottom: 95px;),但它在原始位置占用的空间仍然存在。

嗯,这就是假定的的相对定位 - http://www.w3.org/TR/CSS21/visuren.html#choose-position

  

“当一个方框B相对定位时,计算下一个方框的位置,好像B没有偏移。”

因此,相对定位元素所需的原始空间将被重新保存。

  

我怎能让它消失?当我将article置于绝对位置时,也没有问题。但我也需要将其粘贴到中间,而margin: auto将无法与position:absolute一起使用。

您是否尝试过使用否定margin-top向上“移动”元素?这应该适用于所有浏览器(不是石器时代)。您仍然可以将水平边距设置为auto,以使元素居中。

.trdown {
  /* everything else besides position and bottom stays */
  margin:-85px auto 0 auto;
}

(如果这会破坏您要保留的容器元素底部的间距,那么也要给它一个padding-bottom。)

答案 2 :(得分:0)

在没有先添加答案的情况下,我没有足够的声誉来添加评论。没有看到像Cody这样的代码,就很难提供帮助。

我认为你并不完全确定定位是如何运作的。当一个元素设置为position:absolute时,它将相对于它没有position:static的第一个父元素定位。如果没有这样的元素,则position:absolute的元素相对于<html>(来自Codecademy)定位

如果你给一个元素相对定位并告​​诉它有一个10px的边距顶部,它不会从任何特定的东西向下移动十个像素 - 它向下移动十个像素,否则它将原来的位置。

请记住,如果您在另一个元素内部的元素上使用margin-auto,它将位于该元素的内部,而不是文档。默认情况下,Div是页面的整个宽度。