posição: relativo deixa um espaço vazio

87

O código está aqui: http://lasers.org.ru/vs/example.html

Como remover um espaço vazio sob o bloco principal (#page)?

Kir
fonte
Você quer dizer o acolchoamento inferior ou ter tudo centralizado verticalmente?
alex
Você quer dizer o espaço entre o texto na #page div e a borda? Caso contrário, não tenho certeza de que espaço você está falando.
Jeremy Battle
@Jeremy Battle Eu também não consigo entender, embora Guffa pareça saber .
alex
Alguém mais não está vendo este problema?
Myles Gray,
Consulte a resposta marcada em [ stackoverflow.com/questions/13722095/… [1]: stackoverflow.com/questions/13722095/…
Sohel Pathan

Respostas:

35

Bem, não use posicionamento relativo então. O elemento ainda ocupa espaço onde estava originalmente ao usar o posicionamento relativo, e você não pode se livrar disso. Você pode, por exemplo, usar o posicionamento absoluto, ou fazer os elementos flutuarem lado a lado.

Brinquei com o layout um pouco e sugiro que você altere essas três regras para:

#layout { width: 636px; margin: 0 auto; }
#menu { position: absolute; width: 160px; margin-left: 160px; }
#page { width: 600px; padding: 8px 16px; border: 2px solid #404241; }
Guffa
fonte
27
"e você não pode se livrar disso." - você pode. Basta usar margem negativa, como na resposta do plang.
Michał K
5
@ MichałK: Não, isso significa apenas que você sobrepõe o espaço vazio com outro elemento, não que você se livra do espaço vazio. Você só pode usar margens negativas para sobrepor o espaço vazio do posicionamento relativo com o tamanho do elemento.
Guffa
@ MichałK: Votar negativamente nesta resposta e em outras respostas totalmente não relacionadas não ajuda, você ainda não consegue se livrar do espaço causado pelo posicionamento relativo.
Guffa
1
@ MichałK: Como você só pode cobrir o espaço e não se livrar dele, você deve ter outros elementos que sejam tão grandes quanto o espaço vazio para cobri-lo. Se você, por exemplo, tiver um espaço vazio de um elemento com 200px de altura e apenas um elemento com 100px de altura para cobrir o buraco, você ainda terá 100px restantes do buraco.
Guffa de
1
Por que o downvote? Se você não explicar o que acha que está errado, não poderá melhorar a resposta.
Guffa
181

Outro truque que funcionou bem para mim é usar uma margem inferior negativa no elemento relativo que você moveu. Não há necessidade de ir com posicionamento absoluto.

Algo como:

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

Semelhante (se não idêntica) à solução que vejo agora, de verde.

plang
fonte
28
Uma resposta ótima e simples. E a prova perfeita de que HTML / CSS é uma aberração.
Synesso
1
@plang, não parece funcionar. Consulte jsfiddle.net/u7sq8rL7/1 . O fundo verde se estende além do último elemento.
Pacerier,
1
@Pacerier Não use margin-bottom. Obviamente, não funciona (pense nisso); você precisa de margem superior.
William
2
Isso funciona perfeitamente. E sim, você usa margin-bottomcom um número menos porque deseja se livrar do espaço extra na parte inferior.
phocks de
bom, se seu layout estiver em boas condições, isso funcionará muito bem
Vitaliy Terziev,
8

#page 
{ 
     overflow:hidden; 
}

Carol McKay
fonte
1
#page {
  padding-bottom: 0;
}

sem preenchimento inferior

alex
fonte
Esta é a resposta correta, mas eu diria que você provavelmente está melhor com o preenchimento, pois é mais fácil de ler e mais padrão na web para ter algum preenchimento.
Jeremy Battle,
@Jeremy Battle Definitivamente, o preenchimento parece muito melhor.
alex,
@Kir Na verdade, você pode apenas modificar seu estilo atual para preenchimento: 8px 16px 0px; para evitar ter uma linha extra em seu CSS.
Jeremy Battle,
Acredito que seja o espaço de 300px abaixo do contêiner de conteúdo que é o problema, não o espaço dentro do contêiner ...
Guffa
O cenário irá criar uma caixa anônima dentro da div (#page) e de acordo com a especificação CSS não há outra maneira de controlar a caixa anônima diretamente e esta caixa anônima irá herdar a propriedade de seu pai (neste caso #page). Portanto, é melhor alterar o div pai alterando sua propriedade, como diz @alex. Se o acima exposto não atender aos critérios, o uso de margem negativa também é uma solução neste cenário.
kta
1

Experimente esta regra:

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

Mudei a posição para absoluta, isso permite que você use a bottom: 0propriedade.

Salman A
fonte
1

Eu tive um problema parecido. A maneira mais fácil é substituir a parte superior margin-toppor #page.

verde
fonte
margin-top com valor negativo, em vez de top + margin-bottom, é o caminho a seguir
xtian
1

Eu tive o mesmo problema. A margem negativa não funcionou para mim, pois deixou uma enorme área branca onde costumava estar. Resolvi esse problema no meu caso inserindo manualmente a altura.

.maincontent {
    height: 675px;
}
UkrVolk11
fonte
1

Minha resposta está atrasada, mas pode ajudar outras pessoas com um problema semelhante que eu tive.

Tive um <div>com position: relative;onde todos os elementos filhos têm o position: absolute;estilo. Isso fez com que cerca de 20px de espaço em branco aparecesse na minha página.

Para contornar isso, adicionei margin-top: -20px;ao próximo elemento irmão após <div>com position: relative;.

Se você tiver um elemento irmão antes, você pode usar 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>

Gabriel gates
fonte
0

Consegui me livrar dos espaços em branco usando a seguinte estrutura:

Estrutura HTML-CSS

E aqui está a marcação

<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>
Abel Callejo
fonte
0

Esta pergunta parece ter sido bem respondida - no entanto, todas as respostas acima tiveram efeitos colaterais negativos no meu layout. Isso é o que realmente funcionou para mim:

.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>

Gerfried
fonte
0

A melhor solução se você não quiser deixar espaços abaixo (relativo)

É usar margin-top e posicionar: pegajoso

#page {
     margin-top: -280px;
     position: sticky;
}
ztvmark
fonte