posizione: relativa lascia uno spazio vuoto


88

Il codice è qui: http://lasers.org.ru/vs/example.html

Come rimuovere uno spazio vuoto sotto il blocco principale (#page)?


Intendi l'imbottitura inferiore o per avere il tutto centrato verticalmente?
alex

Intendi lo spazio tra il testo nel div #pagina e il bordo? Altrimenti non sono sicuro di quale spazio stai parlando.
Jeremy Battle

@ Jeremy Battle Neanche io riesco a capirlo, anche se Guffa sembra averlo fatto .
alex

Qualcun altro non vede questo problema?
Myles Gray

Risposte:


36

Bene, allora non usare il posizionamento relativo. L'elemento occupa ancora spazio dov'era originariamente quando si utilizza il posizionamento relativo e non è possibile liberarsene. Ad esempio, puoi utilizzare il posizionamento assoluto o far fluttuare gli elementi uno accanto all'altro.

Ho giocato un po 'con il layout e ti suggerisco di modificare queste tre regole in:

#layout { width: 636px; margin: 0 auto; }
#menu { position: absolute; width: 160px; margin-left: 160px; }
#page { width: 600px; padding: 8px 16px; border: 2px solid #404241; }

27
"e non puoi liberartene." - Puoi. Usa solo il margine negativo, come nella risposta del plang.
Michał K

5
@ MichałK: No, questo significa solo che sovrapponi lo spazio vuoto con un altro elemento, non che ti sbarazzi dello spazio vuoto. È possibile utilizzare solo margini negativi per sovrapporre lo spazio vuoto dal posizionamento relativo con la dimensione dell'elemento.
Guffa

@ MichałK: Il downvoting di questa risposta e di altre risposte totalmente indipendenti non aiuta, non puoi ancora liberarti dello spazio causato dal posizionamento relativo.
Guffa

1
@ MichałK: Dato che puoi solo coprire lo spazio e non liberartene, devi avere altri elementi grandi almeno quanto lo spazio vuoto per coprirlo. Se ad esempio hai uno spazio vuoto da un elemento alto 200 px e hai solo un elemento alto 100 px per coprire il buco, avrai comunque 100 px a sinistra del buco.
Guffa

1
Perché il voto negativo? Se non spieghi cosa pensi sia sbagliato, non puoi migliorare la risposta.
Guffa

183

Un altro trucco che ha funzionato bene per me è usare un margine inferiore negativo nell'elemento relativo che hai spostato. Non c'è bisogno di andare con il posizionamento assoluto.

Qualcosa di simile a:

position: relative;
left: 100px
top: -200px;
margin-bottom: -200px;

Simile (se non identica) alla soluzione che vedo ora, dal verde.


30
Un'ottima e semplice risposta. E la prova perfetta che HTML / CSS è un mostro.
Synesso

1
@plang, non sembra funzionare. Vedi jsfiddle.net/u7sq8rL7/1 . Lo sfondo verde si estende oltre l'ultimo elemento.
Pacerier

1
@Pacerier Non utilizzare margin-bottom. Ovviamente non funziona (pensaci); hai bisogno di margin-top.
William

2
Funziona perfettamente. E sì, usi margin-bottomcon un numero meno perché vuoi sbarazzarti dello spazio extra in basso.
phocks

buono, se il tuo layout è in buona salute funzionerà bene
Vitaliy Terziev,


2

Prova questa regola:

#page {
  border: 2px solid #404241;
  bottom: 0;
  padding: 8px 16px;
  position: absolute;
  top: 70px;
  width: 600px;
}

Ho cambiato posizione in assoluta, questo ti permette di usare la bottom: 0proprietà.


1
#page {
  padding-bottom: 0;
}

nessuna imbottitura inferiore


Questa è la risposta corretta ma direi che probabilmente stai meglio CON il padding in quanto è più facile da leggere e più standard sul web avere un po 'di padding.
Jeremy Battle

@ Jeremy Battle Sicuramente, l'imbottitura sembra molto meglio.
alex

@Kir In realtà puoi semplicemente modificare il tuo stile corrente in padding: 8px 16px 0px; per evitare di avere una riga in più nel tuo CSS.
Jeremy Battle

Credo che il problema sia lo spazio di 300px sotto il contenitore dei contenuti, non lo spazio all'interno del contenitore ...
Guffa

Lo scenario creerà una casella anonima all'interno del div (#page) e secondo la specifica CSS non c'è altro modo per controllare direttamente la casella anonima e questa casella anonima erediterà la proprietà dal suo genitore (in questo caso #page). Quindi è meglio cambiare il div genitore cambiando la sua proprietà come dice @alex. Se quanto sopra non soddisfa i criteri, anche l'utilizzo del margine negativo è una soluzione in questo scenario.
kta

1

Ho avuto un problema simile. Il modo più semplice è sostituire la parte superiore margin-topper #page.


margin-top con valore negativo, invece di top + margin-bottom, è la strada da percorrere
xtian

1

Ho avuto lo stesso problema. Il margine negativo non ha funzionato per me in quanto ha lasciato un'enorme area bianca dove era una volta. Ho risolto questo problema nel mio caso inserendo manualmente l'altezza.

.maincontent {
    height: 675px;
}

1

La mia risposta è in ritardo, ma potrebbe aiutare altri con un problema simile che ho avuto io.

Ho avuto un <div>con position: relative;cui tutti gli elementi figlio hanno lo position: absolute;stile. Ciò ha causato la visualizzazione di circa 20 px di spazio bianco sulla mia pagina.

Per aggirare questo problema ho aggiunto margin-top: -20px;al prossimo elemento di pari livello dopo il <div>con position: relative;.

Se hai già un elemento fratello, puoi usare margin-bottom: -20px;

section {
  height: 200px;
}
<h2>Extra Whitespace</h2>
<section>
  <div>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  <div style="position:relative;">
    <div style="position:relative; top: -20px; left:100px;">ABSOLUTE</div>
  </div>
  <div>
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</section>


<h2>No Whitespace margin-top</h2>
<section>
  <div>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  <div style="position:relative;">
    <div style="position:relative; top: -20px; left:100px;">ABSOLUTE</div>
  </div>
  <div style="margin-top:-20px;">
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</section>


<h2>No Whitespace margin-bottom</h2>
<section>
  <div style="margin-bottom:-20px;">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  <div style="position:relative;">
    <div style="position:relative; top: -20px; left:100px;">ABSOLUTE</div>
  </div>
  <div>
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</section>


0

Sono stato in grado di sbarazzarmi degli spazi bianchi utilizzando il seguente framework:

Framework HTML-CSS

Ed ecco il markup

<div id="the-force-moved-element>I've been moved</div>
<div id="the-hack-part-1">
    <div id="the-hack-part-2>The quick brown fox jumps over the lazy dog</div>
</div>
<p>Lorem ipsum dolor sit amet...</p>

0

Questa domanda sembra avere una buona risposta, tuttavia tutte le risposte precedenti hanno avuto effetti collaterali negativi nel mio layout. Questo è ciò che ha funzionato davvero per me:

.moveUp {
    position: relative;
}
.moveUp > * {
    position: absolute;
    width: 100%;
    top: -75px;
}

/** This part is just design - ignore it ... ****/
.box1, .box2, .box3 {
    height: 100px;
    color: white;
}
.box1 {
    background: red;
}
.box2 {
    background: blue;
    height: 50px;
}
.box3 {
    background: green;
}
<div class="box1">Box 1</div>
<div class="moveUp"><div class="box2">Box 2 - 75px up</div></div>
<div class="box3">Box 3</div>


0

La soluzione migliore se non vuoi lasciare spazi sottostanti (relativi)

Consiste nell'usare margin-top e position: sticky

#page {
     margin-top: -280px;
     position: sticky;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.