内嵌<li> </li> <li>填充背景

时间:2018-09-12 20:18:59

标签: html css

有一个包含<ul><li>的侧边栏菜单,其中一些<li>内部还有另一个<ul><li>。当我将鼠标悬停在<li>上时,它会显示另一个<ul>。我现在所面对的是,当我将鼠标悬停在<li><ul>上时,它就会显示在其中。全部充满了背景色。但是,我只需要在第一个<li>上显示它,而不是其他。下面的图片中包含示例。

第一个图像是我的尝试。第二张图片是我想要的。

enter image description here

这里是代码

    /* Menu CSS */#cssmenu,
#cssmenu > ul {
  background: url(images/highlight-bg.png) repeat;
  padding-bottom: 3px;
  font-family: Verdana, Geneva, Tahoma, sans-serif;
}
#cssmenu:before,
#cssmenu:after,
#cssmenu > ul:before,
#cssmenu > ul:after {
  content: "";
  display: table;
}
#cssmenu:after,
#cssmenu > ul:after {
  clear: both;
}
#cssmenu {
  width: auto;
  zoom: 1;
  width: 100%;
}
#cssmenu > ul {
  margin: 0;
  padding: 0;
  position: relative;
  background-color: rgba(0, 0, 0, 0.7);
}
#cssmenu > ul li {
  margin: 0;
  padding: 0;
  list-style: none;
}
#cssmenu > ul > li {
  float: left;
  position: relative;
  cursor: pointer;
}
#cssmenu > ul > li > a {
  padding-top: 6px;
  padding-bottom: 6px;
  display: block;
  color: white;
  font-size: 13px;
  text-decoration: none;
  text-transform: uppercase;
  line-height: 18px;
}
#cssmenu > ul > li:hover > a {
  background: #d6d6d6; /* Old browsers */
  background: -moz-linear-gradient(top, #d6d6d6 0%, #e56e1d 49%); /* FF3.6-15 */
  background: -webkit-linear-gradient(top, #d6d6d6 0%,#e56e1d 49%); /* Chrome10-25,Safari5.1-6 */
  background: linear-gradient(to bottom, #d6d6d6 0%,#e56e1d 49%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#d6d6d6', endColorstr='#e56e1d',GradientType=0 ); /* IE6-9 */
}
#cssmenu > ul > li > a > span {
  line-height: 18px;
  font-size: 12px;
  border-right: rgb(255, 255, 255, 0.5) solid 1px;
  padding-right: 38px;
  padding-left: 38px;
}
/*
#cssmenu > ul > li.active > a,
#cssmenu > ul > li > a:active {
  background-color: rgba(0, 0, 0, 0.7);
}
*/
/* Childs */
#cssmenu > ul ul {
  opacity: 0;
  visibility: hidden;
  position: absolute;
  margin: 0;
  padding: 0;
  z-index: -1;
}
#cssmenu > ul li:hover ul {
  opacity: 1;
  visibility: visible;
  margin: 0;
  color: #000;
  z-index: 2;
  left: 0;
}
#cssmenu > ul ul:before {
  content: "";
  position: absolute;
  top: -10px;
  width: 100%;
  height: 20px;
  background: transparent;
}
#cssmenu > ul ul li {
  list-style: none;
  padding: 0;
  margin: 0;
  width: 100%;
}

#cssmenu > ul ul li a {
  padding: 6px 26px;
  background-color: #e56e1d;
  display: block;
  color: white;
  font-size: 13px;
  text-decoration: none;
  width: 194px;
  border-left: 4px solid transparent;
}
#cssmenu > ul ul li a:hover {
  background-color: #ee974f;
}
<ul id="sidebar">
    <li><a href='#'><span>Lorem ipsum dolor sit </span></a></li>
    <li><a href='#'><span>Amet, consectetur </span></a></li>
    <li><a href='#'><span>Adipisici elit, sed </span></a></li>
    <li><a href='#'><span>Eiusmod </span></a>
    <li><a href='#'><span>Tempor incidunt </span></a>
        <ul>
            <li><a href='#'><span>Excepteur</span></a></li> 
            <li><a href='#'><span>Sint obcaecat</span></a></li>
                <ul>
                    <li><a href='#'><span>Obcaecat</span></a></li> 
                    <li><a href='#'><span>Cupiditat</span></a></li>
                </ul>
            <li><a href='#'><span>Cupiditat non </span></a></li>
            <li><a href='#'><span>Proident.</span></a></li>
        </ul>
    </li>
    <li><a href='#'><span>Ut labore et </span></a>
    <li><a href='#'><span>Dolore magna aliqua</span></a>
</ul>

2 个答案:

答案 0 :(得分:0)

您应该只更改要定位的链接的背景,而不是也包含子菜单的li标签。

.sidebar > li > a {
  background-color: blue;
}

刚刚在CSS中注意到您将链接定位为目标,但是链接颜色开始时是悬停颜色...这是一个小提琴:

https://jsfiddle.net/kbmr4wy9/2/

您将要在选择器中编辑背景:

#cssmenu > ul ul li a {}

答案 1 :(得分:0)

临时雇员列表项在其中包括嵌套的ul。这意味着,当您将背景应用于li时,还将为嵌套列表提供背景。

为了将其更改为您期望的结果,以下是两个合理的解决方案:

  1. 假设<a href='#'><span>Tempor incidunt </span></a>的宽度横跨整个导航,请将背景应用于此锚元素而不是li。之所以有效,是因为anchor标记不会包裹嵌套的ul
  2. 将嵌套的ul设为灰色背景。这将覆盖蓝色渐变,并使其按您的设计预期显示。

这两种解决方案均有效。如果我是你,我会倾向于(1),因为它稍微干净一些。但是,它确实需要您的锚标签为全角。但是,这可能会提高可用性,因为单击目标的宽度与导航的宽度相同。