Lorsque column-count
est utilisé dans un wrapper et que border-radius
est appliqué sur les conteneurs du wrapper et que son contenu est saturé, le contenu disparaît complètement dans toutes les colonnes, à l'exception de la première.
Voici mon exemple: https://jsfiddle.net/f4nd7tta/
Le demi-cercle rouge n’est visible que dans la première colonne, pourquoi?
#main_wrap{
width:100%;
border:solid 1px black;
-moz-column-count: 3;
-webkit-column-count: 3;
column-count: 3;
}
#main_wrap > div{
border-radius:5px;
overflow:hidden;
position:relative;
-moz-column-break-inside: avoid;
-webkit-column-break-inside: avoid;
column-break-inside: avoid;
width:70%;
height:300px;
border:solid 2px grey;
margin:2px;
}
#main_wrap > div > div{
position:absolute;
background:red;
border-radius:40px;
width:40px;
height:40px;
right:-20px;
top:0;
}
<div id="main_wrap">
<div><div></div></div>
<div><div></div></div>
<div><div></div></div>
<div><div></div></div>
<div><div></div></div>
<div><div></div></div>
<div><div></div></div>
<div><div></div></div>
<div><div></div></div>
<div><div></div></div>
</div>
Honnêtement, je ne sais absolument pas pourquoi cela se produit. Je regarde les docs s'ils ont spécifié ce comportement, je veux vérifier si c'est intentionnel ou s'il s'agit d'un bug. Pour l'instant j'utilise
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
transform: translateX(0);
Et ça marche ... Alors ajoutez les propriétés ci-dessus dans #main_wrap > div
et je pense que si vous excluez les préfixes du vendeur, alors transform: translateX(0);
suffit.
Ok, je pense que c'est un bug:
Les éléments en position absolue sont coupés comme s'il y avait un débordement: masqué appliqué à la boîte. Cependant, en appliquant un débordement: visible ou toute autre règle ne résout pas le problème
Je pensais plus à cela, car j'avais suggéré la première solution d'insérer aléatoirement les propriétés et que cela fonctionnait. Il existe également un moyen de faire légalement ce que vous faites en utilisant une propriété clip
et vous n'avez plus besoin de overflow: hidden;
. .
#main_wrap > div > div{
position:absolute;
background:red;
border-radius:40px;
width:40px;
height:40px;
right:-20px;
top:0;
clip: rect(0px,20px,40px,0px);
}
Démo 2(Clip Démo)
J'ai passé pas mal de temps à étudier ce problème et j'ai trouvé la suggestion d'ajouter la propriété CSS will-change: transform;
aux éléments de la disposition des colonnes. Par exemple:
<div class="container">
<div class="item">
<!-- Things with overflowing content -->
</div>
<div class="item">
<!-- Things with overflowing content -->
</div>
<div class="item">
<!-- Things with overflowing content -->
</div>
</div>
<style>
.container {
columns: auto 5;
column-gap: 0;
margin: -16px;
}
.items {
break-inside: avoid;
padding: 16px;
page-break-inside: avoid;
will-change: transform;
}
</style>
S'il vous plaît trouver un exemple de travail de mon R&EACUTE;PONSE , j'ai testé dans Firefox et Chrome.
CODE HTML
<!--you can add as many divs as you like it will work -->
<div id="main_wrap">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
CODE CSS
#main_wrap{
width:100%;
}
#main_wrap > div{
width:20%; #***
height:250px; #***
background:whitesmoke;
float:left;
position:relative;
overflow:hidden;
border-radius:5px;
border:2px solid gray;
margin-left: 10.75%; #***
margin-bottom:1rem; #***
}
#main_wrap > div:after{
content:"";
position:absolute;
width:40px;
height:40px;
background:red;
border-radius:50%;
right:-20px;
}
J'ai recréé la présentation illustrée dans votre exemple, mais vous devrez peut-être apporter des modifications pour obtenir votre présentation finale. Pour cela jouer avec les propriétés marquées (# ***)