javascript - 如何设置位置固定水平和粘性垂直

标签 javascript html css

我确实遇到了问题。我正在为我的大学开发一个网站。

您在顶部有一个典型的标题。在这个标题下面是一个 div,它具有一些过滤可能性来过滤位于下方的表格。

表格通常非常大。所以有时你必须在两个方向(水平和垂直)滚动。如果你想滚动,那么标题应该留在它的位置上。在 Header 和 filter div 之间是一个标题。这个标题应该隐藏。

过滤器应该稍微移动到顶部,然后保持在标题下方。为此,我使用了 position: sticky。这很好用。

但如果我向右滚动,滤镜就会移出视口(viewport)。

那么有没有可能,过滤器 div 是垂直粘性的并且水平地保持在他的固定位置?

这是我的问题的一个例子:

body {
  height: 100%;
  display: block;
}
.header {
  background-color: red;
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  z-index: 1;
}

.body {
  padding-top: 20px;
  width: 100%;
  height: 100%;
}

.filter {
  display: flex;
  flex-direction: row;
  align-items: center;
  background-color: blue;
  width: 100%;
  position: sticky;
  position: -webkit-sticky;
  top: 20px;
  z-index: 1;
}



th {
  width: 200px;
  background-color: purple;
  position: sticky;
  top: 40px;
}

td {
  width: 200px;
  background-color: lightblue;
}

table {
  position: relative;
  border-collapse: collapse;
  width: 1500px;
}
<html>
<body>
<div class="header">
Header
</div>
<div class="body">
  <h2>
    Headline
  </h2>
  <div class="filter">
    Filters
  </div>
  <span>some text</span>
  <div class="table">
    <table>
      <thead>
        <tr>
          <th>a</th>
          <th>a</th>
          <th>a</th>
          <th>a</th>
          <th>a</th>
          <th>a</th>
          <th>a</th>
          <th>a</th>
          <th>a</th>
          <th>a</th>
          <th>a</th>
          <th>a</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
        <tr>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
          <td>b</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>
</body>
</html>

所以我不想在水平滚动时失去垂直粘滞行为。我想同时使用粘性垂直和固定水平。

最佳答案

您可以使用简单的 CSS 解决此问题。代码下方

.filter {position: fixed;top: 76px;}

关于javascript - 如何设置位置固定水平和粘性垂直,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59284407/

相关文章:

javascript - clientWidth 和 clientHeight 报告零,而 getBoundingClientRect 是正确的

javascript - 隐形 reCaptcha AJAX 调用

javascript - 使用 D3.js 在矩形上显示文本

javascript - 单击确定的元素

javascript - 在代码中使用 font-awesome

隐式全局上的 JavaScript 未定义错误

html - CSS 使用 100% 的高度和宽度制作 App

html - 使图像粘在 DIV 的底部?不工作

html - 一个 flex 元素的填充会影响其余的 flex 元素

html - 图片/div 太大