Quero criar um tutorial que levará o usuário exatamente onde clicar. Estou tentando cobrir todo o ecrã com um <div>
que irá dim todos os elementos exceto uma região específica que está em um fixo width
, height
, top
e left
.
O problema é que não consigo encontrar uma maneira de "cancelar" o do pai background-color
(que também é transparente).
No recorte abaixo, hole
está o div que deve estar sem nenhum background-color
, incluindo o de seu pai.
Isso pode ser realizado? Alguma ideia?
#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>
Aqui está uma imagem maquete do que estou tentando alcançar:
javascript
jquery
html
css
Koby Douek
fonte
fonte
Respostas:
Você poderia fazer isso com apenas um
div
e dar umbox-shadow
.EDITAR: como @Nick Shvelidze apontou, você deve considerar adicionar
pointer-events: none
vmax
Valor adicionado parabox-shadow
como @Prinzhorn sugeridofonte
pointer-events: none
se quiser que a área abaixo dela seja clicável.box-shadow: 0 0 0 100vmax rgba(0,0,0,.3);
terá a garantia de cobrir a tela inteiraVocê pode criar um SVG que é preenchido com um caminho que tem o buraco onde você precisa. Mas eu acho que você precisa encontrar uma maneira de lidar com os cliques, uma vez que todos eles serão direcionados ao svg sobreposto. Acho que
document.getElementFromPoint
posso te ajudar aqui. mdnfonte
Isso também pode ser feito de forma semelhante à resposta de @VilleKoo, mas com uma borda.
fonte
Você pode conseguir o mesmo que na resposta de VilleKoo usando CSS
outline
propriedade . Possui excelente suporte a navegadores (e funciona também no IE8 +). Os contornos têm a mesma sintaxe das bordas, mas, ao contrário das bordas, eles não ocupam espaço, são desenhados acima do conteúdo.Também para o IE9 + você pode substituir
99999px
porcalc(100 * (1vh + 1vw - 1vmin))
.A desvantagem desta abordagem é que
outline
não é afetada porborder-radius
.Demo:
fonte
Aqui está o código jQuery simples usando @VilleKoo css
fonte
fonte