Comment créer des “effondré” frontières autour de flex articles et de leur conteneur?
J'ai le schéma suivant:
CSS:
#limited-width {
width: 100%;
max-width: 200px;
margin: 0 auto;
font-size: 18px;
}
ul {
display: flex;
flex-flow: row wrap;
list-style: none;
padding: 0;
margin: 20px;
}
ul > li {
display: block;
text-align: center;
flex: 1 0 auto;
max-width: 100%;
box-sizing: border-box;
margin: 0;
padding: 4px 7px;
border: 2px solid rgba(0,0,0,.3);
background-color: rgba(0,0,0,.03);
}
HTML:
<div id="limited-width">
<ul>
<li>Apple</li>
<li>Orange</li>
<li>Pineapple</li>
<li>Banana</li>
<li>Tomato</li>
<li>Pear</li>
<li>Lemon</li>
</ul>
</div>
Comme vous pouvez le voir, la liste des éléments à l'intérieur de la ul
ont une frontière avec la largeur de 2px
, mais de ce fait, la frontière entre les éléments en double. Je suis à la recherche d'un moyen de rendre les frontières de la même largeur entre les éléments, tout en gardant la frontière de l'extérieur, le même (de la même manière border-collapse
travaille sur les tables) à l'aide de flexbox. Est-ce possible, et si oui, comment?
Vous devez vous connecter pour publier un commentaire.
Il y a deux principales façons d'atteindre cet objectif. Sous chaque méthode vous permettra de trouver un travail de démonstration que vous pouvez développer pour voir comment il se comporte. Planant au-dessus des éléments, leur donnera une bordure rouge pour faire le choix de l'approche qui fonctionne le mieux pour vous plus facile.
Parent-enfant frontière alignement
Vous devez définir la frontière comme ceci:
La clé ici est dans le
border-width
propriété:top
etleft
sont définies à la taille souhaitée, tandis que leright
etbottom
sont mis à0
right
etbottom
sont définies à la taille souhaitée, tandis que letop
etleft
sont mis à0
Ce faisant, les frontières ajouter de manière à ce qu'ils forment un bien effondré, conformément bordure autour des éléments et le conteneur.
CSS:
HTML:
Réduire de moitié les frontières
Dans le cas où vous voulez avoir des frontières distinctes pour chaque élément pour n'importe quel but, c'est un compromis qui pourrait répondre à vos besoins. Étant donné souhaité
border-width
de2px
le CSS est comme suit:Cette méthode permet de définir la moitié de la largeur de bordure désirée sur la société mère et de ses enfants, participer à la finale de la frontière
2px
d'épaisseur. Méfiez-vous de l'utilisation de cette méthode avec des fractions de pixels (par exemple1.5px
) comme vous pouvez le de rencontrer des problèmes.Lors de l'utilisation de
border-color
-modification des règles de la moitié de la largeur sera évident, mais si vous voulez plus agréable à la recherche des frontières c'est une bien meilleure approche que la première.CSS:
HTML:
J'ai eu la même question, mais j'ai fait ce(voir démonstration ci-dessous).
- Je ajouter pour chaque bloc négatif 'margin-left' et négatif 'margin-top' qui est égale à la largeur de la bordure. Puis-je ajouter de la même, mais positive, 'padding-left' et 'padding-top' pour le conteneur, pour compenser le décalage. Woo-a-la! Maintenant, nous obtenons “s'est effondré” frontières autour de flex articles et de leur conteneur.
CSS:
HTML:
Dans mon cas, les frontières doivent être 1px qui le rend plus difficile. J'ai trouvé une solution à https://codepen.io/Hawkun/pen/rsIEp/ qui utilise des ombres afin de simuler des frontières, qui fonctionne réellement bien.
Voici le code en action. Il n'utilise pas de flexbox, mais si vous appliquez l'ombre à votre flex contenu, vous êtes bon pour aller.
CSS:
HTML:
Voici une autre idée que j'avais qui va garder les frontières "s'est effondré" lorsque flex boîtes de pellicule. Il utilise la couleur d'arrière-plan pour le haut et de la gauche et des frontières à droite et en bas. Il peut être difficile de le faire fonctionner sur une image d'arrière-plan.
CSS:
HTML:
Avec
:last-of-type
vous pouvez "effondrement" de la dernière frontière. Peut-être l'ajout d'unbox-sizing:border-box;