【问题标题】:Css nested list with active item to fill the whole row带有活动项的 Css 嵌套列表填充整行
【发布时间】:2018-02-09 12:08:21
【问题描述】:

我有一个作为菜单的无限嵌套列表。我有一个.active 列表项来为锚点添加背景颜色。

我希望它用背景颜色填充整行,而不是在其中开始几个选项卡。这意味着我需要a 标记来填充整行,同时让文本缩进。

.menu {
  background: #eee;
  width: 300px;
}

.menu > ul {
  margin-left: -25px;
}

ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

li {
  padding-left: 25px;
}

li.active a {
  background: red;
}

a {
  display: block;
}
<div class="menu">
<ul>
  <li><a href="#">Level 1</a></li>
  <li>
    <ul>
      <li>
        <ul>
          <li class="active">
            <a href="#">Level 3</a>
          </li>
        </ul>
        <a href="#">Level 2</a>
       </li>
    </ul>
    <a href="#">Level 1</a>
   </li>
  <li><a href="#">Level 1</a></li>
</ul>
</div>

【问题讨论】:

  • @Paulie_D 是的。我开始这么想了。问题是 text-indent 不知道以前的 text-intent 并且我的深度未知。
  • @Paulie_D 或者我们可以换个思路,用另一个元素作为背景,让它伸展整行:)

标签: css list text-indent


【解决方案1】:

我会使用一个伪元素来创建这样的背景:

.menu {
  background: #eee;
  width: 300px;
  overflow: hidden;
}

.menu>ul {
  margin-left: -25px;
}

ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

li {
  padding-left: 25px;
  position: relative;
}

li.active:before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  left: -1000px; /* a big value so it works with any level*/
  background: red;
  z-index: 0;
}

a {
  display: block;
  position: relative;
  z-index: 1;
}
<div class="menu">
  <ul>
    <li><a href="#">Level 1</a></li>
    <li>
      <ul>
        <li>
          <ul>
            <li class="active">
              <a href="#">Level 3</a>
            </li>
          </ul>
          <a href="#">Level 2</a>
        </li>
      </ul>
      <a href="#">Level 1</a>
    </li>
    <li><a href="#">Level 1</a></li>
  </ul>
</div>

【讨论】:

  • 真的很不错的“黑客”。我对其进行了测试,即使在我的真实项目中也能正常工作。但是,我在我的项目中对其进行了一些更改,因为它还选择了兄弟姐妹。所以我将:before 放在a 元素上,并在a 元素内添加了一个span 元素(对于z-index:1)。一个很好的副作用是aelement 可以一直点击到左侧。
  • @JensTörnell 奇怪的是,如果添加 span,a 会以这种方式变为可点击...你能告诉我吗? :)
  • @JensTörnell 啊我明白了!因为伪元素现在在 a 里面 ;)
  • 抱歉回复晚了。是的,因为a:before 跨越整行,整行都是可点击的。那是因为:before 仍然是a 的一部分。
  • @JensTörnell 没问题 ;) 顺便说一句:)
猜你喜欢
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 2019-06-04
  • 2021-02-26
  • 2020-12-10
相关资源
最近更新 更多