Jak zrobić CSS3 zaokrąglone rogi ukryć przepełnienie w Chrome / Opera

Potrzebuję okrągłych rogów na rodzicu div, aby zamaskować zawartość z jego dzieci. overflow: hidden działa w prostych sytuacjach, ale działa w przeglądarkach opartych na webkit i operze, gdy rodzic jest ustawiony względnie lub absolutnie.

To działa w Firefoksie 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>

Przykład na JSFiddle

Dzięki za pomoc!

UPDATE: błąd powodujący ten problem został naprawiony w Chrome. Nie testowałem ponownie opery ani Safari jednak.

Author: Igor Ivancha, 2011-04-21

12 answers

Znalazłem inne rozwiązanie tego problemu. Wygląda to na kolejny błąd w WebKit( lub prawdopodobnie Chrome), ale działa. Wszystko, co musisz zrobić-to dodać WebKit CSS Mask do elementu #wrapper. Możesz użyć pojedynczego piksela png, a nawet dołączyć go do CSS, aby zapisać żądanie HTTP.

#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;
}​

Przykład JSFiddle

 178
Author: graycrow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-03 11:47:20

Dodaj indeks z do elementu border-radius ' D, A to zamaskuje rzeczy wewnątrz niego.

 96
Author: Jackolai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-08 14:37:49

Nieważne, udało mi się rozwiązać problem, dodając dodatkowy div między opakowaniem a pudełkiem.

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>

Dziękujemy wszystkim, którzy pomogli!

http://jsfiddle.net/5fwjp/

 53
Author: jmotes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-30 15:58:58

Nieprzezroczystość: 0.99; na wrapperze rozwiąż błąd webkit

 16
Author: flavi1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-03 12:22:43

Wygląda na to, że ten działa:

.wrap {
    -webkit-transform: translateZ(0);
    -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);
}

Http://jsfiddle.net/qWdf6/82/

 15
Author: nakrill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-19 10:47:32

Brak odpowiedzi, ale jest to błąd w źródle Chromium: http://code.google.com/p/chromium/issues/detail?id=62363

Niestety, wygląda na to, że nikt nad tym nie pracuje. :(

 6
Author: ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-06 02:07:13

Obsługiwane w najnowszych przeglądarkach chrome, opera i safari, możesz to zrobić:

-webkit-clip-path: inset(0 0 0 0 round 100px);
clip-path: inset(0 0 0 0 round 100px);

Zdecydowanie powinieneś sprawdzić narzędzie http://bennettfeely.com/clippy/!

 6
Author: antoni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-26 14:30:07

Zmień krycie elementu nadrzędnego z obramowaniem, a to spowoduje ponowne uporządkowanie ułożonych elementów. To zadziałało cudownie dla mnie po godzinach badań i nieudanych próbach. To było tak proste, jak dodanie krycia 0.99, aby ponownie zorganizować ten proces malowania przeglądarek. Sprawdź http://philipwalton.com/articles/what-no-one-told-you-about-z-index/

 4
Author: Rami Awar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-12 10:35:11

Bazując na doskonałej odpowiedzi graycrowa...

Oto bardziej realny przykład świata, który ma dwa cicular divs z pewną zawartością wypełniacza. Zastąpiłem mocno zakodowane tło png tylko wartością szesnastkową, tzn.

-=-webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);

Zastępuje się

-webkit-mask-image:#fff;
# Patrz JSFiddle.. http://jsfiddle.net/hqLkA/
 2
Author: gts101,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-18 06:15:09

Jak dla mnie żadne z rozwiązań nie działało dobrze, tylko przy użyciu:

-webkit-mask-image: -webkit-radial-gradient(circle, white, black);

Na opakowaniu element wykonał zadanie.

Oto przykład: http://jsfiddle.net/gpawlik/qWdf6/74/

 2
Author: Grzegorz Pawlik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-09 13:48:03

Zobacz jak to zrobiłem; Jsfiddle

Z kodem, 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 pod najnowszą wersją Opery.

#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;
}
 1
Author: Maze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-21 10:48:55

Jeśli chcesz utworzyć maskę dla obrazu i umieścić obraz wewnątrz kontenera, nie ustawiaj atrybutu 'position: absolute'. Wszystko, co musisz zrobić, to zmienić margines-lewy i margines-prawy. Chrome / Opera będzie stosować się do reguł overflow: hidden i border-radius.

// 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;
        }
    }
 0
Author: user6039997,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-09 14:36:47