Vous pouvez obtenir un cercle transparent découpé avec 2 techniques différentes :
1.SVG
Les exemples suivants utilisent un svg en ligne . Le premier extrait utilise le élément de masque pour découper le cercle transparent et le second cercle creux est réalisé avec un élément du chemin . Le cercle est fait avec 2 commandes d'arc :
Avec l'élément de masque :
body{background:url('https://farm9.staticflickr.com/8760/17195790401_ceeeafcddb_o.jpg');background-size:cover;}
<svg viewbox="0 0 100 50" width="100%">
<defs>
<mask id="mask" x="0" y="0" width="80" height="30">
<rect x="5" y="5" width="90" height="40" fill="#fff"/>
<circle cx="50" cy="25" r="15" />
</mask>
</defs>
<rect x="0" y="0" width="100" height="50" mask="url(#mask)" fill-opacity="0.7"/>
</svg>
Avec un élément de chemin :
body{background: url('https://farm9.staticflickr.com/8760/17195790401_ceeeafcddb_o.jpg');background-size:cover;}
svg{
display:block;
width:70%;
height:auto;
margin:0 auto;
}
path{
transition:fill .5s;
fill:#E3DFD2;
}
path:hover{
fill:pink;
}
<svg viewbox="-10 -1 30 12">
<path d="M-10 -1 H30 V12 H-10z M 5 5 m -5, 0 a 5,5 0 1,0 10,0 a 5,5 0 1,0 -10,0z"/>
</svg>
Les principaux avantages de l'utilisation de SVG dans ce cas sont :
- Code plus court
- Vous pouvez facilement utiliser une image ou un dégradé pour remplir le masque du cercle.
- maintiennent les limites de la forme et déclenchent des envois de souris uniquement sur le remplissage en respectant le masque ( survolez le cercle transparent découpé dans l'exemple)
- CSS utilisant uniquement des BOX-SHADOWS
Créez un div avec overflow:hidden;
et un pseudo-élément rond à l'intérieur avec border-radius. Donnez-lui un énorme box-shadow et pas d'arrière-plan :
div{
position:relative;
width:500px; height:200px;
margin:0 auto;
overflow:hidden;
}
div:after{
content:'';
position:absolute;
left:175px; top:25px;
border-radius:100%;
width:150px; height:150px;
box-shadow: 0px 0px 0px 2000px #E3DFD2;
}
body{background: url('https://farm9.staticflickr.com/8760/17195790401_ceeeafcddb_o.jpg');background-size:cover;}
<div></div>
La prise en charge des ombres portées par les navigateurs est assurée par IE9+ voir peut utiliser
La même approche consisterait à utiliser une bordure au lieu d'une ombre de boîte. C'est intéressant si vous devez supporter des navigateurs qui ne supportent pas les box-shadows comme IE8. La technique est la même mais vous devez compenser avec les valeurs top et left pour garder le cercle au centre de la div :
body{
background: url('https://farm9.staticflickr.com/8760/17195790401_ceeeafcddb_o.jpg');
background-size:cover;
}
div{
position:relative;
width:500px; height:200px;
margin:0 auto;
overflow:hidden;
}
div:after{
content:'';
position:absolute;
left:-325px; top:-475px;
border-radius:100%;
width:150px; height:150px;
border:500px solid #E3DFD2;
}
<div></div>
1 votes
Par "uniquement CSS", vous préférez sans doute ne pas utiliser d'images. masques d'image ?
0 votes
Je veux faire cela, mais en utilisant un élément avec une image de fond et pas seulement une couleur unie. Est-ce possible ?