Warum funktioniert margin-top mit inline-block, aber nicht mit inline?

7

Im folgenden Code versuche ich, das h1-Element mit einem oberen Rand zu versehen. Wenn ich die Position in css inline einstelle, wird der Rand oben nicht angezeigt. Aber wenn ich es zu Inline-Block ändere, tut es das. Ich frage mich, ob jemand erklären kann, warum das so ist. Danke.

EDIT: Hier ist der Code in jsfiddle: Ссылка

Hier ist mein HTML:

%Vor%

Und hier ist das CSS

%Vor%     
macsplean 03.10.2013, 07:43
quelle

3 Antworten

12

Abschnitt 9.2.4 der CSS2-Spezifikation besagt:

  

Inline-Block
  Dieser Wert bewirkt, dass ein Element einen Blockcontainer inline-level generiert . Das Innere eines Inline-Blocks ist als Blockfeld formatiert, und das Element selbst ist als atomare Inline-Level-Box formatiert.

     

inline
  Dieser Wert bewirkt, dass ein Element eine oder mehrere Inline-Boxen generiert.

Weiter geht es in der CSS2-Spezifikation ( Abschnitt 9.4.2 ) dass Inline-Elemente nur horizontale Ränder berücksichtigen ( Proof ):

  

In einem Inline-Formatierungskontext werden die Boxen horizontal hintereinander angeordnet, beginnend am Anfang eines umschließenden Blocks. Horizontale Ränder, Rahmen und Abstände werden zwischen diesen Feldern berücksichtigt.

Der Unterschied zwischen inline und inline-block besteht darin, dass inline -Elemente als Inline-Elemente behandelt werden, während inline-block -Elemente effektiv als Blöcke behandelt werden (die visuell miteinander verknüpft sind).

Elemente auf Blockebene berücksichtigen sowohl horizontale als auch vertikale Ränder, während Elemente auf Inline-Ebene nur horizontale Ränder berücksichtigen.

    
James Donnelly 03.10.2013, 07:56
quelle
5

Das <h1> -Tag ist standardmäßig ein Blockelement , das Ränder erlaubt. Wenn Sie display: inline verwenden, wird daraus ein Inline-Element, z. B. ein span-Tag, das keine Ränder zulässt.

Mit display: inline-block können Sie beide Funktionen beider Elemente verwenden.

  

Zeigt ein Element als Blockcontainer auf Inline-Ebene an. Das Innere von   Dieser Block ist als Block-Level-Box formatiert, und das Element selbst ist   als Inline-Level-Box formatiert

Referenz: w3schools

    
Safinn 03.10.2013 07:50
quelle
1

Nur Elemente auf Blockebene können Ränder haben. geben es 'display: inline; zwingt es (nicht überraschend), ein inline -Element zu werden und damit seinen Rand zu verlieren.

Versuchen Sie, inline-block zu verwenden, wenn Sie inline mit anderen Inhalten beibehalten und die Margen nutzen möchten. . .

    
Pat Dobson 03.10.2013 07:50
quelle

Tags und Links