我的子菜单父级为什么在我悬停在另一个菜单项上时获得焦点?

huangapple go评论62阅读模式
英文:

Why is my submenu parent focusing when I hover over another menu item?

问题

我正在为我的网站使用Bootstrap模板制作一个侧边导航菜单。我是一名设计师,不是开发人员,但我正在尝试通过实践学习。大部分功能都已经正常运行。但我无法弄清楚为什么当我悬停在第一个或第二个菜单项上时,第三个菜单项会展开。

这是代码链接:https://codepen.io/steve-mullen/pen/WNgNBjE

<html lang="en">
<body>
  <header id="header" class="d-flex flex-column justify-content-center">

    <nav id="navbar" class="navbar nav-menu">
      <ul class="main-nav">
        <li class="no-sub-nav"><a href="#home" class="scrollto active">1<span>Menu 1</span></a></li>
        <li class="no-sub-nav"><a href="#about" class="scrollto">2<span>Menu 2</span></a></li>
        <li class="has-sub-nav"><a href="#portfolio" class="scrollto">3<span>Menu 3</span>
          <ul class="sub-nav">
            <li><a href=""><span>Sub 1</span></a></li>
            <li><a href=""><span>Sub 2</span></a></li>
            <li><a href=""><span>Sub 3</span></a></li>
            <li><a href=""><span>Sub 4</span></a></li>
          </ul>
        </li>
      </ul>
    </nav>

  </header>
</body>
/* CSS部分代码请查看原链接 */

如果您需要进一步的帮助或解释,请告诉我。

英文:

I'm working on a side navigation menu for my website using a bootstrap template. I'm a designer, not a developer, but I'm trying to learn by doing. I got everything working right, mostly. But I can't figure out why when I hover over the first or second menu items, the third one is expanded.

It's a parent for a submenu, but I've tried removing CSS rules one by one to see if that changes or fixes anything, but it doesn't seem to be working. Here is a link to the codepen that has bootstrap already loaded.

https://codepen.io/steve-mullen/pen/WNgNBjE

&lt;html lang=&quot;en&quot;&gt;
&lt;body&gt;
  &lt;header id=&quot;header&quot; class=&quot;d-flex flex-column justify-content-center&quot;&gt;

    &lt;nav id=&quot;navbar&quot; class=&quot;navbar nav-menu&quot;&gt;
      &lt;ul class=&quot;main-nav&quot;&gt;
        &lt;li class=&quot;no-sub-nav&quot;&gt;&lt;a href=&quot;#home&quot; class=&quot;scrollto active&quot;&gt;1&lt;span&gt;Menu 1&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li class=&quot;no-sub-nav&quot;&gt;&lt;a href=&quot;#about&quot; class=&quot;scrollto&quot;&gt;2&lt;span&gt;Menu 2&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li class=&quot;has-sub-nav&quot;&gt;&lt;a href=&quot;#portfolio&quot; class=&quot;scrollto&quot;&gt;3&lt;span&gt;Menu 3&lt;/span&gt;&lt;/a&gt;
          &lt;ul class=&quot;sub-nav&quot;&gt;
            &lt;li&gt;&lt;a href=&quot;&quot;&gt;&lt;span&gt;Sub 1&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;&quot;&gt;&lt;span&gt;Sub 2&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;&quot;&gt;&lt;span&gt;Sub 3&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;&quot;&gt;&lt;span&gt;Sub 4&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/nav&gt;

  &lt;/header&gt;
&lt;/body&gt;
body {
  font-family: &quot;Open Sans&quot;, sans-serif;
  color: #272829;
}

a {
  color: #0563bb;
  text-decoration: none;
}

a:hover {
  color: #067ded;
  text-decoration: none;
}

#header {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  z-index: 9997;
  transition: all 0.5s;
  padding: 15px;
  overflow-y: auto;
}

@media (max-width: 991px) {
  #header {
    width: 300px;
    background: #fff;
    border-right: 1px solid #e6e9ec;
    left: -300px;
  }
}

/* Main Nav */

.nav-menu {
  padding: 0;
  display: block;
  position: relative;
}


.nav-menu * {
  margin: 0;
  padding: 0;
  list-style: none;
}

.nav-menu ul {
  position: relative;
  white-space: nowrap;
}

.no-sub-nav a,
.no-sub-nav a:focus {
  display: flex;
  align-items: center;
  color: rgba(26,26,26,1.00);
  padding: 10px 18px;
  transition: 0.3s;
  font-size: 15px;
  border-radius: 50px;
  background: #f2f3f5;
  height: 56px;
  width: 100%;
  overflow: hidden;
}

.nav-menu a {
	border: 4px #1a1a1a solid;
}

.nav-menu a i,
.nav-menu a:focus i {
  font-size: 20px;
}

.nav-menu a span,
.nav-menu a:focus span {
  padding: 0 5px 0 5px;
  color: #1a1a1a;
}


@media (min-width: 992px) {

  .nav-menu a,
  .nav-menu a:focus {
    width: 56px;
  }
	
  .nav-menu a span,
  .nav-menu a:focus span {
    display: none;
    color: #fff;
  }
	
	.nav-menu li {
		padding: 0;
	}

  .sub-nav {
    display:none;
    position: absolute;
  }
  
  .has-sub-nav:hover .sub-nav {
    display: block;
    transition: 0.3 sec;
    position: absolute;
    margin: 0;
    width:100%;
    padding-top: 8px;
    padding-left:15px;
  }

}	

.nav-menu a:hover,
.nav-menu .active,
.nav-menu .active:focus,
.nav-menu:hover&gt;a {
  color: #fff;
  background: #1a1a1a;
  border: 4px white solid;
  padding: 0 18px;
}

.nav-menu a:hover span,
.nav-menu .active span,
.nav-menu .active:focus span,
.nav-menu:hover&gt;a span {
  color: #fff;
}

.no-sub-nav a:hover, 
.no-sub-nav:hover&gt;a {
  width: 100%;
  color: #fff;
}

.no-sub-nav a:hover span,
.no-sub-nav:hover&gt;a span{
  display: block;
}


/* Sub Nav */
.has-sub-nav {
  padding: 0;
  display: block;
  position: relative;
}

.has-sub-nav * {
  margin: 0;
  padding: 0;
  list-style: none;
}

.has-sub-nav ul {
  position: relative;
  white-space: nowrap;
}

.no-sub-nav {
  margin-bottom: 8px;
}

.has-sub-nav li {
  padding-bottom:8px;
}

.has-sub-nav a,
.has-sub-nav a:focus {
  display: flex;
  align-items: center;
  color: rgba(26,26,26,1.00);
  padding: 10px 18px;
  transition: 0.3s;
  font-size: 15px;
  border-radius: 50px;
  background: #f2f3f5;
  height: 56px;
  width: 100%;
  overflow: hidden;
}

.has-sub-nav a {
	border: 4px #1a1a1a solid;
}

.has-sub-nav a span,
.has-sub-nav a:focus span {
  padding: 0 5px 0 5px;
  color: #1a1a1a;
}

.has-sub-nav a:hover,
.has-sub-nav .active,
.has-sub-nav .active:focus,
.has-sub-nav:hover&gt;a {
  color: #fff;
  background: #1a1a1a;
  border: 4px white solid;
  padding: 0 18px;
}

.has-sub-nav a:hover span,
.has-sub-nav .active span,
.has-sub-nav .active:focus span,
.has-sub-nav:hover&gt;a span {
  color: #fff;
}

.has-sub-nav a:hover,
.has-sub-nav:hover&gt;a {
  width: 100%;
  color: #fff;
}

.has-sub-nav a:hover span,
.has-sub-nav:hover&gt;a span{
  display: block;
}

答案1

得分: 1

在你的CSS中我找到了问题,你只需要移除以下部分的width: 100%

.has-sub-nav a,
.has-sub-nav a:focus

它将会正常工作。

这是因为width:100%使得第三个菜单适应其容器(ul)的宽度,所以每当第一个或第二个菜单展开时,ul会扩展并导致第三个菜单跟随其父元素的宽度,从而引起问题。

英文:

I found the issue in your CSS, you just need to remove the width: 100% in

.has-sub-nav a,
.has-sub-nav a:focus

and it will works as normal.

This is because the width:100% make the 3rd menu to fit to its container's(ul) width, so whenenver 1st or 2nd menu is expanding, ul is expanding and cause 3rd to following its parent width then cause the issue.

https://codepen.io/zeikman/pen/dyqPZKW

huangapple
  • 本文由 发表于 2023年2月16日 08:33:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/75466745.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定