【问题标题】:horizontal menu with different background image for each li每个 li 具有不同背景图像的水平菜单
【发布时间】:2011-12-16 13:05:05
【问题描述】:

我正在寻找可以具有不同背景图像的嵌套菜单,下面是执行所有操作的代码,在悬停时显示具有不同颜色的子节点,但我想要每个链接的不同背景图像和子节点的单独图像。目前它使用颜色工作。 (链接的每张图片的大小会有所不同)

 <div class="TopMenu"> 
    <ul class="myMenu"> 
        <li><a href="Home.aspx">Home</a></li> 
        <li><a href="About-Us.aspx">About us</a></li> 
        <li><a href="Products-For-Sale.aspx">For sale</a>
                <ul>
                    <li><a href="Bedsheets-For-Sale.aspx">Bedsheets</a></li>
                    <li><a href="Rugs-For-Sale.aspx">Rugs</a></li>
                    <li><a href="Accessories-For-Sale.aspx">Accessories</a></li>
                </ul>
                </li> 

        <li><a href="News.aspx">News</a></li> 
        <li><a href="Services.aspx">Services</a></li> 

    </ul> 
 </div><!--TopMenu--> 

/*style the main menu*/
  #header .myMenu {
margin:0px;
padding:0px;
list-style:none;
 text-transform:uppercase;
position:absolute;
 z-index:300;
 left:28px;
 top:108px;
 width:952px;
   }

#header .myMenu li
{
  list-style: none;
  float: left;
  background-color: #4dafde;
  line-height: 25px;
  margin-right: 3px;
  }

 #header .myMenu li a:link, .myMenu li a:visited
{
display: block;
text-decoration: none;
background-color: #4dafde;
padding: 0.5em 2em 0.5em 2em;
margin: 0 0 0 0;

}

#header .myMenu li a:hover {
background-color: #A4D6EE;
}



/*style the sub menu*/
#header .myMenu li ul
  {
position: absolute;
visibility: hidden;
margin: 0;
padding: 0;
background-color: #4dafde;
}

#header .myMenu li ul li {
display:inline;
float:none;
 }

#header .myMenu li ul li a:link, .myMenu li ul li a:visited
{
display:block;
width: auto;
text-decoration: none;

 }

  #header .myMenu li ul li a:hover
 {
background-color: #A4D6EE !important;
 }

任何帮助或建议将不胜感激。 谢谢

【问题讨论】:

  • 对每个菜单项使用越来越长的嵌套选择器将使其难以维护。如果您想在 3 个月内返回并更改菜单中第 5 个元素的颜色/图像怎么办。你如何找到它在 css 中的哪个选择器?您可以使用更精确的选择器,如下面的答案所述。
  • 但是第 n 个孩子在 IE 7、8 中不支持。否则尝试一下会很棒:类似 ul li:nth-child(n+1) { background-image: url ('/images/01.png'); }
  • 所以给每个元素添加一个单独的类或id。无论如何,这是一个更清洁、更易于维护的解决方案。例如。您无需查看 HTML 即可知道更改 CSS 会做什么。

标签: jquery asp.net css menu navigation


【解决方案1】:

jQuery 可能就是你要找的东西

Css 命令可以在这里找到。

css command

使用 nth-child 查找 ul 父级的某些子元素

nth-child info

【讨论】:

    【解决方案2】:

    您必须将样式定义为background: #4dafde none no-repeat scroll left middle,然后在每个style 属性中覆盖background-image &lt;li&gt;,或者您可能有点狡猾:使lis 具有固定宽度,然后将一张背景图片应用到整个.myMenu,其中在正确的位置有单独的图片(更大的文件,但通过适当的网络优化,差异应该可以忽略不计,甚至可以通过一个HTTP请求而不是几个的好处来抵消)。

    【讨论】:

      【解决方案3】:

      您要么必须:
      答:为每个 LI 添加一个唯一 ID,然后在您的 CSS 中为该 LI 添加一个背景图像
      B: 使用 CSS3 选择器 :nth-child 选择 LI,然后以这种方式应用背景图像。

      【讨论】:

      • css3 选择器与所有浏览器兼容,因为我使用 css3 是我以前在 IE 6,7 中未通过 ui 测试的网站
      • 但是第 n 个孩子在 IE 7、8 中不支持。否则尝试一下会很棒:类似 ul li:nth-child(n+1) { background-image: url ('/images/01.png'); }
      • css3 选择器不兼容所有浏览器 - 特别是 IE9 以下的浏览器。但是,您可以使用名为“Selectivizr”的 JavaScript 库添加对这些浏览器的支持:selectivizr.com
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      相关资源
      最近更新 更多