如何制作覆盖页面特定部分的叠加层?
How to make overlay that covers certain part of the page?
我有一个简单的 HTML 和 CSS 叠加层,可在特定操作时触发。我想在页面的特定部分显示叠加层。
我在主体的左侧有侧边栏菜单。使用 position: fixed;
可以很好地创建覆盖所有页面的叠加层,但我希望覆盖层仅覆盖显示在旁边的页面,它必须设置在当前内容之上,就好像我正在使用 position: fixed;
我该怎么做。
HTML 放置在页面正文内容中的代码:
.backdrop {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
background: black;
opacity: 0.3;
background-size: 100% 100%;
}
.loadingSpan {
display: inline-block;
align-items: center;
display: flex;
justify-content: center;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
color: red;
}
<div class="backdrop" id="LoadingContainer">
<div class="loadingSpan">
<h1 id="LoadingText">Loading</h1>
<div class="spinner-grow" role="status">
<span class="sr-only">Loading</span>
<span class="sr-only"></span>
</div>
<div class="spinner-grow" role="status">
<span class="sr-only">Loading</span>
</div>
<div class="spinner-grow" role="status">
<span class="sr-only">Loading</span>
</div>
</div>
</div>
overly 工作正常,但它覆盖了整个页面以及侧面菜单,所以我想修复它只是为了覆盖其当前代码所在的页面。
侧边菜单:
<section class="sidebar">
<ol class="quickinfo">
<li class="quickinfo_item">
<span class="quickinfo_text">Menu1</span>
<span class="quickinfo_text">Menu2</span>
</li>
</ol>
</section>
CSS:
.sidebar {
background: #222d32;
flex: 1;
max-width: 15%;
height: 100%;
color: white; }
.sidebar_item {
display: flex; }
布局:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<section class="container_body container-fluid">
@{ Html.RenderAction("Sidebar", "Ui"); }
<section class="content container-fluid">
@RenderBody()
</section>
</section>
</body>
</html>
更改 .backdrop
position: absolute;
并将其容器设置为 position: relative;
fixed 表示它的位置是相对于视口的(通常)。绝对意味着相对于包含块
容器使用 position: relative
,覆盖层使用 position: absolute
。然后将覆盖层放入容器内。示例:
body {
font-family: sans-serif;
margin: 0;
}
.container {
width: 300px;
height: 200px;
border: 1px solid black;
position: relative;
}
.overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-align: center;
background-color: rgba(0,0,0,0.5);
color: white;
}
<h1>Outside the Container</h1>
<div class="container">
Container Content
<div class="overlay">
Overlay Content
</div>
</div>
我有一个简单的 HTML 和 CSS 叠加层,可在特定操作时触发。我想在页面的特定部分显示叠加层。
我在主体的左侧有侧边栏菜单。使用 position: fixed;
可以很好地创建覆盖所有页面的叠加层,但我希望覆盖层仅覆盖显示在旁边的页面,它必须设置在当前内容之上,就好像我正在使用 position: fixed;
我该怎么做。
HTML 放置在页面正文内容中的代码:
.backdrop {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
background: black;
opacity: 0.3;
background-size: 100% 100%;
}
.loadingSpan {
display: inline-block;
align-items: center;
display: flex;
justify-content: center;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
color: red;
}
<div class="backdrop" id="LoadingContainer">
<div class="loadingSpan">
<h1 id="LoadingText">Loading</h1>
<div class="spinner-grow" role="status">
<span class="sr-only">Loading</span>
<span class="sr-only"></span>
</div>
<div class="spinner-grow" role="status">
<span class="sr-only">Loading</span>
</div>
<div class="spinner-grow" role="status">
<span class="sr-only">Loading</span>
</div>
</div>
</div>
overly 工作正常,但它覆盖了整个页面以及侧面菜单,所以我想修复它只是为了覆盖其当前代码所在的页面。 侧边菜单:
<section class="sidebar">
<ol class="quickinfo">
<li class="quickinfo_item">
<span class="quickinfo_text">Menu1</span>
<span class="quickinfo_text">Menu2</span>
</li>
</ol>
</section>
CSS:
.sidebar {
background: #222d32;
flex: 1;
max-width: 15%;
height: 100%;
color: white; }
.sidebar_item {
display: flex; }
布局:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<section class="container_body container-fluid">
@{ Html.RenderAction("Sidebar", "Ui"); }
<section class="content container-fluid">
@RenderBody()
</section>
</section>
</body>
</html>
更改 .backdrop
position: absolute;
并将其容器设置为 position: relative;
fixed 表示它的位置是相对于视口的(通常)。绝对意味着相对于包含块
容器使用 position: relative
,覆盖层使用 position: absolute
。然后将覆盖层放入容器内。示例:
body {
font-family: sans-serif;
margin: 0;
}
.container {
width: 300px;
height: 200px;
border: 1px solid black;
position: relative;
}
.overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-align: center;
background-color: rgba(0,0,0,0.5);
color: white;
}
<h1>Outside the Container</h1>
<div class="container">
Container Content
<div class="overlay">
Overlay Content
</div>
</div>