Я хочу создать учебное пособие, которое приведет пользователя именно к тому, куда нужно щелкнуть. Я стараюсь , чтобы покрыть весь экран с <div>
которой тускнеет все элементы , кроме в конкретной области , которая находится в фиксированном width
, height
, top
и left
.
Проблема в том, что я не могу найти способ «отменить» родительский элемент background-color
(который также прозрачен).
В фрагменте ниже показан hole
div, который должен быть без него background-color
, включая его родительский.
Можно ли это вообще сделать? Любые идеи?
#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>
Вот макет того, чего я пытаюсь достичь:
javascript
jquery
html
css
Коби Дуэк
источник
источник
Ответы:
Вы можете сделать это с помощью всего одного
div
и дать ему оценкуbox-shadow
.EDIT: как указал @Nick Shvelidze, вам следует подумать о добавлении
pointer-events: none
Добавленная
vmax
стоимость,box-shadow
как предложил @Prinzhorndiv { position: fixed; width: 200px; height: 200px; top: 50px; left: 50px; /* for IE */ box-shadow: 0 0 0 1000px rgba(0,0,0,.3); /* for real browsers */ box-shadow: 0 0 0 100vmax rgba(0,0,0,.3); pointer-events: none; }
<div></div>
источник
pointer-events: none
если хотите, чтобы область под ним была интерактивной.box-shadow: 0 0 0 100vmax rgba(0,0,0,.3);
будет гарантировано , чтобы покрыть весь экранВы можете создать SVG-файл, заполненный траекторией с отверстием там, где оно вам нужно. Но я предполагаю, что вам нужно найти способ обрабатывать клики, поскольку все они будут нацелены на наложенный svg. Я
document.getElementFromPoint
могу помочь тебе здесь. mdnисточник
Это также можно сделать аналогично ответу @VilleKoo, но с рамкой.
div { border-style: solid; border-color: rgba(0,0,0,.3); pointer-events: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; border-width: 40px 300px 50px 60px; }
<div></div>
источник
Вы можете добиться того же, что и в ответе VilleKoo, используя
outline
свойство CSS . Он имеет отличную поддержку браузера (а также работает в IE8 +). Контуры имеют тот же синтаксис, что и границы, но в отличие от границы они не занимают места, они рисуются над содержимым.Также для IE9 + вы можете заменить
99999px
наcalc(100 * (1vh + 1vw - 1vmin))
.Недостатком такого подхода является то, что на
outline
него не влияетborder-radius
.Демо:
div { position: fixed; width: 200px; height: 200px; top: 50px; left: 50px; /* IE8 */ outline: 99999px solid rgba(0,0,0,.3); /* IE9+ */ outline: calc(100 * (1vw + 1vh - 1vmin)) solid rgba(0,0,0,.3); /* for other browsers */ outline: 100vmax solid rgba(0,0,0,.3); pointer-events: none; }
<div></div>
источник
Вот простой код jQuery с использованием @VilleKoo css
var Dimmer = (function(){ var el = $(".dimmer"); return { showAt: function(x, y) { el .css({ left: x, top: y, }) .removeClass("hidden"); }, hide: function() { el.addClass("hidden"); } } }()); $(".btn-hide").click(function(){ Dimmer.hide(); }); $(".btn-show").click(function(){ Dimmer.showAt(50, 50); });
.dimmer { position: fixed; width: 200px; height: 200px; top: 50px; left: 50px; box-shadow: 0 0 0 1000px rgba(0,0,0,.3); /* for IE */ box-shadow: 0 0 0 100vmax rgba(0,0,0,.3); /* for real browsers */ pointer-events: none; } .hidden { display: none; }
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> </head> <body> <div> <input type="text"> <select name="" id=""></select> <input type="checkbox"> </div> <div> <input type="text"> <select name="" id=""></select> <input type="checkbox"> </div> <div> <input type="text"> <select name="" id=""></select> <input type="checkbox"> </div> <div> <input type="submit" disabled> </div> <input type="button" value="Hide" class="btn-hide"> <input type="button" value="Show" class="btn-show"> <div class="dimmer hidden"></div> <script src="https://code.jquery.com/jquery-2.2.4.js"></script> </body> </html>
источник
#bg { background-color: gray; opacity: 0.6; position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99998; } #hole { position: fixed; top: 100px; left: 100px; width: 100px; height: 100px; z-index: 99999; }
источник