Wenn in einem Wrapper column-count
verwendet wird und auf die Container im Wrapper border-radius
angewendet wird und der Inhalt im Container überläuft, verschwindet der Inhalt vollständig in allen Spalten mit Ausnahme der ersten.
Hier ist mein Beispiel: https://jsfiddle.net/f4nd7tta/
Der rote Halbkreis ist nur in der ersten Spalte sichtbar, warum?
#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>
Ich habe ehrlich keine Ahnung, warum dies passiert. Ich schaue in den Dokumenten, ob sie dieses Verhalten angegeben haben, ich möchte überprüfen, ob sie beabsichtigt ist oder ob es sich um einen Fehler handelt. Für jetzt benutze ich
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
transform: translateX(0);
Und es funktioniert ... Fügen Sie also die obigen Eigenschaften in #main_wrap > div
hinzu und ich denke, wenn Sie die Herstellerpräfixe ausschließen, ist transform: translateX(0);
ausreichend.
Ok, ich denke es ist ein Fehler:
Die absolut positionierten Elemente werden abgeschnitten, als ob ein Überlauf : Ausgeblendet auf die Box angewendet wird. Das Anwenden von Überlauf: Visible oder eine andere Regel behebt das Problem jedoch nicht
Ich habe mehr darüber nachgedacht, als ich die erste Lösung vorschlug, bei der ich die Eigenschaften zufällig eingefügt habe, und es funktioniert hat. Es gibt auch eine Möglichkeit, das, was Sie tun, legal zu tun, indem Sie eine clip
-Eigenschaft verwenden, und Sie brauchen overflow: hidden;
nicht mehr. .
#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);
}
Demo 2 (Clip Demo)
Ich habe ziemlich viel Zeit damit verbracht, dieses Problem zu untersuchen und fand den Vorschlag, die CSS-Eigenschaft will-change: transform;
zu den Elementen im Spaltenlayout hinzuzufügen. Zum Beispiel:
<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>
Hier finden Sie ein Funktionsbeispiel meiner ANSWER , die ich in Firefox & Chrome getestet habe.
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;
}
Ich habe das in Ihrem Beispiel gezeigte Layout neu erstellt. Möglicherweise müssen Sie jedoch einige Änderungen vornehmen, um das endgültige Layout zu erhalten. Dafür spielen Sie mit den markierten (# ***) Eigenschaften