覆盖整个页面,除了一个元素

Posted

技术标签:

【中文标题】覆盖整个页面,除了一个元素【英文标题】:Overlay entire page except one element 【发布时间】:2022-01-14 22:05:32 【问题描述】:

我正在使用 Angular flex 布局和大部分自定义 CSS 作为布局,我正在尝试找到一种方法来创建覆盖整个页面(除了一个元素)的覆盖效果。我最初的想法是使用 CDK 叠加库来创建效果。但这需要您在页面上包含一个 ng-template,您要呈现的内容就位于其中。

我想要做的只是在除指定元素之外的所有内容的顶部显示叠加层,而不仅仅是 ng 模板中的内容。我意识到这可能是不可能的,所以我的第二个想法是,也许您可​​以以某种方式创建一个“虚拟”元素,该元素与您要覆盖的元素位于同一位置,但看起来好像覆盖只是覆盖了所有内容,但指定的元素。

这有点像我现在所处的位置,我已经让叠加层发挥作用,但我只是不明白需要发生什么才能让它做到这一点。在这个例子中,也许只是让它覆盖除了你点击来切换它的按钮之外的所有东西?

https://stackblitz.com/edit/angular-ivy-aftubj

【问题讨论】:

【参考方案1】:

我会尝试这样的事情:用 div 包装你的目标元素。包装器将具有与您的元素(块、内联块、...)和 position: relative 相同的 CSS display 类型。显示叠加层时,将包装器的宽度和高度设置为当前大小(以保持布局不变),并将目标元素设置为 position: absolute; z-index:高于叠加层。隐藏叠加层时还原更改。如果您的目标元素具有固定尺寸,则可以避免动态设置这些值。

window.addEventListener('load', () => 
  document.getElementById('hide-button').addEventListener('click', () => 
    document.getElementById('overlay').style['display'] = 'none';
  );
);
#overlay 
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-color: gray;
  opacity: 0.5;
  z-index: 1;


.wrapper 
  border: 1px solid green;
  position: relative;
  margin: 4rem;


.target-element 
  background-color: white;
  position: absolute;
  z-index: 2;


.wrapper, .target-element 
  width: 15em;
  height: 1.5em;
<!DOCTYPE html>
<html>
<body>
  <h1>Overlay playground</h1>
  <div class="wrapper">
    <div class="target-element">
      This should stay above the overlay.
    </div>
  </div>
  <div id="overlay">
    <button id="hide-button" style="margin: 2rem 0 0 20rem">Hide overlay</button>
  </div>
</body>
</html>

【讨论】:

我正在使用 angular flex 和 angular cdk 覆盖,所以我不能在不破坏布局的情况下更改元素的位置。对于内容区域中的内联内容来说,这可能已经足够简单了,但是如果我将它应用到我的 stackblitz 中的左侧导航,例如它会搞砸一切。

以上是关于覆盖整个页面,除了一个元素的主要内容,如果未能解决你的问题,请参考以下文章

怎样用css 使背景图片覆盖整个页面

css 关于width:100%的问题 本身的页面超过了整个屏幕的大小,也就是有滚动条,但是它只能覆盖屏幕大小

数据绑定整个页面的正确方法或vuejs方法是啥?

如果在文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖

制作一个覆盖整个页面的 div

iPhone界面为啥会覆盖