Padding-bottom/top in flexbox-layout
Ich habe eine flexbox-layout enthält zwei Elemente. Einer von Ihnen verwendet padding-bottom :
CSS:
#flexBox {
border: 1px solid red;
width: 50%;
margin: 0 auto;
padding: 1em;
display: flex;
flex-direction: column;
}
#text {
border: 1px solid green;
padding: .5em;
}
#padding {
margin: 1em 0;
border: 1px solid blue;
padding-bottom: 56.25%; /* intrinsic aspect ratio */
height: 0;
}
HTML:
<div id='flexBox'>
<div id='padding'></div>
<div id='text'>Some text</div>
</div>
Blauen element behält das Seitenverhältnis entsprechend seiner Breite, wenn die Seite geändert wird.
Dies funktioniert mit Chrome und IE und sieht wie folgt aus :
Jedoch in Firefox und Edge, bekomme ich die folgende (es ignoriert die Polsterung auf der blauen box, die ist, was behält das Seitenverhältnis):
Ich bin zu neu, um flexbox, um wirklich zu verstehen, wenn dies sollte oder nicht funktionieren sollte. Der springende Punkt bei der flexbox ist, um die Größe der Dinge, aber ich bin mir nicht sicher, warum es ist, ignorieren die intrinsische Polsterung und absolute Größen auf das Blaue element.
Ich denke, schließlich bin ich auch nicht sicher, ob Firefox oder Chrome tut das richtige! Kann jeder Firefox-flexbox-Experten helfen?
- Die obigen Erklärungen waren sehr hilfreich. Für weitere Kontext und Erklärung, ich empfehle das Smashing Magazine ' s "Making Embedded Content Arbeiten In Einem Responsive iFrame" (smashingmagazine.com/2014/02/...). Dieser Artikel hat einen klaren, präzisen Kontext, warum das padding und div-wrapper-Lösung funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update Februar 2018
Firefox und edge haben vereinbart, Ihr Verhalten zu ändern, auf top, bottom margin und padding für die flex (und raster) Artikel :
Dies ist noch nicht implementiert (getestet auf FF 58.0.2).
Update april 2016
(immer noch gilt im Mai 2017)
Den specs haben aktualisiert wurden zu:
Quelle: CSS Flexible Box Layout Module Level 1
Dies bedeutet, dass chrome, IE, FF und Edge (auch wenn Sie nicht das gleiche Verhalten), Folgen die Spezifikationen aussprechen.
Specs auch sagen:
Umgehen :
Können Sie wickeln das erste Kind der flex-container in einem anderen element, und setzen Sie die
padding-bottom
auf das zweite Kind :CSS:
HTML:
Getestet habe ich diese in modernen Browsern (IE, chrome, FF und Edge) und Sie haben alle das gleiche Verhalten. Da die Konfiguration des 2. Kindes ist das "gleiche wie immer" ich nehme an, dass ältere Browser (aslo support-flexbox-layout-Modul) machen das gleiche layout.
Vorherigen Antwort:
Nach der Spezifikationen, Firefox hat das richtige Verhalten
Explanantion :
Anders als block-Elemente, die berechnen Ihre % margin/padding entsprechend der Container Breite, flex-Elemente:
Quelle dev.w3.org
Dies bedeutet, dass padding-bottom/top und margin-bottom/top) errechnet sich nach der Höhe des Containers und nicht die Breite wie in nicht-flexbox-layouts.
Da Sie nicht angegeben haben, in beliebiger Höhe auf das übergeordnete flex-Element der unteren Polsterung des Kindes sein soll 0px.
Hier ist ein fiddle mit einer festen Höhe an den Elternteil, der zeigt, dass padding-bottom berechnet sich nach der Höhe des
display:flex;
container.Die akzeptierte Antwort ist richtig, aber ich verbesserte mich auf die Lösung mit einem pseudo-element anstelle von hinzufügen ein neues element in der HTML.
Beispiel: http://jsfiddle.net/4q5c4ept/
HTML:
CSS:
Ich verwendet, vh anstelle von % perfekt funktioniert in Safari, Firefox & Edge
vh
ist ein viewport-Einheit und nicht in Bezug auf das element oder seine Eltern. Es funktioniert in einer situation, wo Sie Ihr element so groß sein sollte, relativ zum viewport, aber nicht im Allgemeinen (und nicht in Bezug auf diese Frage).