【问题标题】:Make P Tag Ignore Parent Div使 P 标记忽略父 Div
【发布时间】:2017-07-25 20:57:49
【问题描述】:

我的画布外菜单有问题。当菜单打开时,其中的 p 标签似乎会随着它的展开而改变它们的左边距。我希望我的 p 标签完全忽略菜单的打开和关闭并保持它们的文本对齐。这是我想要它做的一个想法:https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_sidenav_push

将其与我当前的代码进行比较:

function openNav() {
  document.getElementById("nav").style.width = "250px";
  document.getElementById("burger").style.left = "260px";
}

function closeNav() {
  document.getElementById("nav").style.width = "0";
  document.getElementById("burger").style.left = "10px";
}
* {
  margin: 0;
  madding: 0;
}

html, body {
  height: 100%;
}

body {
  font-family: sans-serif;
}

nav {
  position: absolute;
  top: 0;
  left: 0;
  display: inline-block;
  height: 100%;
  background-color: #333;
  color: #fff;
  padding-top: 30px;
  text-align: center;
  width: 0;
  white-space: nowrap;
  overflow-x: hidden;
  transition: width 1.5s;
}

.close {
  cursor: pointer;
  position: absolute;
  top: 5px;
  right: 15px;
  font-size: 2em;
}

nav p {
  cursor: pointer;
  display: block;
  font-size: 1.7em;
  margin: 30px auto;
  white-space: nowrap;
}

nav p:hover {
  opacity: 0.8;
}

.burger {
  will-change: left;
  position: absolute;
  left: 10px;
  cursor: pointer;
  font-size: 2em;
  z-index: 1;
  transition: 1.5s;
}
<nav id="nav">
  <span class="close" onclick="closeNav()">&times;</span>
  <p>Home</p>
  <p>About</p>
  <p>Blog</p>
  <p>Contact</p>
</nav>

<span class="burger" id="burger" onclick="openNav()">&#9776;</span>

本质上,我希望 p 标签的行为就像它们是绝对定位的,但在导航扩展时居中。

【问题讨论】:

    标签: javascript html css


    【解决方案1】:

    将您的&lt;p&gt; 标签包围在另一个&lt;div&gt; 中,无论&lt;nav&gt; 是否移动,该标签都将被静态定位。然后对其应用居中对齐:

    function openNav() {
      document.getElementById("nav").style.width = "250px";
      document.getElementById("burger").style.left = "260px";
    }
    
    function closeNav() {
      document.getElementById("nav").style.width = "0";
      document.getElementById("burger").style.left = "10px";
    }
    * {
      margin: 0;
      madding: 0;
    }
    
    html, body {
      height: 100%;
    }
    
    body {
      font-family: sans-serif;
    }
    
    nav {
      position: absolute;
      top: 0;
      left: 0;
      display: inline-block;
      height: 100%;
      background-color: #333;
      color: #fff;
      padding-top: 30px;
      width: 0;
      white-space: nowrap;
      overflow-x: hidden;
      transition: width 1.5s;
    }
    
    .close {
      cursor: pointer;
      position: absolute;
      top: 5px;
      right: 15px;
      font-size: 2em;
    }
    
    nav p {
      cursor: pointer;
      display: block;
      font-size: 1.7em;
      margin: 30px 0;
      white-space: nowrap;
    }
    
    #pHolder{
       margin-left: 75px;
       width: 80px;
       text-align: center;
    }
    nav p:hover {
      opacity: 0.8;
    }
    
    .burger {
      will-change: left;
      position: absolute;
      left: 10px;
      cursor: pointer;
      font-size: 2em;
      z-index: 1;
      transition: 1.5s;
    }
    <nav id="nav">
      <span class="close" onclick="closeNav()">&times;</span>
      <div id="pHolder">
      <p>Home</p>
      <p>About</p>
      <p>Blog</p>
      <p>Contact</p>
      </div>
    </nav>
    
    <span class="burger" id="burger" onclick="openNav()">&#9776;</span>

    【讨论】:

    • 完美!非常感谢。
    • 你也一样。不错的出色菜单@H.Allen。不客气
    【解决方案2】:

    不要更改width,而是保持宽度不变并更改navleft 对齐方式

    试试这个

    function openNav() {
      document.getElementById("nav").style.left = "0px";
      document.getElementById("burger").style.left = "260px";
    }
    
    function closeNav() {
      document.getElementById("nav").style.left = "-250px";
      document.getElementById("burger").style.left = "10px";
    }
    * {
      margin: 0;
      madding: 0;
    }
    
    html, body {
      height: 100%;
    }
    
    body {
      font-family: sans-serif;
    }
    
    nav {
      position: absolute;
      top: 0;
      left: -250px;
      display: inline-block;
      height: 100%;
      background-color: #333;
      color: #fff;
      padding-top: 30px;
      text-align: center;
      width: 250px;
      white-space: nowrap;
      overflow-x: hidden;
      transition: left 1.5s;
    }
    
    .close {
      cursor: pointer;
      position: absolute;
      top: 5px;
      right: 15px;
      font-size: 2em;
    }
    
    nav p {
      cursor: pointer;
      display: block;
      font-size: 1.7em;
      margin: 30px auto;
      white-space: nowrap;
    }
    
    nav p:hover {
      opacity: 0.8;
    }
    
    .burger {
      will-change: left;
      position: absolute;
      left: 10px;
      cursor: pointer;
      font-size: 2em;
      z-index: 1;
      transition: 1.5s;
    }
    <nav id="nav">
      <span class="close" onclick="closeNav()">&times;</span>
      <p>Home</p>
      <p>About</p>
      <p>Blog</p>
      <p>Contact</p>
    </nav>
    
    <span class="burger" id="burger" onclick="openNav()">&#9776;</span>

    【讨论】:

    • 这不是我真正想要的。您会在我提供的链接中注意到导航“链接”完全忽略了侧导航。因此,当导航扩展和收缩时,它们始终保持在相同的位置。
    • 在 w3schools 中,他们保持内容 left 对齐,而您尝试使用 center 对齐。所以当你改变navwidth,那么,当然,内容也会按照width移动。
    • 对,这就是为什么我正在寻找一种绕过这种行为的解决方案。我在想一些涉及绝对定位的事情......
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多