Javascript:两个元素之间的垂直间距

标签 javascript html css

我的网站由一个导航栏(类 .nav-primary)、一个小部件框(id #mw-panel)和一篇文章组成。最近,我尝试通过对 CSS 文件应用以下更改来将小部件框移至顶部:

.mw-panel{top: 50px;}

此选项的问题是,我的元素被固定到特定位置。相反,我希望小部件元素恰好位于菜单栏下方 100 像素处(并且当我向下滚动页面时移动)。我立刻就知道 JavaScript 将是解决这个问题的正确方法。

因为没有成功,所以问了StackOverflow community ,这对我帮助很大。

所附代码片段的 JS 部分中的 JavaScript 代码部分是由我完成的,但它无法正常工作。

有人可以解释一下我需要更改什么才能让这段 JS 代码正常工作吗?同样,#mw-panel 必须位于 .nav-primary 下方 100 像素处。

var menu = document.getElementsByClassName("nav-primary")[0];
var widget = document.getElementById("mw-panel");
var difference = widget.offsetTop - menu.offsetBottom;
if (difference > 100) {
document.getElementById("mw-panel").style.top = (menu.offsetBottom + 100) + "px";
}
.content .entry {
    margin-top: 40px;
  padding-bottom: 400px;
}
<body class="full-width-content">

  <link rel="stylesheet" id="child-theme-css" href="http://vocaloid.de/wp-content/themes/Vuturize/style.css" type="text/css" >
  <div class="site-container">
    <nav class="nav-primary">
      <div class="wrap">
        <ul class="menu genesis-nav-menu menu-primary">
          <li class="menu-item"><a href="#">Home</a>
          </li>
          <li class="menu-item"><a href="#">News</a>
          </li>
          <li class="menu-item"><a href="#">Ranking</a>
          </li>
        </ul>
      </div>
    </nav>
  </div>

  <div class="site-inner">
    <div class="content-sidebar-wrap">
      <main class="content">
        <article class="page entry">
<div>
          <h1>Test Article</h1>
          </div>
        </article>
      </main>
    </div>
  </div>
  <div id="mw-panel">
    <div>
      <h3>Navigation</h3>
      <div>
        <ul>
          <li><a href="#">Letzte Änderungen</a>
          </li>
        </ul>
      </div>
    </div>

      <h3>Werkzeuge</h3>
      <div>
        <ul>
          <li><a href="#">Datei hochladen</a>
          </li>
          <li><a href="#">Spezialseiten</a>
          </li>
        </ul>
      </div>
  </div>
</body>

最佳答案

没有 offsetBottom 这样的属性。仅考虑 offsetTop + offsetHeight 重做代码以获得底部数字。

示例:

var menu = document.getElementsByClassName("nav-primary")
var TrueOffset=menu[0].offsetTop+menu[0].offsetHeight;

您收到错误是因为没有 offsetBottom 属性。

在 Chrome 中执行 console.log(menu) 以查看对象的可用属性

**更新:

将其添加到您的 CSS 中:

.mw-panel{
position: absolute;  
  }

Here it is in action

Updated code in action

关于Javascript:两个元素之间的垂直间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601302/

相关文章:

html - 两个部分的 twitter bootstrap 背景图像

javascript - node-gyp - 找不到库头文件

javascript - 如何使用 JavaScript 创建 SVG 动画标签

javascript - 无法使用命名空间 'ThemeDefinition' 作为 Vuetify 中的类型

javascript - 为什么在获取图像值时 this.value 未定义?

css - 字段集中的表溢出不起作用

html - 为带有 image-url 内容的伪元素设置宽度

css - 使用 CSS 修复 div 以在图像上方制作条形图

java - 什么是 setTimeOut() javascript 到 Android 的等价物?

javascript - 使用 setTimeout 暂停 REST API 调用