CSS下拉菜单,第一层倾斜

时间:2012-06-25 21:19:03

标签: html css css3

我正在尝试使用下拉选项创建菜单。诀窍是第一级选项是倾斜的,而子元素不应该是。我不能忽略父级中的hrefs链接,而不会破坏父列表标记。

<body>
      <ul id="nav">
        <li class="rhombus"><a class="rhlink"  href="#">1 HTML</a>
             <ul>
               <li><a href="#">3.2 Mootools</a></li>
               <li><a href="#">3.3 Prototype</a></li>
             </ul>
        </li>
        <li class="rhombus"><a class="rhlink" href="#">2 CSS</a></li>
        <li class="rhombus"><a class="rhlink" href="#">3 Javascript</a>
            <ul>
                <li><a href="#">3.1 jQuery</a>
                    <ul>
                        <li><a href="#">3.1.1 Download</a></li>
                        <li><a href="#">3.1.2 Tutorial</a></li>
                    </ul>
                </li>
                <li><a href="#">3.2 Mootools</a></li>
                <li><a href="#">3.3 Prototype</a></li>
            </ul>
        </li>
    </ul>
</body>

CSS:

#nav, #nav ul{
     margin:0;
     padding:0;
     list-style-type:none;
     list-style-position:outside;
     position:relative;
     line-height:1.5em;

 }

#nav a:link, #nav a:active, #nav a:visited{
    display:block;
    padding:0px 5px;
    border:1px solid #333;
    color:#fff;
    text-decoration:none;
    background-color:#00ff21;

 }

#nav a:hover{
    background-color:#fff;
    color:#333;
}

#nav li{
    float:left;
    position:relative;

}

li.rhombus{
    float:left;
    position: relative;
    transform: skew(35deg);
    -webkit-transform: skew(35deg);
    -moz-transform: skew(35deg);
    -ms-transform: skew(35deg);
    -o-transform: skew(35deg);
}

#nav ul {
    position:absolute;
    width:12em;
    top:1.5em;
    display:none;
    transform: skew(-35deg);
    -webkit-transform: skew(-35deg);
    -moz-transform: skew(-35deg);
    -ms-transform: skew(-35deg);
    -o-transform: skew(-35deg);
}
#nav li ul a{
    width:12em;
    float:left;


}

#nav ul ul{
    top:auto;
    }

#nav li ul ul {
    left:12em;
    margin:0px 0 0 10px;
    transform: skew(-0deg);
    -webkit-transform: skew(-0deg);
    -moz-transform: skew(-0deg);
    -ms-transform: skew(-0deg);
    -o-transform: skew(-0deg);

    }

#nav li:hover ul ul, #nav li:hover ul ul ul, #nav li:hover ul ul ul ul{
    display:none;
    }
#nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li li li li:hover ul{
    display:block;
    }

1 个答案:

答案 0 :(得分:1)

只需添加新的<span>元素并指定transform-originexample)。

新HTML

在每个<span>锚点的文本周围添加.rhlink

<ul id="nav">
    <li class="rhombus"><a class="rhlink"  href="#"><span>1 HTML</span></a>
         <ul>
           <li><a href="#">3.2 Mootools</a></li>
           <li><a href="#">3.3 Prototype</a></li>
         </ul>
    </li>
    <li class="rhombus"><a class="rhlink" href="#"><span>2 CSS</span></a></li>
    <li class="rhombus"><a class="rhlink" href="#"><span>3 Javascript</span></a>
        <ul>
            <li><a href="#">3.1 jQuery</a>
                <ul>
                    <li><a href="#">3.1.1 Download</a></li>
                    <li><a href="#">3.1.2 Tutorial</a></li>
                </ul>
            </li>
            <li><a href="#">3.2 Mootools</a></li>
            <li><a href="#">3.3 Prototype</a></li>
        </ul>
    </li>
</ul>

新CSS

基本上,您只需skew()新添加的<span>并指定transform-origin即可使子菜单排成一行。否定skew()无法在锚本身上使用,因为锚包含可见内容(borderbackground),因此看起来没有应用任何偏差。通过添加子<span>,您可以保持background / border:hover效果。

#nav,
#nav ul {
     margin:0;
     padding:0;
     list-style-type:none;
     list-style-position:outside;
     position:relative;
     line-height:1.5em;
}

#nav a:link,
#nav a:active,
#nav a:visited {
    display:block;
    padding:0px 5px;
    border:1px solid #333;
    color:#fff;
    text-decoration:none;
    background-color:#00ff21;
}

#nav a:hover {
    background-color:#fff;
    color:#333;
}

#nav > li {
    float:left;
    position:relative;
}

li.rhombus {
    float:left;
    position: relative;
    -webkit-transform-origin:0 0;
    -moz-transform-origin:0 0;
    -ms-transform-origin:0 0;
    -o-transform-origin:0 0;
    transform-origin:0 0;
    -webkit-transform:skew(35deg);
    -moz-transform:skew(35deg);
    -ms-transform:skew(35deg);
    -o-transform:skew(35deg);
    transform:skew(35deg);
}

li.rhombus > a span {
    -webkit-transform:skew(-35deg);
    -moz-transform:skew(-35deg);
    -ms-transform:skew(-35deg);
    -o-transform:skew(-35deg);
    transform:skew(-35deg);
    display:block;
}

li.rhombus > ul {
    -webkit-transform-origin:0 0;
    -moz-transform-origin:0 0;
    -ms-transform-origin:0 0;
    -o-transform-origin:0 0;
    transform-origin:0 0;
    -webkit-transform:skew(-35deg);
    -moz-transform:translate(0,1px) skew(-35deg);
    -ms-transform:skew(-35deg);
    -o-transform:skew(-35deg);
    transform:skew(-35deg);
}

#nav ul {
    position:absolute;
    top:1.5em;
    left:0;
    width:12em;
    display:none;
}

#nav li ul a {
    width:12em;
    float:left;
}

#nav ul ul {
    top:auto;
}

#nav li ul ul {
    left:12em;
    margin:0px 0 0 10px;
}

#nav li:hover ul ul,
#nav li:hover ul ul ul,
#nav li:hover ul ul ul ul {
    display:none;
}

#nav li:hover ul,
#nav li li:hover ul,
#nav li li li:hover ul,
#nav li li li li:hover ul {
    display:block;
}