代码之家  ›  专栏  ›  技术社区  ›  Jason Goemaat

下拉菜单CSS padding on<li>扩展到容器

  •  0
  • Jason Goemaat  · 技术社区  · 14 年前

    我有一个仅限CSS的下拉菜单,它的工作方式与我希望的一样,只是我必须用一个<div>包围每个元素的文本;。问题是,我应用于<li>元素的填充会导致元素超出列表的正常边界( pic ). 有没有什么方法可以不用div来实现这个功能呢?

    <html>
    <head>
        <title>CSS Menu Test</title>
    <style>
    div.menu { width: 1200px; background-color: #f8f8f8 }
    div.menu a { text-decoration: none; color: Black; padding: 0; margin: 0 }
    div.menu li { cursor: pointer; display:block; position: relative }
    div.menu ul:first-child li { float: left; margin-right: 10px }
    div.menu ul { list-style: none; margin: 0; padding: 0; float: left; background-color: #f4f4f4 ; display: block}
    div.menu ul.childmenu { border: solid 1px black }
    div.menu ul.childmenu li { width: 100% }
    div.menu ul ul { display: none }
    div.menu ul li:hover > div > ul { display: block; position: absolute; left: 0% }
    div.menu ul li:hover > ul { display: block; position: absolute; left: 0% }
    div.menu ul.childmenu li:hover > ul { display: block; position: absolute; left: 100%; top: 0% }
    div.menu li:hover {  background-color: #88bbdd }
    
    div.menu div { padding: 12px; }
    /* would like to replace div.menu div with this:
    div.menu li { padding: 12px; }
    */
    </style>
    </head>
    <body>
    <div class="menu">
        <ul>
            <li class="selected"><div>Services</div>
                <ul class="childmenu">
                    <li>
                        <div>Ally</div>
                    </li>
                    <li>
                        <div>Business</div>
                        <ul class="childmenu">
                            <li><div>Accounting</div></li>
                            <li><div>Administrative</div></li>
                            <li>
                                <div>Legal</div>
                                <ul class="childmenu">
                                    <li><div>Incorporation</div></li>
                                    <li><div>Takeovers</div></li>
                                    <li><div>Workers&nbsp;Comp</div></li>
                                </ul>
    
                            </li>
                            <li><div>Communication</div></li>
                        </ul>
                    </li>
                    <li><div>Personal</div></li>
                </ul>
            </li>
            <li><div>Company</div><ul class="childmenu">
                <li><div>Contact</div></li>
                <li><div>Employment</div></li>
            </ul>
            </li>
        </ul>
        <br style="clear: both" />
    </div>
    <h1>Content</h1>
    </body>
    

    编辑 css box size属性可用于告诉浏览器100%包括填充和边框。默认的内容框意味着100%只引用内容,填充和边框会使其更大( plunker ):

    div.menu li { box-sizing: border-box; }
    
    2 回复  |  直到 11 年前
        1
  •  1
  •   jonesbp    14 年前

    这两条线的组合:

    div.menu ul.childmenu li { width: 100% }
    div.menu li { padding: 12px; }
    

    引起你的问题。在ul.childmenu的li's in div.menu中,所有li's in div.menu的填充将添加到100%宽度之外。将ul.childmenu容器的CSS规则更改为:

    div.menu ul.childmenu { border: solid 1px black; padding-right: 24px; }
    

    将通过加倍子li上的填充(包括左填充和右填充)在右侧填充容器,并为您提供一个显示与子li相同宽度的容器。

        2
  •  0
  •   aendra    14 年前

    您可能需要对CSS层次结构更加具体;请尝试:

    div.menu ul li { padding: 12px; }
    

    -.