Existe-t-il un moyen de mettre une unité d'espace complète des deux côtés de tous les articles, y compris le premier et le dernier?
J'essaie de trouver un moyen d'avoir un espacement égal autour de flexbox children.
Dans cet article il semble que la chose la plus proche soit justify-content: space-around
. Il dit que:
space-around
: les éléments sont répartis uniformément sur la ligne avec un espace égal autour d'eux. Notez que visuellement les espaces ne sont pas égaux, car tous les éléments ont un espace égal des deux côtés. Le premier élément aura une unité d'espace contre le bord du conteneur, mais deux unités d'espace entre l'élément suivant car cet élément suivant a son propre espacement qui s'applique.
Il existe au moins deux méthodes pour un espace égal entre tous les éléments, y compris le premier et le dernier éléments. Cependant, une méthode ne prend pas encore totalement en charge le navigateur.
Notez cette section de la documentation de Firefox:
In-flow
::after
et::before
les pseudo-éléments sont maintenant des éléments flexibles .
En fait, tous les principaux navigateurs considèrent les pseudo-éléments d'un conteneur flexible comme des éléments flexibles.
Sachant cela, ajoutez ::before
et ::after
à votre conteneur.
Avec justify-content: space-between
et les pseudo-éléments de largeur nulle, les éléments flexibles visibles apparaîtront régulièrement espacés.
flex-container {
display: flex;
justify-content: space-between;
}
flex-container::before {
content: "";
}
flex-container::after {
content: "";
}
/* non-essential decorative styles */
flex-container {
padding: 5px 0;
background-color: lightyellow;
border: 1px solid #aaa;
}
flex-item {
height: 50px;
width: 75px;
background-color: lightgreen;
}
<flex-container>
<flex-item></flex-item>
<flex-item></flex-item>
<flex-item></flex-item>
<flex-item></flex-item>
</flex-container>
space-evenly
Le CSS Box Alignment Module , qui est la proposition inachevée du W3C d'établir un ensemble commun de propriétés d'alignement à utiliser sur tous les modèles de boîtes, fournit le space-evenly
valeur à utiliser avec le justify-content
et align-content
Propriétés.
4.3. Alignement distribué: les
stretch
,space-between
,space-around
, etspace-evenly
mots-clés
space-evenly
Les sujets d'alignement sont répartis uniformément dans le conteneur d'alignement, avec un espace pleine taille à chaque extrémité.
Les sujets d'alignement sont répartis de sorte que l'espacement entre deux sujets d'alignement adjacents, avant le premier sujet d'alignement et après le dernier sujet d'alignement soit le même.
Cependant, au moment de la rédaction de cet article, il semble que space-evenly
ne fonctionne que dans Firefox et Chrome.
flex-container {
display: flex;
justify-content: space-evenly;
}
/* non-essential decorative styles */
flex-container {
padding: 5px 0;
background-color: lightyellow;
border: 1px solid #aaa;
}
flex-item {
height: 50px;
width: 75px;
background-color: lightgreen;
}
<flex-container>
<flex-item></flex-item>
<flex-item></flex-item>
<flex-item></flex-item>
<flex-item></flex-item>
</flex-container>
En outre, voici une démonstration utile du MDN justify-content
page pour tester space-evenly
et d'autres valeurs dans votre navigateur. https://jsfiddle.net/gkrsr86n/
Vous pouvez le faire en définissant le padding
du conteneur flex et le margin
des éléments flex:
.container {
display: flex;
padding: 0 1%;
}
.item {
flex: 1;
margin: 0 1%;
}
Dans Firefox uniquement, il y a un space-evenly
la valeur pour justify-content
qui fait cela.
C'est dans le projet de travail CSS3
https://www.w3.org/TR/css-align-3/#valdef-align-content-space-evenly
div {
display: flex;
height: 100px;
justify-content: space-evenly;
border: 1px solid black;
margin: auto;
}
span {
width: 20%;
background: red;
}
<div>
<span></span>
<span></span>
<span></span>
</div>
Ceci est un cas d'utilisation parfait pour flex-basis
et justify-content: space-between
si vous savez à l'avance combien de composants seront dans votre rangée. Spécifiez un pourcentage de base flexible sur vos éléments flexibles qui totalise moins de 100% pour tous les articles. Les pourcentages restants deviendront des marges.
Pas d'éléments psuedo, de sélecteurs enfants ou de rembourrage/marge.
div {
display: flex;
justify-content: space-between;
height: 100px;
}
span {
flex-basis: 32%;
background: red;
}
<div>
<span></span>
<span></span>
<span></span>
</div>
Vous pouvez essayer ceci:
*, *:before, *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.list_wrap {
display: flex;
flex-wrap: wrap;
border: 1px solid purple;
padding-top: 5px;
}
.list_item {
width: 24%;
margin-right: 0.8%;
margin-bottom: 5px;
height: 30px;
border: 1px solid green;
}
.list_item:nth-child(4n+1) {
margin-left: 0.8%;
}
<div class="list_wrap">
<div class="list_item"></div>
<div class="list_item"></div>
<div class="list_item"></div>
<div class="list_item"></div>
<div class="list_item"></div>
<div class="list_item"></div>
<div class="list_item"></div>
<div class="list_item"></div>
</div>