Je souhaite créer un didacticiel qui mènera l'utilisateur exactement là où cliquer. Je suis en train de couvrir tout l'écran avec <div>
qui BAISSERA tous les éléments sauf une région spécifique qui est fixe width
, height
, top
et left
.
Le problème est que je ne trouve pas de moyen «d'annuler» celui du parent background-color
(qui est également transparent).
Dans l'extrait ci-dessous, hole
est le div qui est censé être sans aucun background-color
, y compris son parent.
Cela peut-il être accompli du tout? Des idées?
#bg{
background-color:gray;
opacity:0.6;
width:100%;
height:100vh;
}
#hole{
position:fixed;
top:100px;
left:100px;
width:100px;
height:100px;
}
<div id="bg">
<div id="hole"></div>
</div>
Voici une maquette de ce que j'essaie d'accomplir:
javascript
jquery
html
css
Koby Douek
la source
la source
Réponses:
Vous pouvez le faire avec un seul
div
et lui donner unbox-shadow
.ÉDITER: comme @Nick Shvelidze l'a souligné, vous devriez envisager d'ajouter
pointer-events: none
Valeur
vmax
ajoutéebox-shadow
comme le suggère @Prinzhornla source
pointer-events: none
si vous souhaitez que la zone en dessous soit cliquable.box-shadow: 0 0 0 100vmax rgba(0,0,0,.3);
sera garanti pour couvrir tout l'écranVous pouvez créer un SVG qui est rempli d'un chemin avec le trou là où vous en avez besoin. Mais je suppose que vous devez trouver un moyen de gérer les clics, car tous seront ciblés sur le svg superposé. Je
document.getElementFromPoint
peux vous aider ici. mdnla source
Cela peut également être fait de la même manière que la réponse de @ VilleKoo, mais avec une bordure.
la source
Vous pouvez obtenir la même chose que dans la réponse de VilleKoo en utilisant CSS
outline
propriété . Il a un excellent support de navigateur (et fonctionne également dans IE8 +). Les contours ont la même syntaxe que les bordures, mais contrairement aux bordures, ils ne prennent pas de place, ils sont dessinés au-dessus du contenu.Aussi pour IE9 +, vous pouvez le remplacer
99999px
parcalc(100 * (1vh + 1vw - 1vmin))
.L'inconvénient de cette approche est qu'elle
outline
n'est pas affectée parborder-radius
.Démo:
la source
Voici du code jQuery simple utilisant @VilleKoo css
la source
la source