【问题标题】:css :target selector one link targeting two div's?css :target selector 一个链接指向两个 div?
【发布时间】:2015-10-24 07:25:48
【问题描述】:

我正在尝试仅使用 CSS 制作一个简单的移动菜单切换。通过显示和隐藏两个带有指向显示或隐藏导航菜单的类的不同链接的按钮。

这是本教程link 的编辑,但现在我想让关闭和打开按钮位于单独的 div(标题 div)中,并且我在定位导航以显示或隐藏时遇到问题。

不知何故,我无法正确获取指向菜单的链接。

所以工作部分是我有一个 div 包含两个显示和隐藏的链接,就像一个切换按钮 link

现在我希望它们也显示和隐藏菜单。我从教程中改变的是切换按钮不再在同一个 div 中,现在我无法让它们定位导航。所以这是我遇到的 HTML/CSS 标记问题。

这是我到目前为止所得到的,我想这是一件简单的事情,但我们将不胜感激。

提前致谢!

<style>
#header {
    width: 100%;
    height:100px;
}
/* Hide Menu*/
#mainmenu{
    display: none;
}
#buttons-container a.close-menu-primary{
    display: none;
}

/* Display Menu Items */
#header:target #mainmenu{
    display: block;
}
#buttons-container a.close-menu-primary{
    display: none;

}
/* Hide Open Toggle Link */
#header:target #buttons-container a.open-menu-primary{
    display: none;
}
/* Show Close Toggle Link */
#header:target #buttons-container a.close-menu-primary{
    display: block;
}
</style>

HTML 代码

<div class="header-div" id="header">
<div id="buttons-container" >
            <a href="#header" class="open-menu-primary"><span>menu</a>
            <a href="#" class="close-menu-primary"><span>close</span></a>
</div>
</div>
  <nav class="navigation" id="navigation">
  <ul class="mainmenu" id="mainmenu">
    <li><a href="">main1</a></li>
    <li><a href="">main2</a>
      <ul id="submenu">
                <li><a href="#">sub1</a></li>
                <li><a href="#">sub2/a></li>
      </ul>
    </li>
    <li><a href="">main3</a></li>
  </ul>
</nav>

这是Fiddle

小更新,本教程使用 :target 选择器,这里是 w3school 的描述:带有 # 后跟锚名称的 URL,链接到文档中的某个元素。链接到的元素是目标元素。 :target 选择器可用于设置当前活动目标元素的样式。 w3schools.com/cssref/sel_target.asp

【问题讨论】:

  • 这是我对您问题的理解:两个按钮 v 和 h。如果用户单击 v 菜单应该是可见的,如果用户单击 h 菜单应该被隐藏。这是你要找的吗?
  • 是的,就是这样。并且按钮本身也应该从显示或隐藏中交换。请参阅此工作 [链接] (drummersantana.nl/rieon15.html) 我只想将按钮放在一个单独的 div 中,这就是我的问题所在。我需要重新提出我的问题吗?
  • 小更新,本教程使用 :target 选择器,这里是 w3school 描述:带有 # 后跟锚名称的 URL,链接到文档中的某个元素。链接到的元素是目标元素。 :target 选择器可用于设置当前活动目标元素的样式。 w3schools.com/cssref/sel_target.asp

标签: css html class hyperlink


【解决方案1】:

答案总是比你最初想的要简单。所以我定位包含我想要定位的两个目标的元素。查看代码和 Fiddle。

CSS 代码:

.wrap {
    width:100%;
    height:100%;
}
}
.header {
    width: 100%;
    height:100px;
}
#buttons-container {
    background-color: #006cad;
    text-align:right;
    padding:16px;
}
/* Hide Menu*/
#mainmenu{
    display: none;
}
#buttons-container a.close-menu-primary{
    display: none;
}
/* Display Menu Items */
#wrap:target .navigation #mainmenu{
    display: block;
}
#buttons-container a.close-menu-primary{
    display: none;

}
/* Hide Open Toggle Link */
#wrap:target #buttons-container a.open-menu-primary{
    display: none;
}
/* Show Close Toggle Link */
#wrap:target #buttons-container a.close-menu-primary{
    display: block;
}

HTML 代码:

<div id="wrap">
<div class="header" id="header">
<div id="buttons-container" >
                <a href="#wrap" class="open-menu-primary"><span>menu</a>
                <a href="#" class="close-menu-primary"><span>close</span></a>
</div>
</div>
      <nav class="navigation" id="navigation">
      <ul class="mainmenu" id="mainmenu">
        <li><a href="">main1</a></li>
        <li id="hover-sub"><a href="javascript:void(0)">main2</a>
          <ul id="submenu">
                <li class="menu-item"><a href="#">sub1</a></li>
                <li class="menu-item"><a href="#">sub2</a></li>
          </ul>
        </li>
        <li><a href="" class="con">main3</a></li>
      </ul>
    </nav>
</div>

这是一个小提琴link

【讨论】:

    【解决方案2】:

    您确实可以简化代码。对于这种情况,您不需要 div。而且您只需要一个链接即可切换菜单 - 为什么要在 div 中放置一个链接?见下文

    label {  
      cursor: pointer;
    }
       #menu {
     display: none; /* hide the checkbox */
       }
       .mainmenu {
     display: none;
       }
       #menu:checked + .mainmenu {
     display: block;
      }
    
       nav{display:none;}
    
       label{color:blue;text-decoration:underline;}
    <label for="menu">Menu</label>
    <input type="checkbox" id="menu">
    <ul class="mainmenu" id="mainmenu">
      <li><a href="">main1</a>
      </li>
      <li id="hover-sub"><a href="javascript:void(0)">main2</a>
        <ul id="submenu">
          <li class="menu-item"><a href="#">sub1</a>
          </li>
          <li class="menu-item"><a href="#">sub2</a>
          </li>
        </ul>
      </li>
      <li><a href="" class="con">main3</a>
      </li>
    </ul>

    Here is a fiddle

    【讨论】:

    • 嗨,瑞秋,太好了 :-) 谢谢!但是如果没有 JQuery 应该是可能的,我猜这是一个简单的定位/标记问题。我也有一个像这样工作的 Javascript 版本,但后来我遇到了 Android 问题,所以这个纯 CSS 版本将是我的第一选择。你能告诉我在哪里定位错误吗?
    • @Santana css 比实际需要的复杂得多,我花了一段时间才弄明白。一旦我简化了它,它就更容易使用了。
    • 感谢您的提示,然后我会做一些清洁工作:-)
    • 是的,但我有一个定位问题,您是否查看了我正在尝试调整的教程?因为那是一个,它是简单而纯粹的 CSS,你的链接有两个 javascripting。它确实可以这样工作,但我不明白当您通过链接定位课程时它是如何工作的。请参阅此示例以及我走了多远。 linklink
    【解决方案3】:

    你有兴趣制作dropdown menu

    (这个只创建了一个常规的 CSS 下拉菜单,并在 CSS 中使用常规过渡:)

    * {transition:all 0.3s;-webkit-transition:all 0.3s;font-family: 'Roboto', sans-serif;}
    .header-nav {position:relative;float:left;margin:0 auto;}
    .header-nav ul {position:absolute;float:left;list-style:none;margin:0;padding:0;}
    .header-nav ul li {position:relative;float:left;border-left:4px solid rgba(224, 52, 106, 1);}
    .header-nav ul li ul {margin-left:-4px;}
    .header-nav > ul {position:relative;}
    .header-nav > ul > li:last-child {border-right:4px solid rgba(224, 52, 106, 1);}
    

    toggle button 用于菜单?

    (这个使用过渡和 HTML 复选框来创建切换按钮:)

    .spinner-master input[type=checkbox]:checked ~ .spinner-spin > .horizontal {opacity: 0;}
    .spinner-master input[type=checkbox]:checked ~ .spinner-spin > .diagonal.part-1 {transform:rotate(405deg);-webkit-transform:rotate(405deg);margin-top:10px;}
    .spinner-master input[type=checkbox]:checked ~ .spinner-spin > .diagonal.part-2 {transform:rotate(-405deg);-webkit-transform:rotate(-405deg);margin-top:-16px;}
    

    【讨论】:

    • 嗨,克莱尔,感谢您的宝贵时间。我正在尝试制作一个切换按钮(两个按钮相互隐藏)一个带有显示菜单的操作,另一个则再次隐藏它。
    • 这是它的工作版本,但我希望标题 div 中的菜单关闭和打开按钮,这就是目标被搞砸的地方。 link我会试着用它做一个干净的小提琴,以方便阅读。
    猜你喜欢
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多