margin-top solo quando l'elemento flessibile è avvolto


93

Ho un contenitore flessibile con due elementi flessibili. Voglio impostare un margine superiore sul secondo, ma solo quando è avvolto e non sulla prima linea flessibile.

Se possibile, voglio evitare di utilizzare le media query.

Ho pensato che il margine inferiore sul primo elemento potesse essere una soluzione. Tuttavia, aggiunge spazio in basso quando gli elementi non sono avvolti, quindi stesso problema.

Questo è il mio codice:

.container {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
}
.item-big {
  background: blue;
  width: 300px;
}
.item-small {
  background: red;
  margin-top: 30px;
}
<div class="container">
  <div class="item-big">
    FIRST BIG ELEM
  </div>
  <div class="item-small">
    SECOND SMALL ELEM
  </div>
</div>


1
Le domande che cercano aiuto per il debug ("perché questo codice non funziona?") Devono includere il comportamento desiderato, un problema o un errore specifico e il codice più breve necessario per riprodurlo nella domanda stessa. Si prega di non abusare dei blocchi di codice per aggirare questo requisito .
Paulie_D

Il problema è che in questo caso non avevo bisogno di spiegare con più codice, quindi è un problema di StackOverflow se è richiesto un codice a blocchi.
Manuel Di Iorio

1
Il problema è l'utilità per i futuri utenti di SO. Se il tuo collegamento JSfiddle è andato via, il tuo post è essenzialmente inutile. Ecco perché SO richiede il codice ... idealmente negli snippet di codice disponibili quando crei la domanda.
Paulie_D

Ok, ho capito, sto modificando la domanda per rispettare le regole;)
Manuel Di Iorio

Risposte:


182

Puoi aggiungerne un po ' margin-topa entrambi gli elementi flessibili e un negativo margin-topdella stessa quantità al contenitore flessibile.

In questo modo, il margine negativo del contenitore flessibile neutralizzerà il margine degli elementi flessibili sulla prima riga, ma non il margine degli elementi che sono stati spostati su altre righe.

.container {
  margin-top: -30px;
}
.item-big, .item-small {
  margin-top: 30px;
}


122
Oh CSS, perché me lo
fai

4
Risposta eccellente
pilau

3
Questo non funziona quando il contenitore ha un colore di sfondo o un bordo
Frank van Wijk

@FrankvanWijk Usa un div trasparente nidificato per la correzione del margine e il genitore per gli elementi visivi.
reliquia
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.