Ich brauche runde Ecken an einem Elternteil, um den Inhalt vor seinen Kindern zu verbergen. overflow: hidden
funktioniert in einfachen Situationen, bricht jedoch in Webkit-basierten Browsern und Opera, wenn das übergeordnete Element relativ oder absolut positioniert ist.
Dies funktioniert in Firefox und IE9:
CSS
#wrapper {
width: 300px;
height: 300px;
border-radius: 100px;
overflow: hidden;
position: absolute;
}
#box {
width: 300px;
height: 300px;
background-color: #cde;
}
HTML
<div id="wrapper">
<div id="box"></div>
</div>
Danke für die Hilfe!
UPDATE: Der Fehler, der dieses Problem verursacht, wurde seitdem in Chrome behoben. Ich habe Opera oder Safari jedoch nicht erneut getestet.
Egal, ich habe es geschafft, das Problem zu lösen, indem ich eine zusätzliche Unterteilung zwischen Wrapper und Box eingefügt habe.
CSS
#wrapper {
position: absolute;
}
#middle {
border-radius: 100px;
overflow: hidden;
}
#box {
width: 300px; height: 300px;
background-color: #cde;
}
HTML
<div id="wrapper">
<div id="middle">
<div id="box"></div>
</div>
</div>
Vielen Dank an alle, die mitgeholfen haben!
Ich habe eine andere Lösung für dieses Problem gefunden. Dies sieht aus wie ein weiterer Fehler in WebKit (oder wahrscheinlich Chrome), aber es funktioniert. Alles, was Sie tun müssen, ist, dem #wrapper-Element ein WebKit-CSS-Maske hinzuzufügen. Sie können ein einzelnes Pixel-PNG-Bild verwenden und es sogar in das CSS aufnehmen, um eine HTTP-Anforderung zu speichern.
#wrapper {
width: 300px; height: 300px;
border-radius: 100px;
overflow: hidden;
position: absolute; /* this breaks the overflow:hidden in Chrome/Opera */
/* this fixes the overflow:hidden in Chrome */
-webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);
}
#box {
width: 300px; height: 300px;
background-color: #cde;
}
Fügen Sie Ihrem umrandeten Element einen Z-Index hinzu, der die darin enthaltenen Elemente maskiert.
opazität: 0,99; auf Wrapper Webkit-Fehler beheben
Scheint so:
.wrap {
-webkit-transform: translateZ(0);
-webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);
}
Unterstützt in neuestem Chrome, opera und safari, können Sie dies tun:
-webkit-clip-path: inset(0 0 0 0 round 100px);
clip-path: inset(0 0 0 0 round 100px);
Sie sollten auf jeden Fall das Tool ausprobieren http://bennettfeely.com/clippy/ !
Keine Antwort, aber dies ist ein gemeldeter Fehler unter der Chromium-Quelle: http://code.google.com/p/chromium/issues/detail?id=6236
Sieht leider nicht so aus, als würde jemand daran arbeiten. :(
ändern Sie die Deckkraft des übergeordneten Elements mit dem Rahmen, um die gestapelten Elemente neu zu organisieren. Dies hat nach stundenlangen Recherchen und gescheiterten Versuchen auf wundersame Weise für mich funktioniert. Es war so einfach wie das Hinzufügen einer Deckkraft von 0,99, um diesen Paint-Prozess von Browsern neu zu organisieren. Check out http://philipwalton.com/articles/what-no-one-told-you-about-z-index/
basierend auf Graycrows exzellenter Antwort ...
Hier ist ein realistischeres Beispiel, das zwei Cicular Divs mit etwas Füllstoff enthält. Ich habe den hartcodierten PNG-Hintergrund durch einen Hex-Wert ersetzt, d. H.
-=-webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);
wird ersetzt durch
-webkit-mask-image:#fff;
Siehe diese JSFiddle ... http://jsfiddle.net/hqLkA/
Für mich hat keine der Lösungen gut funktioniert, nur mit:
-webkit-mask-image: -webkit-radial-gradient(circle, white, black);
auf dem Wrapper-Element hat die Arbeit erledigt.
Hier das Beispiel: http://jsfiddle.net/gpawlik/qWdf6/74/
Hier sehen Sie, wie ich es gemacht habe; Jsfiddle
Mit dem Code, den ich eingegeben habe, habe ich es geschafft, ihn auf Webkit (Chrome/Safari) und Firefox zum Laufen zu bringen. Ich weiß nicht, ob es mit der neuesten Version von Opera funktioniert. Ja, es funktioniert unter der neuesten Version von Opera.
#wrapper {
width: 300px; height: 300px;
border-radius: 100px;
overflow: hidden;
position: absolute; /* this breaks the overflow:hidden in Chrome/Opera */
}
#box {
width: 300px; height: 300px;
background-color: #cde;
border-radius: 100px;
-webkit-border-radius: 100px;
-moz-border-radius: 100px;
-o-border-radius: 100px;
}
Wenn Sie eine Maske für ein Bild erstellen und das Bild im Container positionieren möchten, setzen Sie das Attribut 'position: absolute' nicht. Sie müssen lediglich den linken und den rechten Rand ändern. Chrome/Opera befolgt den Überlauf: versteckte Regeln und Regeln für den Rahmenradius.
// Breaks in Chrome/Opera.
.container {
overflow: hidden;
border-radius: 50%;
img {
position: absolute;
left: 20px;
right: 20px;
}
}
// Works in Chrome/Opera.
.container {
overflow: hidden;
border-radius: 50%;
img {
margin-left: 20px;
margin-right: 20px;
}
}