Potrzebuję zaokrąglonych rogów nadrzędnego elementu DIV, aby zamaskować zawartość przed jego potomkiem. overflow: hidden
działa w prostych sytuacjach, ale psuje się w przeglądarkach opartych na webkitach i Operze, gdy rodzic jest ustawiony względnie lub absolutnie.
Działa to w przeglądarce Firefox i 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>
Dzięki za pomoc!
AKTUALIZACJA: błąd powodujący ten problem został już naprawiony w Chrome. Nie testowałem jednak ponownie Opery ani Safari.
źródło
Dodaj indeks Z do elementu z border-radius, a zamaskuje on rzeczy w nim zawarte.
źródło
-webkit-mask-image: -webkit-radial-gradient(circle, white, black);
było skutecznym obejściem, ale na szczęście błąd został naprawiony w ostatniej aktualizacji Chrome, którą otrzymałem.Nieważne dla wszystkich, udało mi się rozwiązać problem, dodając dodatkowy element div między opakowaniem a pudełkiem.
CSS
HTML
Dziękuję wszystkim, którzy pomogli!
→ http://jsfiddle.net/5fwjp/
źródło
krycie: 0,99; na opakowaniu rozwiązuje błąd webkita
źródło
transform: translateY(0);
to alternatywa, która daje ten sam rezultat bez ingerencji w wizualną reprezentację obiektu (chyba że używasz perspektywy).Wygląda na to, że ten działa:
http://jsfiddle.net/qWdf6/82/
źródło
transform: translateZ(0)
mi wystarczy.translateZ
) pośrednio włączy przyspieszenie sprzętowe dla twoich elementów, co niestety otwiera zupełnie nową puszkę robaków w niektórych przypadkach.transform: translateZ(0)
również pracował dla mnie. W moim przypadku nie jest złym pomysłem, że ten element jest akcelerowany sprzętowo.Obsługiwane w najnowszym Chrome, Opera i Safari, możesz to zrobić:
Zdecydowanie powinieneś sprawdzić narzędzie http://bennettfeely.com/clippy/ !
źródło
Brak odpowiedzi, ale to zgłoszony błąd w źródle Chromium: http://code.google.com/p/chromium/issues/detail?id=62363
Niestety nie wygląda na to, żeby ktoś nad tym pracował. :(
źródło
zmień krycie elementu nadrzędnego za pomocą obramowania, co spowoduje zmianę organizacji ułożonych w stos elementów. To zadziałało cudownie po wielu godzinach poszukiwań i nieudanych próbach. Było to tak proste, jak dodanie krycia 0,99 w celu ponownego zorganizowania procesu malowania przeglądarek. Sprawdź http://philipwalton.com/articles/what-no-one-told-you-about-z-index/
źródło
Jak dla mnie żadne z rozwiązań nie działało dobrze, tylko przy użyciu:
element opakowania wykonał zadanie.
Tutaj przykład: http://jsfiddle.net/gpawlik/qWdf6/74/
źródło
w oparciu o doskonałą odpowiedź Graycrow ...
Oto bardziej realny przykład, w którym znajdują się dwa cykliczne elementy DIV z pewną zawartością wypełniacza. Zastąpiłem zakodowane na stałe tło png tylko wartością szesnastkową, tj
jest zastępowany przez
Zobacz ten JSFiddle ... http://jsfiddle.net/hqLkA/
źródło
Zobacz, jak to zrobiłem; Jsfiddle
Dzięki kodowi, który wstawiłem, udało mi się uruchomić go na Webkit (Chrome / Safari) i Firefox.
Nie wiem, czy działa z najnowszą wersją Opery.Tak, działa w najnowszej wersji Opery.źródło
border-radius
w ogóle zawracać sobie głowę zakładaniem opakowania na opakowanie w takiej sytuacji, ten sam rezultat można uzyskać, ustawiając go po prostu#box
. Ponadto, jeśli#box
promień obramowania służy tylko do naprawienia WebKita, możesz po prostu dołączyć-webkit-
tam właściwość.Próbowałem każdej odpowiedzi, ale bezskutecznie. Po kilku godzinach badania znalazłem rozwiązanie tego problemu. Użycie tych właściwości w Twojej klasie nie pozwoli elementom div na przepełnienie kontenera.
źródło
Jeśli chcesz utworzyć maskę dla obrazu i umieścić obraz w kontenerze, nie ustawiaj atrybutu „pozycja: absolutna”. Wszystko, co musisz zrobić, to zmienić margines lewy i prawy margines. Chrome / Opera będzie przestrzegać przepełnienia: reguł ukrytych i obramowań.
źródło