overflow:hidden on inline-block fügt dem übergeordneten Element Höhe hinzu

Lesezeit: 3 Minuten

Benutzer-Avatar
Stralsi

Ich bin mir sicher, dass dies in irgendeiner Form schon einmal gefragt wurde, aber ich kann einfach keine Antwort finden.

Ich habe einige verschachtelte Divs

<div class="parent">
    <div class="child">A</div>
</div>

Und das Kind hat display:inline-block und overflow:hidden

.parent{
    background-color:red;
}
.child{ 
    background-color:green; 
    display:inline-block;
    overflow:hidden; 
}

Und es wird so gerendert:
Geben Sie hier die Bildbeschreibung ein

Sie können feststellen, dass das Elternteil 5 Pixel höher ist als das Kind.

Woher kommt die zusätzliche Höhe?

Hier ist das Beispiel: http://jsfiddle.net/w8dfU/

Bearbeiten:
Ich möchte display:inline-block oder overflow:hidden nicht entfernen, dies ist ein vereinfachtes Beispiel, um das Problem zu veranschaulichen, aber in meinem echten Layout brauche ich beide. Ich möchte nur verstehen, warum diese zusätzliche Höhe erscheint. Steht irgendwo, dass es so sein soll? Ist es eine Folge einer anderen CSS-Funktion?

  • Ich denke, dieser Beitrag wird Ihre Frage vollständig beantworten. stackoverflow.com/questions/9273016/…

    – Max Nowitsch

    1. Dezember 2013 um 9:36 Uhr

  • Verwenden Sie einfach Inline und nicht Inline-Block und Ihr Problem wird gelöst jsfiddle.net/w8dfU/1

    –San

    1. Dezember 2013 um 9:39 Uhr

  • Die technische Antwort lautet: overflow:hidden verschiebt die Grundlinie des Inline-Blocks. Die Strebe der Line-Box ist standardmäßig darauf beschränkt, auf derselben Baselne wie der Inline-Block zu sitzen, also müssen die Line-Box und das sie enthaltende div in der Höhe zunehmen, um die Unterlänge der Strebe aufzunehmen. Aber die Top-Antwort unter dem Link, den Maksym Stepanenko gibt, erklärt das Problem viel klarer.

    – Alohci

    1. Dezember 2013 um 10:08 Uhr

  • @MaksymStepanenko danke, die Antworten auf diese Frage haben das Problem für mich tatsächlich geklärt.

    – strals

    1. Dezember 2013 um 10:37 Uhr

  • @Alohci dein Kommentar war auch sehr hilfreich, wenn du darauf antwortest, werde ich es akzeptieren

    – strals

    1. Dezember 2013 um 10:38 Uhr

Ich hatte dieses Problem beim Erstellen eines horizontalen Schiebereglers. Ich habe es mit vertical-align:top auf meinen Inline-Block-Elementen behoben.

ul {
    overflow-x: scroll;
    overflow-y:hidden;
    white-space: nowrap;
    -webkit-overflow-scrolling: touch;
}

ul&::-webkit-scrollbar {
    display: none;
}

li {
    display: inline-block;
    vertical-align: top;
    width: 75px;
    padding-right: 20px;
    margin:20px 0 0 0;
}

  • Tatsächlich war vertical-align:top die Lösung. Hier ist eine Erklärung warum: brunildo.org/test/inline-block.html

    – strals

    11. Februar 2014 um 10:57 Uhr

  • Ich hasse CSS so sehr. Es ist absolut und völlig unsinnig, dass dieses Verhalten auftritt. Vielen Dank für diese Arbeit, und ich hoffe, dass wir gemeinsam die Schöpfer von CSS in die tiefsten, unausweichlichen Tiefen der Hölle verbannen können.

    – BT

    25. Juli 2015 um 9:10 Uhr

  • Dies funktioniert nicht auf IE. Irgendwelche Ideen, wie man es dort löst?

    – Buzinas

    20. April 2016 um 5:07 Uhr

Benutzer-Avatar
Stralsi

Die akzeptierte Antwort oben ist richtig, gibt aber nicht die Erklärung, nach der ich gesucht habe. Eine gute Erklärung lieferte @Alohci in seinem Kommentar.

Erläuterung in wenigen worten:

  • Der Wert für vertical-align ist baselinedaher wird das untergeordnete div an der Grundlinie des Textes ausgerichtet.

  • Diese Textgrundlinie ist nicht dasselbe wie die untere Zeile. Es ist etwas höher, um Buchstaben mit Unterlängen aufzunehmen: p, q, g.

  • Aus diesem Grund wird das Problem durch die Einstellung behoben vertikale Ausrichtung: oben.

.child{
    background-color:green; 
    display:inline-block;
    overflow:hidden; 
    vertical-align: top;
}

  • Obwohl dieser Code die Frage möglicherweise beantwortet, bietet er zusätzlichen Kontext bzgl warum und/oder wie Es beantwortet die Frage und würde seinen langfristigen Wert erheblich verbessern. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen.

    – Toby Speight

    20. April 2016 um 13:46 Uhr

Benutzer-Avatar
Nandu Hulsure

Dieser zusätzliche Raum kommt von overflow:hidden der Kinderklasse. Entfernen Sie diese Eigenschaft und überprüfen Sie, ob Sie sie wirklich verwenden möchten overflow:hidden Eigenschaft dann negative Marge für die untergeordnete Klasse verwenden. Sie können dieses zusätzliche Leerzeichen entfernen.

1252280cookie-checkoverflow:hidden on inline-block fügt dem übergeordneten Element Höhe hinzu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy