如何在开始滚动之前不使用动态高度隐藏 fixed-top header 下的元素
How not to hide element under fixed-top header with dynamic height before start scrolling
我正在尝试创建一个具有动态高度的 header 并在滚动时固定在页面顶部(在整个滚动过程中可见)。动态高度的原因是由于浏览器调整大小,所以当 header 中的文本被换行时, header 的高度增加了。
因此,增加的高度覆盖了滚动开始前的部分主体body。虽然我已经尝试将 padding-top: YYpx
添加到主 body,但当 header 的高度发生变化时,它会覆盖主 body 的元素。基本上,我想有 2 个连续的容器但不相互重叠,并且在滚动第二个容器时第一个容器会粘在顶部。
我想使用整个页面进行滚动,而不是只在第二个容器中使用滚动条。如果这不可能,那么也可以在第二个容器内滚动作为答案,前提是第二个容器的内容将根据第一个容器的新高度向下移动。
我已经为此苦苦挣扎了几天,我尝试了 ,但是 .header-container
覆盖了部分背景,这不是我想要的。
我试图将导航栏用作 header,但事实证明它确实限制了我可以放入的内容,所以我定制了一个 header 而不是固定在顶部。
之前(不使用 CSS @media):
https://jsfiddle.net/q19of4j6/1/
之后(我尝试使用 CSS 手动移动第二个容器):
https://jsfiddle.net/q19of4j6/
调整上面jsfiddle的大小来查看问题。
使用@media 移动容器对我来说不可行。
我现在拥有的:
CSS
.custom-navbar {
padding: 0.5rem 1rem;
}
body > main {
padding-top: 112px;
}
@media (max-width: 1153px) {
body > main {
padding-top: 136px;
}
}
@media (max-width: 955px) {
body > main {
padding-top: 160px;
}
}
HTML
<body>
<header>
<!--Fixed navbar-->
<nav class="custom-navbar fixed-top navbar-light bg-light">
<!-- Contents in the header that I wish to keep at the top while scrolling-->
</nav>
</header>
<main role="main">
<div class="container-fluid">
<table class="table table-striped table-bordered dataTable" cellspacing="0"
width="100%" role="grid">
<!--Contents of table, and contents that will move while scrolling-->
</table>
</div>
</main>
</body>
我希望在调整浏览器宽度(尚未开始滚动)时,main
中的内容将根据 header
的新高度移动。
但是现在,header
高度增加时,覆盖了main
的部分内容。
我仍然希望 header 固定在页面顶部,main
中的内容可以使用整页滚动条滚动。
您可以 see here,没有简单的方法可以动态固定 header 高度。大多数解决方案涉及设置定义的 header 高度或 JS。
IMO,最简单的解决方案是使用 position: sticky
而不是 position: fixed
:
https://www.codeply.com/go/ElHS24d2vT
<header class="sticky-top">
<!--Fixed navbar-->
<nav class="custom-navbar navbar-light bg-light">
<div>
whateverlalallala
</div>
</nav>
</header>
<main role="main">
<div class="container-fluid">
<table class="table table-striped table-bordered dataTable" cellspacing="0" width="100%" role="grid"></table>
<p style="background:red">1</p>
<p style="background:blue">2</p>
<p style="background:orange">3</p>
<p style="background:green">4</p>
</div>
</main>
我正在尝试创建一个具有动态高度的 header 并在滚动时固定在页面顶部(在整个滚动过程中可见)。动态高度的原因是由于浏览器调整大小,所以当 header 中的文本被换行时, header 的高度增加了。
因此,增加的高度覆盖了滚动开始前的部分主体body。虽然我已经尝试将 padding-top: YYpx
添加到主 body,但当 header 的高度发生变化时,它会覆盖主 body 的元素。基本上,我想有 2 个连续的容器但不相互重叠,并且在滚动第二个容器时第一个容器会粘在顶部。
我想使用整个页面进行滚动,而不是只在第二个容器中使用滚动条。如果这不可能,那么也可以在第二个容器内滚动作为答案,前提是第二个容器的内容将根据第一个容器的新高度向下移动。
我已经为此苦苦挣扎了几天,我尝试了 .header-container
覆盖了部分背景,这不是我想要的。
我试图将导航栏用作 header,但事实证明它确实限制了我可以放入的内容,所以我定制了一个 header 而不是固定在顶部。
之前(不使用 CSS @media): https://jsfiddle.net/q19of4j6/1/
之后(我尝试使用 CSS 手动移动第二个容器): https://jsfiddle.net/q19of4j6/
调整上面jsfiddle的大小来查看问题。
使用@media 移动容器对我来说不可行。
我现在拥有的:
CSS
.custom-navbar {
padding: 0.5rem 1rem;
}
body > main {
padding-top: 112px;
}
@media (max-width: 1153px) {
body > main {
padding-top: 136px;
}
}
@media (max-width: 955px) {
body > main {
padding-top: 160px;
}
}
HTML
<body>
<header>
<!--Fixed navbar-->
<nav class="custom-navbar fixed-top navbar-light bg-light">
<!-- Contents in the header that I wish to keep at the top while scrolling-->
</nav>
</header>
<main role="main">
<div class="container-fluid">
<table class="table table-striped table-bordered dataTable" cellspacing="0"
width="100%" role="grid">
<!--Contents of table, and contents that will move while scrolling-->
</table>
</div>
</main>
</body>
我希望在调整浏览器宽度(尚未开始滚动)时,main
中的内容将根据 header
的新高度移动。
但是现在,header
高度增加时,覆盖了main
的部分内容。
我仍然希望 header 固定在页面顶部,main
中的内容可以使用整页滚动条滚动。
您可以 see here,没有简单的方法可以动态固定 header 高度。大多数解决方案涉及设置定义的 header 高度或 JS。
IMO,最简单的解决方案是使用 position: sticky
而不是 position: fixed
:
https://www.codeply.com/go/ElHS24d2vT
<header class="sticky-top">
<!--Fixed navbar-->
<nav class="custom-navbar navbar-light bg-light">
<div>
whateverlalallala
</div>
</nav>
</header>
<main role="main">
<div class="container-fluid">
<table class="table table-striped table-bordered dataTable" cellspacing="0" width="100%" role="grid"></table>
<p style="background:red">1</p>
<p style="background:blue">2</p>
<p style="background:orange">3</p>
<p style="background:green">4</p>
</div>
</main>