Pouvez-vous en quelque sorte désactiver la marge de l'enfant qui touche le conteneur parent?
Par exemple, j'ai 4 div avec une marge fixée à 20 px sur une ligne en div avec un remplissage de 10 px. le premier et le dernier div ne peuvent-ils pas utiliser leur marge gauche ou droite?
ce que je veux: 10px [div] 40px [div] 40px [div] 40px [div] 10px
au lieu de: 30px [div] 40px [div] 40px [div] 40px [div] 30px
html
.parent{ display: flex; padding: 10px; } .child{ maring 20px; width: 100px; height: 100px; }
css
<div class='parent'> <div class='child'></div> <div class='child'></div> <div class='child'></div> <div class='child'></div> </div>
5 Réponses :
Vous pouvez chaîner la pseudo-classe de négation et incluez la marge
gauche et droite pour chaque autre élément enfant correspondant.
Sauf si je vous comprends mal, le CSS
que j'ai déjà écrit fonctionnera avec n
paires parent / enfant. J'ai ajouté quelques paires parent / enfant supplémentaires pour vous montrer que cela fonctionne comme décrit.
<div class='parent'> <div class='child'>1</div> <div class='child'>2</div> <div class='child'>3</div> <div class='child'>4</div> </div> <div class='parent'> <div class='child'>1</div> <div class='child'>2</div> <div class='child'>3</div> <div class='child'>4</div> </div> <div class='parent'> <div class='child'>1</div> <div class='child'>2</div> <div class='child'>3</div> <div class='child'>4</div> </div>
.parent { display: flex; padding: 10px; } .child { margin-top: 20px; margin-bottom: 20px; width: 100px; height: 100px; } .child:not(:first-child):not(:last-child) { margin-left: 20px; margin-right: 20px; }
Vous pouvez utiliser les pseudo-sélecteurs css: first-child et: last-child pour supprimer la marge sur ces éléments. Notez que j'ai ajouté des bordures pour afficher les éléments.
<div class='parent'> <div class='child'>test 1</div> <div class='child'>test 2</div> <div class='child'>test 3</div> <div class='child'>test 4</div> </div>
.parent{ display: flex; padding: 10px; border: solid 1px red; } .child{ margin: 20px 0; width: 100px; height: 100px; border: solid 1px blue; } .child + .child{ margin-left: 40px; }
Alternativement - vous pouvez utiliser le combinateur frère pour ajouter des marges entre les éléments .child adjacents
<div class='parent'> <div class='child'>test 1</div> <div class='child'>test 2</div> <div class='child'>test 3</div> <div class='child'>test 4</div> </div>
.parent{ display: flex; padding: 10px; border: solid 1px red; } .child{ margin: 20px; width: 100px; height: 100px; border: solid 1px blue; } .child:first-child { margin-left: 0; } .child:last-child { margin-right: 0; }
Ceci est plus approprié pour la grille CSS où vous pouvez considérer les lacunes:
<div class='parent'> <div class='child'></div> <div class='child'></div> <div class='child'></div> <div class='child'></div> <div class='child'></div> <div class='child'></div> <div class='child'></div> </div>
.parent{ display: grid; grid-template-columns:repeat(auto-fit,minmax(100px,1fr)); grid-column-gap:40px; padding:10px; border:1px solid; } .child{ height: 100px; background:red; }
Vous n'utilisez que les pseudo-sélecteurs .child: first-child et .child: last-child
<div class='parent'> <div class='child'>dfgdfg</div> <div class='child'>dfgdfg</div> <div class='child'>dfgdfg</div> <div class='child'>dgfdg</div> </div>
.parent{ display: flex; padding: 10px; } .child{ margin: 20px; width: 100px; height: 100px; } .child:first-child { margin-left: 0; } .child:last-child { margin-right: 0; }
Tout ce dont vous avez besoin pour dépendre: des pseudo-sélecteurs css first-child pour supprimer la marge du premier élément.
<div class='parent'> <div class='child'>h</div> <div class='child'>1</div> <div class='child'>2</div> <div class='child'>3</div> </div>
.parent{display: flex; padding: 10px; border:solid 1px red;} .parent .child{margin:20px 0px 20px 40px; width: 100px; height: 100px; border:solid 1px green;} .parent .child:first-child{margin-left:0;}