如何删除使用CSS相对定位元素后出现的空格

时间:2012-12-05 11:19:11

标签: css layout whitespace relativelayout

我一直在寻找这个问题,并最终在谷歌第10页的一些不起眼的论坛上找到了解决方案。解决方案在答案中

出现的问题如下: 在用CSS相对定位元素之后,我得到了元素所在的空格......我不想要空格!

    .thetext 
    {
        width:400px;
        background:yellow;
        border: 1px dashed red;
        margin:50px;
        padding:5px;
        font-weight:bold;
    }
    .whiteblob
    {
        position:relative;
        top:-140px;
        left:70px;
        width:200px;
        height:50px;
        border: 4px solid green;
        background:white;
        font-size:2.5em;
        color:red;
        
    }
    .footerallowedwhitespaceinblue
    {
        height:10px;
        background-color:blue;
    }
    .footer
    {
        background-color:grey;
        height:200px;
    }
<div class="thetext"><script type="text/javascript">for(c=0;c<50;c++){document.write("Lorem ipsum dolor est, ");}</script>
    </div>
    <div class="whiteblob">
        &nbsp;buy this!
    </div>
    <div class="footerallowedwhitespaceinblue">
    </div>
    <div class="footer">
        The whitespace above is way to big! The buy this still takes up space whilst it is moved.
    </div>

JSFiddle:http://jsfiddle.net/qqXQn/

正如您在示例中所看到的,我想要的唯一空格是由文本块引起的空格,边距为50px;并且由footerallowedwhitespaceinblue的间距(蓝色使其可见)。 问题是......空白现在太大了,因为“买这个”div在它相对定位后仍占用空间。

我该如何解决这个问题?

8 个答案:

答案 0 :(得分:44)

您可以通过应用等于元素宽度或高度的负边距来解决此问题。

对于位于顶部的100px高度的元素,您将应用margin-bottom:-100px;

对于位于底部的100px高度的元素,您将应用margin-top:-100px;

对于位于左侧的100px宽度的元素,您将应用margin-right:-100px;

对于位于右侧的100px宽度的元素,您将应用margin-left:-100px;

cut&amp;粘贴css片段:

.top 
    {
    postion:relative;
    top:-100px;
    height:25px;
    margin-bottom:-25px;
    }
.bottom
    {
    postion:relative;
    top:100px;
    height:25px;
    margin-top:-25px;
    }
.left
    {
    postion:relative;
    left:-100px;
    width:25px;
    margin-right:-25px;
    }
.right
    {
    postion:relative;
    left:100px;
    width:25px;
    margin-left:-25px;
    }

然后重新编写的示例代码成为:

.thetext 
{
    width:400px;
    background:yellow;
    border: 1px dashed red;
    margin:50px;
    padding:5px;
    font-weight:bold;
}
.whiteblob
{
    position:relative;
    top:-140px;
    left:70px;
    width:200px;
    height:50px;
    margin-bottom:-50px;
    border: 4px solid green;
    background:white;
    font-size:2.5em;
    color:red;
    
}
.footerallowedwhitespaceinblue
{
    height:10px;
    background-color:blue;
}
.footer
{
    background-color:grey;
    height:200px;
}
<div class="thetext"><script type="text/javascript">for(c=0;c<50;c++){document.write("Lorem ipsum dolor est, ");}</script>
</div>
<div class="whiteblob">
    &nbsp;buy this!
</div>
<div class="footerallowedwhitespaceinblue">
</div>
<div class="footer">
</div>

http://jsfiddle.net/qqXQn/1/

答案 1 :(得分:3)

这是一个例子。在这种情况下,对象向右移动,然后使用负顶值向上移动。消除其尾随边距空间需要增加相等的负边际值。

 position:relative;
 width:310px;
 height:260px;
 top:-332px;
 margin-bottom:-332px;
 left:538px;

答案 2 :(得分:2)

你可以通过在position:relative之前给出float:left来解决这个问题。使用margin-left,margin-top属性而不是top,left。

答案 3 :(得分:2)

如果你足够勇敢,可以将overflow:hidden;bottom negative margin放在相对定位的元素上,它会删除剩余的间距:),即在响应式网站上。

但请检查它是否隐藏了所需的内容。

答案 4 :(得分:0)

将相对元素顶部设置为父字体大小,如下代码:

jade in jade template:

div.dialog(id='login')
        div.dialog-header
            span.title login
            a.dialog-close(href="")  X
            hr
        div.dialog-body
            p hello this is body
            hr
        div.dialog-footer
            p this is footer

和css:

    .dialog
    {
        height: 100%;
        position: absolute;
        top: -100%;
        right: 50%;
        left: 50%;
        bottom: 100%;
        border: 2px solid rgba(255, 255, 255,1);
        border-radius: 3px;
        font-size: 14px;

    }   
.dialog-body{
        position: relative;
        background-color: #F99;
        height: 80%;
        top: -14px;
    }
    .dialog-header{
        position: relative;
        height: 10%;
        background-color: #F9F9F9;

    }
    .dialog-footer{
        position: relative;
        height: 10%;
        top: -28px;
        background-color: #F9fdf9;

    }

这对我有用!

答案 5 :(得分:-1)

将外部div设置为&#34; position:relative&#34;想要移动的div为&#34; position:absolute&#34;并设置顶部和左侧值。这将相对于外部div(而不是页面)定位项目。相对位置留下空白。绝对没有。

答案 6 :(得分:-1)

这对我来说不起作用,有4个彼此相互锁定的相对位置。 我无法让它工作,甚至添加和重新定位每个:

目前,这已经过优化(请参阅http://christ.eye-of-revelation.org/index.html第2页),但在所有情况下,它们都会根据媒体或窗口大小突出显示图像区域...

解决方案是全球性的,更容易;它也被用于两个独立的块来模拟和交换两个页面:所有问题都解决了宽度和高度定义区域,并设置其样式=&#34;溢出:隐藏;&#34;

希望这可以提供帮助。

答案 7 :(得分:-2)

将高度设置为0:height:0px;

现在这个div可以放在任何地方。