430 Stimmen

Warum funktioniert dieser CSS-Stil margin-top nicht?

Ich versuche, die margin Werte auf einer div in einem anderen div . Alles funktioniert gut, bis auf den oberen Wert, der anscheinend ignoriert wird. Aber warum?

Was ich erwartet habe:
What I expected with margin:50px 50px 50px 50px;

Was ich bekomme:
What I get with margin:50px 50px 50px 50px;

Code:

#outer {
  width: 500px;
  height: 200px;
  background: #FFCCCC;
  margin: 50px auto 0 auto;
  display: block;
}

#inner {
  background: #FFCC33;
  margin: 50px 50px 50px 50px;
  padding: 10px;
  display: block;
}

<div id="outer">
  <div id="inner">
    Hello world!
  </div>
</div>

W3Schulen keine Erklärung dafür haben, warum margin verhält sich auf diese Weise.

16voto

bookcasey Punkte 38113

Wenn Sie etwas hinzufügen padding a #outer funktioniert es. Demo hier:

#outer {
    width:500px; 
    height:200px; 
    background:#FFCCCC;
    margin:50px auto 0 auto;
    display:block;
    padding-top:1px;
}
#inner {
    background:#FFCC33;
    margin:50px 50px 50px 50px;
    padding:10px;
    display:block;
}

<div id="outer">
    <div id="inner">
        Hello world!
    </div>
</div>

6voto

Artemee Senin Punkte 356

Neuen Blockformatierungskontext erstellen

Sie können verwenden display: flow-root auf das übergeordnete Element, um zu verhindern, dass der Rand durch das enthaltende Element kollabiert, wenn es einen neuen Blockformatierungskontext erstellt.

Das Ändern des Wertes der Eigenschaft overflow in auto oder die Verwendung von flexbox hat denselben Effekt.

https://codepen.io/rachelandrew/pen/VJXjEp

5voto

Dave Punkte 28314

Das beantwortet zwar nicht das "Warum" (es muss etwas mit dem kollabierenden Rand zu tun haben), aber es scheint der einfachste/logischste Weg zu sein, das zu tun, was du versuchst, nämlich hinzufügen. padding-top zum äußeren div :

#outer {
    width:500px; 
    height:200px; 
    background:#FFCCCC;
    margin:50px auto 0 auto;
    padding-top: 50px;
}
#inner {
    background:#FFCC33;
    margin:0px 50px 50px 50px;
    padding:10px;
}

<div id="outer">
    <div id="inner">
        Hello world!
    </div>
</div>

Kleine Anmerkung - es sollte nicht notwendig sein, ein div auf display:block; es sei denn, es gibt etwas anderes in Ihrem Code, das es nicht blockieren soll.

4voto

Mustafa M Jalal Punkte 311

Versuchen Sie dies:

#outer {
    width:500px; 
    height:200px; 
    background:#FFCCCC;
    margin:50px auto 0 auto;
    display:table;
}
#inner {
    background:#FFCC33;
    margin:50px 50px 50px 50px;
    padding:10px;
    display:block;
}

<div id="outer">
    <div id="inner">
        Hello world!
    </div>
</div>

Viel Glück!

3voto

Ata Iravani Punkte 2009

Utilice padding-top:50px für äußere div. Etwas wie dies:

#outer {
    width:500px; 
    height:200px; 
    background:#FFCCCC;
    margin:50px auto 0 auto;
    display:table;}

Hinweis: Padding vergrößert die Größe Ihres Divs. In diesem Fall, wenn die Größe Ihres div wichtig ist, ich meine, wenn es eine bestimmte Höhe haben muss. verringern Sie die Höhe um 50px..:

#outer {
    width:500px; 
    height:150px; 
    background:#FFCCCC;
    margin:50px auto 0 auto;
    display:table;}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X