HTML5 vs HTML4 - h1-Tag mit extra Platz gerendert - wie zu entfernen?

8

Ich nahm eine Seite, deren DTD HTML4 Transitional war, und änderte den Doctype in <!DOCTYPE html> und extra Leerzeichen erschien zwischen dem h1 und div darunter. Ich habe keine anderen Änderungen an Markup oder CSS vorgenommen.

JSFiddle-Beispiel: Ссылка .

Wenn Sie den Doctype von HTML5 in HTML4 Transitional ändern, sehen Sie, dass der zusätzliche Platz erscheint und verschwindet, obwohl Markup und CSS genau gleich sind.

Irgendeine Idee, wie man diesen Raum loswerden kann?

    
ForOhFor 26.06.2012, 11:51
quelle

5 Antworten

11

Der HTML 4.01-Übergangsdoctype bewirkt den Modus "Fast Standard" in Browsern. Der HTML5-Doctype verursacht den Standardmodus.

Dieser Microsoft-Artikel erklärt den Unterschied: Ссылка .

Für den Modus "Fast Standards" heißt das:

  

Inline-Elemente tragen genau dann zur Zeilenhöhe bei, wenn eines der   Folgendes ist wahr.

     

Wenn das Element:

     
  • Enthält Textzeichen

  •   
  • Hat eine Breite ungleich Null

  •   
  • Hat einen von Null verschiedenen Rand

  •   
  • Hat eine von Null verschiedene Auffüllung

  •   
  • Hat ein Hintergrundbild

  •   
  • Hat eine vertikale Ausrichtung auf einen anderen Wert als Baseline festgelegt

  •   

Beachten Sie, dass ein Zeilenumbruch dafür nicht als Textzeichen betrachtet wird   Definition, es sei denn, es ist der einzige Inhalt einer Zeile. In diesem Fall,   Die Zeilenhöhen bleiben die oberste Inline - Box - Oberseite und die   unterste Inline-Box unten auf der Linie, unabhängig von der angegebenen   Zeilenhöhe.

     

Wenn ein img-Element der einzige Inhalt einer Tabellenzelle ist, die Zeilenbox   Höhe der Höhe der Zellenlinienbox wird auf Null eingestellt.

Am kritischsten ist in Ihrem Fall, dass die Berechnung der Höhe der Zeile, die das Bild enthält, nicht die strut , ein imaginäres Inline-Element, das die Zeilenhöhe auf den Zeilenhöhenwert des h1 -Elements erhöhen sollte.

Diese jsfiddle zeigt ein echtes span -Element mit einem &nbsp; als echten Textinhalt, der für den Strut steht, und Sie können sehen, dass das Layout mit einem HTML 4.01 Transitional Doctype und einem HTML5 Doctype identisch ist.

Diese jsfiddle zeigt die gleiche Idee, nur diesmal wird die Strebe mit CSS wie folgt erstellt:

%Vor%

Im Fall von khurrams Antwort reduziert er die Linienhöhe von h1 , und im Standardmodus ist die Höhe der Strebe kleiner als die Höhe des Bildes. Dies bedeutet, dass die Höhe der Linie als Ganzes von der Höhe des Bildes und nicht von der Höhe der Strebe bestimmt wird. Die Höhe des Bildes ist in beiden Standards und fast im Standardmodus gleich. Sie sehen also keinen Unterschied im Rendering zwischen den Modi.

Warum das Einstellen der Zeilenhöhe von h1 auf die Höhe des Bildes (25px) nicht funktioniert, aber auf 12px setzt, liegt daran, dass die Strebe nicht nur einen oberen und einen unteren Rand bildet, aber auch eine Grundlinie für die Linie. Die Grundlinie ist etwas oberhalb des unteren Bereichs, um Textunterlängen zu ermöglichen, für Text mit normaler Größe, der normalerweise etwa 3 Pixel beträgt. Das Bild befindet sich standardmäßig auf der Grundlinie, so dass die Lücke zwischen der Grundlinie und der Unterseite zur Höhe des Bildes hinzugefügt wird, um die Höhe der Linie festzulegen.

Dies kann gelöst werden, indem Sie das Bild von der Grundlinie entfernen, indem Sie img { vertical-align: top } verwenden, was in diesem jsfiddle angezeigt wird . Wenn Sie hier an der h1-Zeilenhöhe basteln, werden Sie sehen, dass Werte größer als 25px den Abstand zwischen den Zeilen erhöhen, aber Werte von 25px oder weniger ändern diesen Abstand nicht.

    
Alohci 27.06.2012, 00:28
quelle
3

Haben Sie einen CSS-Reset Ссылка auf Ihre CSS angewendet, bevor Sie andere CSS-Effekte anwenden?

    
kolin 26.06.2012 11:56
quelle
3

Ihr Fehler behandelt die Standard-Zeilenhöhe.

Der HTML4-Übergang ignoriert den Inhalt Ihrer H1-Zeilenhöhe und ergibt ein 25-Pixel-hohes Element. Der HTML5 berücksichtigt die Zeilenhöhe des H1-Tags, was 29px entspricht.

    
John Green 26.06.2012 11:59
quelle
2

Geben Sie einfach line-height:12px; oder was Sie wollen.
SUCHEN SIE: JSFIDDLE . Änderung Ihres Codes.

    
khurram 26.06.2012 11:58
quelle
0

Deshalb hat die HTML5-Boilerplate einen CSS-Reset.

Du kannst das div auch auf margin: 0; padding: 0; setzen, aber du musst für jedes Element tun, bis du alle getroffen hast. Die Antwort auf den CSS-Reset von Meyer in diesem Thread ist korrekt.

Hier ist ein Beispiel für die Problemumgehung: Ссылка

    
Mike Legacy 26.06.2012 21:27
quelle

Tags und Links