Как удалить пробелы, которые появляются после относительного позиционирования элемента с помощью CSS

Я искал повсюду эту проблему и, наконец, нашел решение на каком-то неясном форуме на странице #10 google. Решение в ответе

проблема заключается в следующем: После относительного позиционирования элемента с помощью 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/

Как вы можете видеть в например, единственным пробелом, который я хочу, является пробел, вызванный блоком thetext по краю 50px; и интервал по footerallowedwhitespaceinblue(сделанный синим, чтобы он был видимым). Проблема... пробелы теперь слишком велики, потому что div" buy this " все еще занимает место после того, как он был относительно расположен.

Как я могу это решить?

8 ответов


вы можете просто решить эту проблему, применив отрицательное поле, равное ширине или высоте элемента.

для элемента высотой 100px, который расположен сверху, вы примените margin-bottom: - 100px;

для элемента высотой 100px, который расположен внизу, вы примените margin-top: - 100px;

для элемента шириной 100px, который расположен слева, вы примените margin-right: - 100px;

для элемента 100px ширина, которая расположена справа, вы будете применять margin-left: - 100px;

вырезать и вставить фрагменты 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/


вот пример. В этом случае объект был перемещен вправо, а затем вверх с использованием отрицательного верхнего значения. Устранение его пространства задней маржи требовало добавления равного значения отрицательной маржи.

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

вы можете решить эту проблему, предоставив float: left before position: relative. Используйте свойства margin-left, margin-top вместо top, также слева.


Если вы достаточно храбры, вы можете поставить overflow:hidden; и bottom negative margin на относительно позиционированном элементе, и он удалит остаток интервала:) т. е. на отзывчивом сайте.

но убедитесь, что он не скрывает необходимый контент.


установите относительный elememt сверху на размер родительского шрифта, как этот код:

html в шаблоне jade:

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;

    }

это работает для меня!


установите внешний div как "position: relative" div, который вы хотите переместить как "position: absolute", и установите верхние и левые значения. это расположит элемент относительно внешнего div (а не страницы). относительное положение оставляет зазоры. абсолютного нет.


Это не сработало для меня, имея 4 отдельных взаимосвязанных относительных позиций друг друга. Я не мог заставить его работать, даже добавляя и перемещая каждый из них:

В настоящее время это оптимизировано (см. http://christ.eye-of-revelation.org/index.html 2-я страница), но во всех случаях они используются для выделения области изображения в соответствии с размером носителя или окна...

решение было глобальным и гораздо более простым; он также использовался для двух отдельных блоков для имитации и замены двух страниц: все проблемы решаются, определяя ширину и высоту области и просто устанавливая ее стиль = " overflow: hidden;"

надеюсь, это может помочь.


установить высоту 0:height:0px;.

теперь этот div можно разместить в любом месте.