Ich möchte ein Tutorial erstellen, das den Benutzer genau dahin führt, wo er klicken soll. Ich versuche, den gesamten Bildschirm mit einem zu bedecken, der <div>
alle Elemente außer einem bestimmten Bereich, der sich in einem festen , und width
befindet height
, top
dimmt left
.
Das Problem ist, ich kann keinen Weg finden, die der Eltern "abzubrechen" background-color
(was auch transparent ist).
Im Ausschnitt unten hole
ist das Div, das ohne sein soll background-color
, einschließlich des seiner Eltern.
Kann das überhaupt erreicht werden? Irgendwelche Ideen?
#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>
Hier ist ein Modellbild dessen, was ich erreichen möchte:
javascript
jquery
html
css
Koby Douek
quelle
quelle
Antworten:
Du könntest es mit nur einem machen
div
und es gebenbox-shadow
.BEARBEITEN : Wie @Nick Shvelidze betonte, sollten Sie das Hinzufügen in Betracht ziehen
pointer-events: none
Hinzugefügt
vmax
Wertbox-shadow
als @Prinzhorn vorgeschlagenquelle
pointer-events: none
dass Sie hinzufügen, wenn der Bereich darunter anklickbar sein soll.box-shadow: 0 0 0 100vmax rgba(0,0,0,.3);
wird garantiert den gesamten Bildschirm abdeckenSie können eine SVG erstellen, die mit einem Pfad gefüllt ist, der das Loch hat, in dem Sie es benötigen. Aber ich denke, dann müssen Sie einen Weg finden, um mit Klicks umzugehen, da alle auf das überlagerte SVG ausgerichtet sind. Ich
document.getElementFromPoint
kann dir hier helfen. mdnquelle
Dies kann auch ähnlich wie bei der Antwort von @ VilleKoo erfolgen, jedoch mit einem Rand.
quelle
Mit der CSS- Eigenschaft können Sie dasselbe erreichen wie in der Antwort von VilleKoo
outline
. Es hat eine ausgezeichnete Browser-Unterstützung (und funktioniert auch in IE8 +). Konturen haben dieselbe Syntax wie Rahmen, aber im Gegensatz zu Rahmen nehmen sie keinen Platz ein, sondern werden über den Inhalt gezeichnet.Auch für IE9 + Sie ersetzen können
99999px
mitcalc(100 * (1vh + 1vw - 1vmin))
.Nachteil dieses Ansatzes ist, dass
outline
nicht betroffen istborder-radius
.Demo:
quelle
Hier ist einfacher jQuery-Code mit @VilleKoo css
quelle
quelle