Padding-bottom/top dans flexbox mise en page
J'ai un flexbox disposition contenant deux éléments. L'un d'eux utilise 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>
L'élément bleu conserve ses proportions en fonction de sa largeur lorsque la page est redimensionnée.
Cela fonctionne avec Chrome et IE et ressemble :
Cependant, dans Firefox et Bord, je reçois le suivant (c'est en ignorant le rembourrage sur la boîte bleue, qui est ce qui permet de conserver les proportions):
Je suis trop nouveau pour flexbox pour vraiment comprendre si ce qui devrait ou ne devrait pas fonctionner. Le point de l'ensemble de flexbox est de redimensionner les choses, mais je ne sais pas pourquoi on est ignorant la valeur intrinsèque du rembourrage, et la mise tailles absolues sur l'élément bleu.
Je suppose que, finalement, je ne suis même pas sûr si Firefox ou google Chrome est en train de faire la bonne chose! Peut-Firefox flexbox experts de l'aide?
- Les explications ci-dessus ont été très utiles. Pour plus de contexte et d'explication, je vous recommande de Smashing Magazine de Contenu Intégré Travail En Responsive "iFrame" (smashingmagazine.com/2014/02/...). Cet article a donné clair, concis contexte pour expliquer ce rembourrage et div wrapper solution fonctionne.
Vous devez vous connecter pour publier un commentaire.
Mise À Jour Février 2018
Firefox et edge ont accepté de modifier leur comportement en haut, en bas de la marge et le remplissage de flex (et la grille) éléments :
Ce n'est pas encore mis en œuvre (testé sur FF 58.0.2).
Mise à jour avril 2016
(encore valide en mai 2017)
Les spécifications ont été mis à jour à:
source: CSS Flexible Zone de Mise en page au Niveau du Module 1
Cela signifie que chrome, IE, FF et Edge (même si elles n'ont pas le même comportement) suivre les spécifications recomendation.
Specs aussi dire:
Travail autour de :
Vous pouvez enrouler le premier enfant de la flex récipient dans un autre élément et mettre le
padding-bottom
sur le deuxième enfant :CSS:
HTML:
J'ai testé cela dans les navigateurs (IE, chrome, FF et Edge) et ils ont tous le même comportement. Comme la configuration de la 2ème enfant est le "comme d'habitude", je suppose que les anciens navigateurs (qui aslo soutien flexbox module de mise en page) rendra la même mise en page.
Réponse précédente:
Selon la spécifications, Firefox a le droit de comportement
Explanantion :
Contrairement à bloquer les éléments qui calculent leur % margin/padding, selon les conteneurs de largeur, sur flex éléments:
source dev.w3.org
Cela signifie que padding-bottom/top et margin-bottom/top sont calculées en fonction de la hauteur du conteneur et non pas la largeur comme en non-flexbox mises en page.
Que vous n'avez pas précisé de quelle hauteur sur le parent flex point, le bas du rembourrage de l'enfant est censé être 0px.
Voici une violon avec une hauteur fixe sur le parent qui montre que le rembourrage de fond est calculé en fonction de la hauteur de la
display:flex;
conteneur.Accepté la réponse est correcte, mais je me suis amélioré sur la solution à l'aide d'un pseudo-élément au lieu d'ajouter un nouvel élément dans le code HTML.
Exemple: http://jsfiddle.net/4q5c4ept/
HTML:
CSS:
J'ai utilisé vh au lieu de % a parfaitement fonctionné dans Safari, Firefox & Bord
vh
est une vue de l'unité et non par rapport à l'élément ou de son parent. Il sera dans une situation où votre élément doit être dimensionné par rapport à la fenêtre d'affichage, mais pas en général (et pas en ce qui concerne cette question).