如何使一个元素不固定?

4

我目前在处理页头,使用JavaScript制作了汉堡包菜单的滑动效果。问题是当菜单向右滑动时,标题<h2>保持原位不动。希望能找到一种方法使其随着菜单一起滑动。

function show() {
  document.getElementById('sidebar').classList.toggle("active");
}
header {
  background: #ff5f88e6;
  padding: 25px;
  overflow: hidden;
}

header h2 {
  margin-top: 0px;
  color: #fff;
  text-align: center;
}

#sidebar {
  position: absolute;
  height: 100%;
  width: 250px;
  padding: 24px 20px;
  left: -300px;
  top: 0
}

.toggle-btn {
  left: 340px;
  top: 15px;
  position: absolute;
}

.toggle-btn span {
  width: 45px;
  height: 4px;
  background: #000;
  display: block;
  margin-top: 8px;
}

#sidebar.active {
  left: 0;
  transition-duration: 500ms;
}

#sidebar ul li {
  padding: 20px 24px;
  font-size: 25px;
  border-radius: 50px;
}
<header>

  <div id="sidebar">
    <div class="toggle-btn" onclick="show()">
      <span></span>
      <span></span>
      <span></span>
    </div>
    <div class="menu">
      <ul>
        <li><a href="#">Category</a></li>
        <li><a href="#">Discusion</a></li>
        <li><a href="#">Quotes</a></li>
        <li><a href="#">Add Review</a></li>
      </ul>
    </div>


    <h2>"A Book can change the way you look"</h2>

</header>
</div>

that's what's before clicking on the hamburger enter image description here what happens after enter image description here I want the title to slide right so the user can read it


我猜你在你的问题中展示的代码中并没有谈到<h2>标签? - GetSet
1
PS:在关闭“</header>”之前,您缺少一个“</div>”。 - Roko C. Buljan
@Karakopi,您的问题中是否显示了<h2>?看起来似乎没有。您认为的“固定”行为似乎只是一个绝对定位元素(您的侧边栏)覆盖了正文中的另一个不同的“h2”。 - GetSet
问题是标题中的<h2>不会向右滑动,它保持固定,我想要的是如何使它在同时单击toggle-btn时向右滑动。 - Karakopi
我刚刚更新了它,正如你所看到的,标题仍然在“toggle-btn”下面,即使使用绝对定位也不起作用。 - Karakopi
显示剩余2条评论
1个回答

2

一种简单的方法是在将菜单移动到h2元素时,也向header元素添加一个class以移动h2元素。

编辑:我从侧边栏中删除了active类,并创建了一个基于父级active类更改菜单的CSS选择器。此选择器为#header.active #sidebar

function show() {
  document.getElementById('header').classList.toggle("active");
}
header {
  background: #ff5f88e6;
  padding: 10px;
  overflow: hidden;
  display:flex;
  justify-content:center;
  align-items: center;
}

#header.active h2{
  margin-left: 300px;
}

header h2 {
  transition: 500ms all;
  margin: 0;
  padding: 0;
  color: #fff;
  text-align: center;
}

#sidebar {
  position: absolute;
  height: 100%;
  width: 250px;
  padding: 24px 20px;
  left: -300px;
  top: 0;
  transition: 500ms all;
}

.toggle-btn {
  left: 340px;
  top: 10px;
  position: absolute;
}

.toggle-btn span {
  width: 45px;
  height: 4px;
  background: #000;
  display: block;
  margin-top: 8px;
}

#header.active #sidebar {
  left: 0;
}

#sidebar ul li {
  padding: 20px 24px;
  font-size: 25px;
  border-radius: 50px;
}
<header id="header">
  <div id="sidebar">
    <div class="toggle-btn" onclick="show()">
      <span></span>
      <span></span>
      <span></span>
    </div>
    <div class="menu">
      <ul>
        <li><a href="#">Category</a></li>
        <li><a href="#">Discusion</a></li>
        <li><a href="#">Quotes</a></li>
        <li><a href="#">Add Review</a></li>
      </ul>
    </div>    
  </div>
  <h2>"A Book can change the way you look"</h2>
</header>


它有效。谢谢,但是如果我有很多元素,我不能每个元素都做同样的事情,那我该怎么办? - Karakopi
秘诀是,只需将类添加到父元素中,并使用CSS创建选择器,以便对您想要更改的所有元素具有不同的行为。例如:您不必在示例中为侧边栏添加类,可以基于父级使用CSS选择器来实现此效果。注意:我将更新我的答案。 - aquilesb
现在我明白了,非常感谢。我已经寻找很长时间了。 - Karakopi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接