Um truque comum para elementos de posicionamento vertical é usar o seguinte CSS:
.item {
position:absolute;
top:50%;
margin-top:-8px; /* half of height */
height: 16px;
}
Quando visto na visualização métrica como no Chrome, isto é o que você vê:
No entanto, não há margem visual representada quando você passa o mouse sobre o elemento, ou seja, a margem está 'fora' da borda e pode ser visualizada. Mas as margens negativas não aparecem. Como eles se parecem e o que os torna diferentes?
Por que margin-top:-8px
não é o mesmo quemargin-bottom:8px
?
Então, como as margens negativas funcionam e qual é a intuição por trás delas. Como eles 'aumentam' (no caso de margin-top < 0
) um item?
onset
eoffset
. É verdade que muitas pessoas sempre usam a palavraoffset
( negativo ) quando querem dizeronset
( positivo ). Esta mensagem se autodestruirá se você atualizar sua resposta. Felicidades!margin-bottom: -8px;
? Por quemargin-bottom:-8px
não é o mesmo quemargin-top:-8px
?Uma margem superior de -8px significa que será 8px maior do que se tivesse 0 de margem.
Uma margem inferior de 8px significa que a coisa abaixo dela estará 8px mais abaixo do que se tivesse 0 de margem.
fonte
margin-bottom: -8px;
? Por quemargin-bottom:-8px
não é o mesmo quemargin-top:-8px
?bons pontos já feitos aqui, mas embora haja muitas informações sobre como a renderização de margens é realizada pelo navegador, o porquê ainda não foi respondido:
o que também podemos perguntar é:
então o que vemos é que há uma diferença na renderização das margens dependendo do lado em que são aplicadas - as margens superior (e esquerda) são diferentes das inferiores (e direita).
as coisas estão se tornando mais claras quando temos uma visão (simplificada) de como os estilos são aplicados pelo navegador: os elementos são renderizados de cima para baixo na janela de visualização, começando no canto superior esquerdo (vamos ficar com a renderização vertical por enquanto, tendo em mente que o horizontal é tratado da mesma forma).
considere o seguinte html:
analogamente à sua posição no código, essas três caixas aparecem empilhadas 'de cima para baixo' no navegador ( mantendo as coisas simples, não consideraremos aqui a
order
propriedade do módulo css3 'flex-box' ). portanto, sempre que os estilos são aplicados à caixa 3, as posições dos elementos precedentes (para as caixas 1 e 2) já foram determinadas e não devem mais ser alteradas por causa da velocidade de renderização.agora, imagine uma margem superior de -10px para a caixa 3. em vez de deslocar todos os elementos anteriores para reunir algum espaço, o navegador apenas empurrará a caixa 3 para cima, então ela é renderizada em cima (ou embaixo, dependendo do Z-index ) quaisquer elementos anteriores. mesmo que o desempenho não fosse um problema, mover todos os elementos para cima poderia significar deslocá-los para fora da janela de visualização, portanto, a posição de rolagem atual teria que ser alterada para ter tudo visível novamente.
o mesmo se aplica a uma margem inferior para a caixa 3, tanto negativa quanto positiva: em vez de influenciar os elementos já avaliados, apenas um novo 'ponto de partida' para os próximos elementos é determinado. assim, definir uma margem inferior positiva empurrará os seguintes elementos para baixo; um negativo irá empurrá-los para cima.
fonte
Como você usou o posicionamento absoluto e especificou uma porcentagem superior, apenas a margem superior afetará a localização do seu objeto .item. Se, em vez disso, você o posicionou usando bottom: 50%, então você precisaria do margin-bottom -8px para centralizá-lo, e o margin-top não teria efeito.
A margem afeta os limites de um elemento em termos de posicionamento, seja absolutamente como no seu caso, ou em relação aos elementos vizinhos. Imagine que a margem é a base do seu elemento no qual ela se assenta. Eles são normalmente do mesmo tamanho, mas podem ser maiores ou menores em qualquer uma ou em todas as quatro bordas.
Seu CSS diz ao navegador para posicionar a parte superior do seu elemento na margem em um ponto 50% do caminho para baixo na página. No entanto, como todos os elementos não são um único pixel, o navegador precisa saber qual parte dele deve se alinhar 50% da página. Para alinhar a parte superior do elemento, ele usa a margem superior. Por padrão, ele está alinhado com a parte superior do elemento, mas você pode alterá-lo com CSS.
No seu caso, os 50% superiores resultariam na parte superior do elemento começando no meio da página. Ao aplicar uma margem superior negativa, o navegador usa o ponto 8px no elemento a partir do topo (ou seja, a linha no meio dele) como o lugar para posicionar em 50%.
Se você aplicar uma margem positiva na parte inferior, isso estende a linha que o navegador usa para posicionar a parte inferior longe do próprio elemento, deixando uma lacuna entre ele e qualquer elemento adjacente abaixo, ou afetando onde ele é colocado absolutamente se o posicionamento for baseado em o fundo.
fonte
Gostaria de saber se esta questão foi respondida bem: como funcionam as margens css e porque é que margin-top: -5; não é o mesmo que margin-bottom: 5 ;?
A margem é a distância dos arredores do elemento. margin-top diz "... distância dos arredores conforme medimos do topo 'lado' da 'caixa' do elemento e margin-bottom sendo a distância do fundo 'lado' da 'caixa'". Em seguida, margem superior: 5; refere-se ao perímetro "lateral" superior, -5 nesse caso; qualquer coisa que se aproxime do 'lado' superior pode se sobrepor ao 'lado' superior do elemento em 5, e a margem inferior: 5; significa que a distância entre o 'lado' inferior do elemento e o entorno é 5.
Basicamente isso, mas afetado por elementos flutuantes e similares: http://www.w3.org/TR/CSS2/box.html#margin-properties .
http://coding.smashingmagazine.com/2009/07/27/the-definitive-guide-to-using-negative-margins/
Eu espero ser corrigido.
fonte