为什么我的元素在将位置从固定更改为静态时移动?

Why are my elements moving when changing position from fixed to static?

所以我在我的网站上构建了我的导航栏,我将它必须的每个元素设置为 position: fixed,但我注意到它不太好看,我宁愿将它设置为 position: static,但这是我的问题:当我将位置从固定更改为静态时,我的元素在屏幕上的位置就会发生变化。

这是我的元素之一(按钮)的CSS:

.discord img{
  position: fixed;
  display: block;
  left: 3%;
  bottom: 93%;
  transform: scale(1);
  transition: 0.3s;
  filter: grayscale(1);
}

.discord img:hover{
  position: fixed;
  display: block;
  left: 3%;
  bottom: 93%;
  transition: 0.3s;
  transform: scale(1.1);
  cursor: pointer;
  filter: grayscale(0);
}

就好像 left: 3%bottom: 93% 不再重要一样...

我该如何解决这个问题?

HTML 元素默认定位为静态。无需在您的 CSS 中定义它,除非您使用某种 library/framework 来定义元素的定位。

具有 position: fixed; 的元素相对于视口定位,这意味着即使滚动页面,它也始终位于同一位置。

这意味着,如果您设置 left: 3%;bottom: 93%;,该元素将相对于视口 - 不是它的父容器,在本例中是 discord.

因此,除非您希望元素在滚动页面时出现在那里,否则不要使用 position:fixed;。如果您希望将导航栏设置到位并在滚动期间停留在那里,请仅将 position: fixed; 应用于导航栏的父项 - 包含所有 img-元素的完整容器。

Codepen: https://codepen.io/sigurdmazanti/pen/wvpPJPz

在其父容器上具有 position:fixed; 的示例片段:

body {
  height: 150vh;
  background-color: blue;
}

nav.fixed {
  width: 100%;
  position: fixed;
}

nav.static {
  width: 100%;
  padding-top: 100px;
}

ul {
  max-width: 50%;
  margin: 0 auto;
  list-style-type: none;
  display: flex;
  justify-content: space-between;
}

li {
  background-color: white;
}
<body>
  <nav class="fixed">
    <ul>
      <li>fixed</li>
      <li>fixed</li>
      <li>fixed</li>
    </ul>
  </nav>

  <nav class="static">
    <ul>
      <li>static</li>
      <li>static</li>
      <li>static</li>
    </ul>
  </nav>
</body>