The easiest way is to use a transparent div with overflow hidden (gray)
than inside, just put a circle with a shadow box with a really big spread.
html, body{height:100%;} body{ background: url(http://web-vassets.ea.com/Assets/Richmedia/Image/Screenshots/FIFA-Street-London1web.jpg?cb=1330546446) 50% / cover; } .hasCircle{ width:150px; height:300px; position:relative; overflow:hidden; float:left; } .hasCircle:after{ content:" "; position:absolute; left:0; right:0; margin:100px auto; width:100px; height:100px; border-radius:50%; box-shadow: 0 0 0 1000px #444; }
<div class="hasCircle"></div> <div class="hasCircle"></div> <div class="hasCircle"></div>
As you can see above, I used the :after pseudo-element, which may interfere with the display of some text in the .hasCircle (due to the overlapping pseudo-element), but in order to get the idea, you can do this using a real element like:
<div class="boxTransparentOverflow"> <div class="theTransparentCircleWithGraySpread"></div> Some text </div>
source share