【问题标题】:Padding to last sub-menu item填充到最后一个子菜单项
【发布时间】:2021-10-17 22:05:25
【问题描述】:

我有一个带有子菜单和子子菜单的菜单:

<nav>
<ul><li class="menu-item-has-children"><a href="#"><span>Shop</span></a>
<ul class="sub-menu">
<li class="menu-item-has-children"><a href="#"><span>Item 1</span></a>
<ul class="sub-menu">
    <li><a href="#"><span>Item 1-1</span></a></li>
    <li><a href="#"><span>Item 1-2</span></a></li>
</ul>
</li>
<li class="menu-item-has-children"><a href="#"><span>Item 2</span></a>
<ul class="sub-menu">
    <li><a href="#"><span>Item 2-1</span></a></li>
    <li><a href="#"><span>Item 2-2</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="menu-item-has-children"><a href="#"><span>About</span></a>
<ul class="sub-menu">
<li><a href="#"><span>Item 3</span></a></li>
<li><a href="#"><span>Item 4</span></a></li>
<li><a href="#"><span>Item 5</span></a></li>
<li><a href="#"><span>Item 6</span></a></li>
</ul>
</li>
<li class="menu-item-has-children"><a href="#"><span>Legal</span>
<ul class="sub-menu">
<li><a href="#"><span>Item 7</span></a></li>
<li><a href="#"><span>Item 8</span></a></li>
<li><a href="#"><span>Item 9</span></a></li>
<li><a href="#"><span>Item 10</span></a></li>
</ul>
</li>
<li class="menu-item-has-children"><a href="#"><span>Blog</span></a>
<ul class="sub-menu">
<li><a href="#"><span>Item 11</span></a></li>
<li><a href="#"><span>Item 12</span></a></li>
<li><a href="#"><span>Item 13</span></a></li>
<li><a href="#"><span>Item 14</span></a></li>
</ul>
</li>
</ul></nav>

https://jsfiddle.net/h7qb1wus/

在单击之前,子菜单始终处于隐藏状态。我需要为每个最后一个子菜单添加一个底部填充,以便每个子菜单下方有更多空间,除了最后一个子菜单 - 这个不应该有任何底部填充。所以在第 1-2 项、第 2-2 项、第 6 项和第 10 项下面应该是填充。并且应该总是有相同的填充,所以下面的项目 2-2 应该仍然是 20px 而不是 40px。

我试过了

.sub-menu:not(:last-child){
     padding-bottom: 20px;
     }

但它不起作用。我怎样才能做到这一点?

【问题讨论】:

  • 您所有的子菜单都是最后一个子菜单 - 尝试去掉 not 并放入类似背景的东西:红色 - 它们都会被着色。

标签: css css-selectors


【解决方案1】:

您可以通过以下 CSS 规则组合来实现。注意:第二条规则中的!important 出于特殊原因是必要的,否则它不会覆盖适用的第一条规则。

我还为受影响的元素添加了红色背景以使其更加明显。

nav > ul > li:not(:last-child) > ul.sub-menu > li:last-child,
nav > ul > li:not(:last-child) > ul.sub-menu > li > ul.sub-menu > li:last-child {
  background: red;
  padding-bottom: 20px;

}
nav > ul li.menu-item-has-children {
  background: none !important;
  padding-bottom: 0 !important;
}
<nav>
<ul><li class="menu-item-has-children"><a href="#"><span>Shop</span></a>
<ul class="sub-menu">
<li class="menu-item-has-children"><a href="#"><span>Item 1</span></a>
<ul class="sub-menu">
    <li><a href="#"><span>Item 1-1</span></a></li>
    <li><a href="#"><span>Item 1-2</span></a></li>
</ul>
</li>
<li class="menu-item-has-children"><a href="#"><span>Item 2</span></a>
<ul class="sub-menu">
    <li><a href="#"><span>Item 2-1</span></a></li>
    <li><a href="#"><span>Item 2-2</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="menu-item-has-children"><a href="#"><span>About</span></a>
<ul class="sub-menu">
<li><a href="#"><span>Item 3</span></a></li>
<li><a href="#"><span>Item 4</span></a></li>
<li><a href="#"><span>Item 5</span></a></li>
<li><a href="#"><span>Item 6</span></a></li>
</ul>
</li>
<li class="menu-item-has-children"><a href="#"><span>Legal</span>
<ul class="sub-menu">
<li><a href="#"><span>Item 7</span></a></li>
<li><a href="#"><span>Item 8</span></a></li>
<li><a href="#"><span>Item 9</span></a></li>
<li><a href="#"><span>Item 10</span></a></li>
</ul>
</li>
<li class="menu-item-has-children"><a href="#"><span>Blog</span></a>
<ul class="sub-menu">
<li><a href="#"><span>Item 11</span></a></li>
<li><a href="#"><span>Item 12</span></a></li>
<li><a href="#"><span>Item 13</span></a></li>
<li><a href="#"><span>Item 14</span></a></li>
</ul>
</li>
</ul></nav>

【讨论】:

  • 抱歉,我的问题可能不是 100% 清楚。 Yozr 代码几乎可以像我需要的那样工作,除了:我拥有的子菜单默认是隐藏的,只有在单击时才会打开。所以如果你点击“Shop”,你会看到“Item 1”和“Item 2”(没有它们各自的子菜单),所以“Item 2”下面也需要填充。但是,如果您单击“项目 2”,该项目的子菜单打开,底部应该只有 20 像素,而不是“项目 2”的 20 像素和“项目 2-2”的 20 像素。这有意义吗?
猜你喜欢
  • 2016-02-18
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 2014-11-09
  • 2016-03-14
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多