Gibt es einen Grund, eine <div style="display:inline-block">
anstelle von a <span>
zu verwenden, um eine Webseite zu gestalten?
Kann ich in den Bereich verschachtelte Inhalte einfügen? Was ist gültig und was nicht?
Ist es in Ordnung, dies zu verwenden, um ein 3x2-Tabellen-ähnliches Layout zu erstellen?
<div>
<span> content1(divs,p, spans, etc) </span>
<span> content2(divs,p, spans, etc) </span>
<span> content3(divs,p, spans, etc) </span>
</div>
<div>
<span> content4(divs,p, spans, etc) </span>
<span> content5(divs,p, spans, etc) </span>
<span> content6(divs,p, spans, etc) </span>
</div>
Antworten:
Gemäß der HTML - Spezifikation ,
<span>
ist ein Inline - Element und<div>
ein Blockelement. Das kann jetzt mithilfe derdisplay
CSS-Eigenschaft geändert werden, aber es gibt ein Problem: In Bezug auf die HTML-Validierung können Sie keine Blockelemente in Inline-Elemente einfügen, also:ist nicht strikt gültig, auch wenn Sie das
<div>
zuinline
oder änderninline-block
.Also, wenn Ihr Element a ist
inline
oderinline-block
verwendet<span>
. Wenn es sich um einblock
Ebenenelement handelt, verwenden Sie a<div>
.quelle
inline-block
eine engere Beziehung zuinline
als hatblock
.<span>
und<div>
ist in der Tat anders, als<span>
ein Inline - Element (gültig innerhalb ein<p>
, zum Beispiel), während<div>
ein Blockelement (nicht gültig in a<p>
).<p>
ist ein Blockelement, das "keine Elemente auf Blockebene enthalten kann" ( Link ). Das Beispiel ist zwar ungültig, aber nicht, weil<p>
es inline ist.Wenn Sie ein gültiges xhtml-Dokument haben möchten, können Sie kein div in einen Absatz einfügen.
Außerdem funktioniert ein div mit der Eigenschaftsanzeige: Inline-Block anders als ein Span. Ein Bereich ist standardmäßig ein Inline-Element. Sie können die Breite, Höhe und andere Eigenschaften von Blöcken nicht festlegen. Auf der anderen Seite "fließt" ein Element mit der Eigenschaft "Inline-Block" weiterhin mit jedem umgebenden Text. Sie können jedoch Eigenschaften wie Breite, Höhe usw. festlegen. Ein Bereich mit der Eigenschaftsanzeige: Block fließt nicht auf die gleiche Weise als Inline-Block-Element, erstellt jedoch einen Wagenrücklauf und hat einen Standardrand.
Beachten Sie, dass Inline-Block nicht in allen Browsern unterstützt wird. Zum Beispiel müssen Sie in Firefox 2 und weniger Folgendes verwenden:
Dies zeigt etwas anderes als ein Inline-Blockelement in FF3.
Es ist ein großer Artikel hier auf der Schaffung von Cross - Browser - Inline-Block - Elementen.
quelle
Inline-Block ist ein halber Punkt zwischen dem Setzen der Anzeige eines Elements auf Inline oder Blockieren. Das Element bleibt im Inline-Fluss des Dokuments wie display: inline, aber Sie können die Box-Attribute des Elements (Breite, Höhe und vertikale Ränder) wie mit display: block bearbeiten.
Wir dürfen keine Blockelemente in Inline-Elementen verwenden. Dies ist ungültig und es gibt keinen Grund, solche Praktiken durchzuführen.
quelle
Ich weiß, dass dieses Q alt ist, aber warum nicht alle DIVs anstelle der SPANs verwenden? Dann spielt sich alles glücklich zusammen.
Beispiel:
quelle
Ich denke, es wird Ihnen helfen, die grundlegenden Unterschiede zwischen Inline-Elementen (z. B. span) und Block-Elementen (z. B. div) zu verstehen, um zu verstehen, warum "display: inline-block" so nützlich ist.
Problem : Inline-Elemente (z. B. span, a, button, input usw.) nehmen "margin" nur horizontal (margin-left und margin-right) an, nicht vertikal. Der vertikale Abstand funktioniert nur bei Blockelementen (oder wenn "display: block" eingestellt ist)
Lösung : Nur durch "display: inline-block" wird auch der vertikale Abstand (oben und unten) genommen. Grund: Inline-Element Span verhält sich jetzt nach außen wie ein Blockelement, innen jedoch wie ein Inline-Element
Hier Codebeispiele:
quelle
Wie andere geantwortet haben ...
div
ist ein "Blockelement" (jetzt neu definiert als Flow Content ) undspan
ein "Inline-Element" ( Phrasing Content ). Ja, Sie können die Standarddarstellung dieser Elemente ändern, aber es gibt einen Unterschied zwischen "Flow" und "Block" und "Phrasierung" und "Inline".Ein Element klassifiziert als Strömungs Inhalt kann nur verwendet werden , in dem fortlaufenden Inhalt zu erwarten ist , und ein Element als klassifiziert Phrasierung Inhalt kann verwendet werden , wo Phrasierung Inhalt erwartet wird. Da der gesamte Phrasierungsinhalt Flussinhalt ist , kann ein Phrasierungselement auch überall dort verwendet werden, wo Flussinhalt erwartet wird. Die technischen Daten enthalten detailliertere Informationen .
Alle Phrasierung Elemente, wie
strong
undem
können nur andere Formulierungen enthalten: Sie kein setzen kanntable
innerhalb einercite
zum Beispiel. Die meisten Inhalte fließen, wiediv
undli
kann alle Arten von Strömungs Inhalt (sowie Phrasierung Gehalt) enthalten, aber es gibt ein paar Ausnahmen:p
,pre
, undth
sind Beispiele für nicht-Phrasierung Fluss Inhalt ( „Blockelemente“) , das kann nur Formulierungen enthalten Inhalt ("Inline-Elemente"). Und natürlich gibt es die normale Element Einschränkungen wiedl
undtable
nur dann erlaubt werden , bestimmte Elemente zu enthalten.Während beide
div
undp
nicht formulierende Flow-Inhalte sind,div
können sie andere untergeordnete Flow-Inhalte enthalten (einschließlich weitererdiv
s undp
s). Auf der anderen Seitep
dürfen nur untergeordnete Phrasen enthalten sein. Das bedeutet, dass Sie keindiv
Inside a einfügen könnenp
, obwohl beide nicht formulierende Flow-Elemente sind.Hier ist der Kicker. Diese semantischen Spezifikationen hängen nicht damit zusammen, wie das Element angezeigt wird. Wenn Sie also ein
div
Inside A habenspan
, erhalten Sie einen Validierungsfehler, selbst wenn Siespan {display: block;}
unddiv {display: inline;}
in Ihrem CSS haben.quelle
inline-block
ist ein CSS-Stil, keine Art von Element oder Inhaltsmodell.)