【问题标题】:Trying to select only top level li items and exclude sub level drop down ones in a a nav尝试仅选择顶级 li 项目并排除导航中的子级下拉项目
【发布时间】:2014-08-15 00:04:14
【问题描述】:

我在 wordpress 网站上编辑 CSS 并在选择器上苦苦挣扎。下面是一些导航。我想仅将以下样式应用于顶层<li>s,而不是嵌套下拉列表中的样式。但我应用的所有内容似乎也会影响下拉菜单。

这是我要应用的样式:

.dropdown ul li:hover {
    background: orange;
    opacity: 0.4;
}

但是当我这样做时,它也会影响嵌套的下拉菜单 li 项目。我应该使用什么选择器?这里是网站:http://gcameron8977.webfactional.com/

<nav>
    <div class="dropdown dropdown-horizontal">
      <ul class="main-nav">
        <li ><a href="http://gcameron8977.webfactional.com/">Home</a></li>
        <li class="page_item page-item-57"><a href="http://gcameron8977.webfactional.com/?page_id=57">Clear Outs &#038; Offers</a></li>
        <li class="page_item page-item-8 page_item_has_children current_page_ancestor current_page_parent"><a href="http://gcameron8977.webfactional.com/?page_id=8">Flooring</a>
           <ul class='children'>
             <li class="page_item page-item-19"><a href="http://gcameron8977.webfactional.com/?page_id=19">Chestnut</a></li>
             <li class="page_item page-item-15"><a href="http://gcameron8977.webfactional.com/?page_id=15">Douglas Fir</a></li>
             <li class="page_item page-item-12"><a href="http://gcameron8977.webfactional.com/?page_id=12">Heart Pine</a></li>
             <li class="page_item page-item-17"><a href="http://gcameron8977.webfactional.com/?page_id=17">Maple</a></li><li class="page_item page-item-10 current_page_item"><a href="http://gcameron8977.webfactional.com/?page_id=10">Oak</a></li>
           </ul>

我尝试了一些方法,包括: .dropdown ul &gt; li:hover { // 注意右箭头。这不应该意味着只有 .dropdown ul 的第一代子代吗?

也试过这个:

.dropdown > ul > li:hover // same logic but still impacts the sub menu?

【问题讨论】:

  • 你试过了吗? .dropdown &gt; ul li:hover
  • 当您在悬停时定位 li 时,它也会覆盖子 ul(除非它绝对定位在父 li 之外)但要回答第一部分 .dropdown ul &gt; li:hover 涵盖在其中找到的所有 ul .dropdown(包括 .children 和他们的 lis)
  • @Evan 刚刚尝试过。没运气。我正在努力解决这个问题
  • @Doug Firr 也许你可以为我们创建一个 jsfiddle?
  • @Doug Strange - 好吧,既然你有可用的课程,你可以利用.dropdown .main-nav &gt; li:hover { background: #FFA500; }

标签: html css wordpress


【解决方案1】:

第二级下拉列表中的无序列表项或&lt;li&gt;s 是它们上方列表的子项,或者换句话说,它们是包含它们的列表的子项。正因为如此,他们继承了父母的风格。一种方式(不一定是最好的),但我会使用的方式是按照您想要的方式设置父列表的样式,然后创建另一个仅适用于子级的规则,从而覆盖父级的第一条规则。运行顺序在这里很重要。第二条规则,以子代为目标的规则必须在样式表中以父代为目标的规则之后。如果第二条规则出现在样式表的后面,它只会覆盖第一条规则。

父母的风格:

.dropdown ul li:hover {
    background: orange;
    opacity: 0.4;
}

覆盖您为父级设置的样式的子级样式:

.dropdown ul li li:hover {
    background: black; /* Or whatever your default color is*/
    opacity: 1;
}

希望这会有所帮助。

新!

锚标签!

&lt;a&gt; 包含在您的 &lt;li&gt; 中的锚标记也是父列表的子级,因此继承了不透明状态。这意味着您也需要覆盖样式集!

.dropdown ul li li a:hover { 
    background: black; /* Or whatever your default color is*/
    opacity: 1;
}

解决此问题的另一种更简洁的方法可能是为锚标签设置不透明度和颜色的样式,而不是列表标签。子列表是父列表的子列表,但不是父锚标记,因此设置为顶级锚的规则不会向下传递层次结构。但是,为了查看样式以您想要的方式影响锚点,您还需要将它们的显示类型设置为 inline-block。所以:

.dropdown  a { 
    display:inline-block; /* will make all your navigations anchors inline-block*/
    /*Style all your navigation links in here, rather than styling their parent li's*/
    background:white; /*or whatever*/
}


.dropdown ul li a:hover {
    background: orange; /* Or whatever your default color is*/
    opacity: 0.4;
}

【讨论】:

  • 你好,道格。我刚刚对我的答案进行了编辑。它与您在样式表中列出规则的顺序有关。尝试按照样式表最后列出的顺序排列规则。您可能有另一个讨厌的规则与您在样式表中其他地方声明的意图相冲突。最后设定的规则优先于一切。
  • 嗯。是的,我按顺序在样式表的末尾列出。一定是某处讨厌的规则
  • 再不行!看看,刚刚添加了你的最新更新:gcameron8977.webfactional.com
  • 但是 moleytv 的想法是正确的——唯一的办法
猜你喜欢
  • 2017-01-12
  • 2020-01-09
  • 1970-01-01
  • 2021-09-04
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多