4 Stimmen

inline-block-Elemente scheinbar grundlos Zeilenumbrüche aufweisen?

Ich habe einige ziemlich einfache HTML/CSS, die nicht so funktionieren, wie ich es erwarte. Grundsätzlich habe ich mein Körper-Setup zu 400px breit sein. Ich habe dann zwei divs innerhalb des Körpers mit expliziten Breiten von 300px und 100px. Darüber hinaus sind beide dieser divs eingestellt, um display: inline-block . Aus irgendeinem Grund bricht das 100px div aus dem Inhaltsbereich des Körpers heraus und erscheint darunter. Ich weiß nicht, warum das passiert. Wenn ich die Breite von 100px auf 96px setze, funktioniert es. Wenn ich sie jedoch auf 97px, 98px, 99px oder zurück auf 100px setze, funktioniert sie nicht. Ich finde dieses Verhalten sehr merkwürdig. Kann mir jemand erklären, was da schief läuft?

Beachten Sie, dass ich dies mit Chrome (Beta Channel) teste. Der Code ist unten.

Der CSS:

body {
    margin: 4px;
    width: 400px;
    height: 250px;
    border: 1px solid black;
}

.list-container {
    display: inline-block;
    width: 300px;
    height: 100%;
    background-color: red;
}

.button-container {
    display: inline-block;
    width: 100px;
    height: 100%;
    background-color: blue;
}

Das HTML:

<body>

<div class="list-container">
</div>

<div class="button-container">
</div>

</body>

13voto

David Thomas Punkte 239063

Das liegt an der Art und Weise, wie white-space kollabiert in html.

Wenn Sie die Zeilenumbrüche zwischen den beiden div Elemente, alles ist in Ordnung:

<div class="list-container">
</div><div class="button-container">
</div>

JS Fiddle Demo .

Sie könnten auch einfach die Zwischenräume auskommentieren div s:

<div class="list-container">
</div><!--

--><div class="button-container">
</div>

JS Fiddle Demo .

Oder setzen Sie sogar die font-size auf Null für die body Element (aber Sie müssen es natürlich für die untergeordneten Elemente umdefinieren:

body {
    margin: 4px;
    width: 400px;
    height: 250px;
    border: 1px solid black;
    padding: 0;
    font-size: 0;
}

JS Fiddle Demo .

2voto

Nick F Punkte 9196

Eine weitere Möglichkeit mit ungeraden inline-block Verhalten in Chrome ist, wenn Sie text-render: optimizeLegibility gesetzt. Ich hatte mit unerklärlichen Zeilenumbrüchen in Inline-Blockelementen in Chrome zu kämpfen und fand heraus, dass das Entfernen von text-render: optimizeLegibility das Problem behoben.

Ich hatte mindestens eine andere schwer zu klärendes Problem (unerklärliche Nichtwiedergabe von Web-Schriften), das sich als Ursache herausstellte optimizeLegibility in der Vergangenheit, also wird das von nun an ein Hauptverdächtiger sein, wenn sich Dinge in Chrome seltsam verhalten.

(nb. Auch wenn Sie nicht denken, dass Sie es verwenden, wenn Sie ein Framework wie Twitter Bootstrap verwenden, können Sie es unwissentlich verwenden)

0voto

Cfreak Punkte 18773

Das ist der Spielraum in deinem Körper:

margin: 4px;

Denn der Rand zählt als Teil der Gesamtbreite. 300px für das erste Div + 100px für das zweite Div + 8px (4 auf jeder Seite) für den Rand = 408px. Das zwingt das zweite Div nach unten in die nächste Zeile.

Ich bin eigentlich etwas überrascht, dass es mit 96 funktioniert. Es wirkt so, als würde es nur die Marge auf einer Seite berücksichtigen. Ich hätte erwartet, dass es nur bei 92 oder darunter funktioniert. So oder so Konto für die Randgröße in der Breite des Körpers oder setzen Sie den Rand auf 0 und das sollte das Problem beheben.

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