【问题标题】:How to edit this nav to make it a click nav instead of a hover nav?如何编辑此导航以使其成为点击导航而不是悬停导航?
【发布时间】:2015-06-23 09:37:42
【问题描述】:

这是我要编辑的以下 sn-p。 http://www.cssscript.com/simple-accordion-menu-with-css3-transitions/

这里是演示http://www.cssscript.com/demo/simple-accordion-menu-with-css3-transitions/

我想点击下拉菜单,但它一直保持在下拉状态,直到我再次点击另一个菜单或同一个菜单。

知道我将如何做到这一点吗?

【问题讨论】:

  • 我没有密码。我对此很陌生,我什至不知道如何开始。我不要求人们做我的工作,但任何指针都可以。
  • 那么 CSS 无法识别点击事件。你会得到最接近的将是#selector:active。但这只会在按住鼠标按钮的情况下应用 css。菜单一发布就会消失。因此,您必须改用 Javascript。由于您是初学者,我想使用像 jQuery 这样的库是最简单的。
  • 我不介意为您编写一个可行的解决方案。但你不会从中学到任何东西。制作这样的代码并不难,但对于一个绝对的初学者来说,它是相当复杂的。基本上你想要的是用 jQuery 捕捉点击事件,应用当前悬停的 css,如果第二次点击,再次将其删除。
  • 正如@icecub 提到的,您需要发布您尝试使用的代码,并让我们知道您尝试了什么。请参阅“帮助”部分中的 How do I ask a good question。我了解您是新手并且正在尝试开始,但如果您付出更多努力来帮助我们了解您的尝试(即使它完全错误),您将更有可能得到答案。此外,请注意最好发布代码(即使它来自另一个网站)而不是放置链接。如果该网站死了,您的链接将毫无用处。
  • 就像人们说的那样,你应该用 JavaScript 来做这件事。什么应该起作用,但不幸的是,this.menu li:focus + ul li a{ styles here}

标签: html css nav


【解决方案1】:

找到了解决办法。

给你:fiddle

.menu li a:focus + ul li a{ styles here}

我还在链接(锚点)上添加了一个与 JavaScript return false 等效的 jQuery - 因为默认情况下,带有 a# 链接的锚点如果找不到该跳转点,将重新加载页面。如果您的代码允许,您可以在菜单的第一级使用除锚点之外的其他元素,并且不需要 JavaScript。

【讨论】:

  • 如果页面上还有其他内容能够获得焦点,例如一个表单域:jsfiddle.net/jnwy8pyq/4
  • @JonP 这是为该标记提供的解决方案。目标思路很简洁,但是您需要添加跳转点并将链接指向它们。还有一个额外的问题是在垂直类型的菜单中它会滚动到跳转点。不过,解决方案的道具,我很少记得 :target 伪类。
  • 添加有意义的链接从来都不是一件坏事,比盲目的“#”要好​​得多。使用小菜单可能不会有明显的跳转,正如您所指出的,如果需要,可以通过 javascript 消除这种跳转。我喜欢使用焦点的概念,我只是想指出它的缺陷。当然不值得投反对票。
  • @JonP 我没有投反对票,也没有投赞成票。
【解决方案2】:

使用target 伪类代替悬停。请注意,我为每个子菜单添加了一个 ID,并使用顶级导航项链接到该部分。

.menu {
  margin: 0 auto;
  padding: 0;
  width: 350px;
}

.menu li { list-style: none; }

.menu li a {
  display: table;
  margin-top: 1px;
  padding: 14px 10px;
  width: 100%;
  background: #337D88;
  text-decoration: none;
  text-align: left;
  vertical-align: middle;
  color: #fff;
  overflow: hidden;
  -webkit-transition-property: background;
  -webkit-transition-duration: 0.4s;
  -webkit-transition-timing-function: ease-out;
  transition-property: background;
  transition-duration: 0.4s;
  transition-timing-function: ease-out;
}

.menu > li:first-child a { margin-top: 0; }

.menu li a:hover {
  background: #4AADBB;
  -webkit-transition-property: background;
  -webkit-transition-duration: 0.2s;
  -webkit-transition-timing-function: ease-out;
  transition-property: background;
  transition-duration: 0.2s;
  transition-timing-function: ease-out;
}

.menu li ul {
  margin: 0;
  padding: 0;
}

.menu li li a {
  display: block;
  margin-top: 0;
  padding: 0 10px;
  height: 0;
  background: #C6DDD9;
  color: #1F3D39;
  -webkit-transition-property: all;
  -webkit-transition-duration: 0.5s;
  -webkit-transition-timing-function: ease-out;
  transition-property: all;
  transition-duration: 0.5s;
  transition-timing-function: ease-out;
}

/*This selector has changed*/
.menu > li > ul:target li a { 
  display: table;
  margin-top: 1px;
  padding: 10px;
  width: 100%;
  height: 1em;
  -webkit-transition-property: all;
  -webkit-transition-duration: 0.3s;
  -webkit-transition-timing-function: ease-out;
  transition-property: all;
  transition-duration: 0.3s;
  transition-timing-function: ease-out;
}

/*This selector has changed*/
.menu > li > ul:target li a:hover {
  background: #A4CAC8;
  -webkit-transition-property: background;
  -webkit-transition-duration: 0.2s;
  -webkit-transition-timing-function: ease-out;
  transition-property: background;
  transition-duration: 0.2s;
  transition-timing-function: ease-out;
}
<nav id="menu_box">
  <ul class="menu">
    <li> <a href="#sub1">Menu 1</a> <!-- Note the href change here -->
      <ul id="sub1"><!-- Note the ID here -->
        <li><a href="#">Menu 1.1</a></li>
        <li><a href="#">Menu 1.2</a></li>
      </ul>
    </li>
    <li> <a href="#sub2">Menu 2</a>
      <ul id="sub2">
        <li><a href="#">Menu 2.1</a></li>
        <li><a href="#">Menu 2.2</a></li>
        <li><a href="#">Menu 2.3</a></li>
      </ul>
    </li>
    <li> <a href="#sub3">Menu 3</a>
      <ul id="sub3">
        <li><a href="#">Menu 3.1</a></li>
        <li><a href="#">Menu 3.2</a></li>
        <li><a href="#">Menu 3.3</a></li>
        <li><a href="#">Menu 3.4</a></li>
      </ul>
    </li>
    <li> <a href="#">Menu 4</a> </li>
  </ul>
</nav>

【讨论】:

  • 感谢 Jon P,这很有帮助。我了解它们如何链接在一起,但是如果我希望菜单 1 也链接到另一个页面怎么办?是否可以将其锚定到两个链接?
  • 不是真的,一个动作链接。唯一的方法是添加一个额外的链接,如“+”来扩展菜单和导航到页面的文本。这就是为什么悬停嵌套菜单在这种情况下效果更好的原因。您可以使用在悬停时展开的 javascript 菜单,并且只有在悬停另一种导航模式时才会折叠。如果您想提出一个新问题,请基于这个问题(并且不要忘记包含一些代码和 javascript 尝试)
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多