buoni punti già fatti qui, ma mentre ci sono molte informazioni su come il rendering dei margini viene eseguito dal browser, il motivo non è ancora stato risolto:
"Perché margin-top: -8px non è uguale a margin-bottom: 8px?"
quello che potremmo anche chiedere è:
Perché un margine inferiore positivo non "solleva" gli elementi precedenti, mentre un margine superiore positivo "abbassa" gli elementi seguenti?
quindi quello che vediamo è che c'è un file differenza nel rendering dei margini a seconda del lato a cui sono applicati : i margini superiore (e sinistro) sono diversi da quelli inferiori (e destro).
le cose diventano più chiare quando si ha uno sguardo (semplificato) a come gli stili vengono applicati dal browser: gli elementi sono renderizzati dall'alto verso il basso nella vista, iniziando dall'angolo in alto a sinistra (rimaniamo al rendering verticale per ora, tenendo presente che quello orizzontale è trattato allo stesso modo).
considera il seguente html:
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
analogamente alla loro posizione nel codice, queste tre caselle appaiono impilate 'dall'alto verso il basso' nel browser ( mantenendo le cose semplici, non considereremo qui la order
proprietà del modulo css3 'flex-box' ). così, ogni volta che gli stili vengono applicati al riquadro 3, le posizioni degli elementi precedenti (per i riquadri 1 e 2) sono già state determinate e non dovrebbero più essere modificate per motivi di velocità di rendering.
ora, immagina un margine superiore di -10px per la casella 3. invece di spostare verso l'alto tutti gli elementi precedenti per raccogliere un po 'di spazio, il browser sposterà semplicemente la casella 3 verso l'alto, quindi viene renderizzata sopra (o sotto, a seconda dello z-index ) eventuali elementi precedenti. anche se le prestazioni non fossero un problema, spostare tutti gli elementi in alto potrebbe significare spostarli fuori dalla visualizzazione, quindi la posizione di scorrimento corrente dovrebbe essere modificata per avere di nuovo tutto visibile.
lo stesso vale per un margine inferiore per il riquadro 3, sia negativo che positivo: invece di influenzare gli elementi già valutati, viene determinato solo un nuovo "punto di partenza" per gli elementi futuri. quindi impostare un margine inferiore positivo spingerà verso il basso i seguenti elementi; uno negativo li spingerà verso l'alto.
onset
eoffset
. È vero che così tante persone usano sempre la parolaoffset
( negativo ) quando intendonoonset
( positivo ). Questo messaggio si autodistruggerà se aggiorni la tua risposta. Saluti!