【问题标题】:How to prevent overlapping dropdown menu with borders?如何防止与边框重叠的下拉菜单?
【发布时间】:2016-01-12 16:22:59
【问题描述】:

我有一个悬停下拉菜单,在悬停边框后,我的下拉菜单与菜单重叠。试图添加填充,但它更糟。如何调整下拉菜单的位置,知道我在不悬停时有一个 5px 边框透明,悬停时在底部变成一个 5px 实心边框?

#nav {
    background-color: #e26a63;
}
#wrap {
    padding-left: 60px;
    height: 100px;
    width: 100%;
    margin: 0 auto;
    display: table-cell; 
    vertical-align: bottom;
}
#nav ul {
    list-style-type: none;
    padding: 0;
    margin: 0;
    position: relative;
    min-width: 200px; 
}
#nav ul li {
    display: inline-block;
    border: 5px solid transparent;
}
#nav ul li:hover {
    background-color: #cb5f59;
    border-bottom: 5px solid #9e4a45;
}
#nav ul li a, visited {
    color: white;
    display: block;
    padding: 15px;
    text-decoration: none;
}
#nav ul li:hover ul {
    display: block;
}
#nav ul ul {
    display: none;
    position: absolute;
    background-color: #e26a63;
    border-top: 0;
    margin-left: -5px;
}
#nav ul ul li {
    display: block;
}
#nav ul ul li a:hover {
    color: white;
}
<div id="nav">
	<div id="wrap">
    	<ul>
        <li><a href="#">Home</a></li><li>
        <a href="#">Study</a></li><li>
        <a href="#">Games</a>
        	<ul>
            	<li><a href="#">Riddles</a></li><li> 
                <a href="#">Flip card game</a></li><li>  
                <a href="#">Spot the mistake</a></li><li> 
                <a href="#">Multiple choice</a></li>            	
            </ul>
          </li><li>
        <a href="#">Read</a></li><li>
        <a href="#">Contact</a></li><li>
        <a href="#">About Us</a></li>
        </ul>
    </div>
</div>

【问题讨论】:

    标签: html css drop-down-menu


    【解决方案1】:

    简短的答案是将margin-top: 5px; 添加到#nav ul ul,其中5px 与底部边框宽度的值相同。

    请注意,以下样式集在悬停时输出梯形形状1 底部边框。

    #nav ul li { border: 5px solid transparent; }
    #nav ul li:hover { border-bottom: 5px solid #9e4a45; }
    

    将第一行中的border 更改为border-bottom,它将输出一个真正的矩形形状。

    我还重新组织了 CSS 表格布局,使表格自动居中(我猜你想要这样,但如果不这样做很容易更改)。并删除了下拉项中的边框样式。

    Jsfiddle Example

    #nav {
        background-color: #e26a63;
    }
    #wrap {
        display: table;
        height: 100px;
        margin: 0 auto;
    }
    #nav ul {
        padding: 0;
        margin: 0;
        display: table-cell; 
        vertical-align: bottom;
    }
    #nav ul li {
        display: inline-block;
        border-bottom: 5px solid transparent;
    }
    #nav ul li a {
        display: block;
        padding: 15px;
        text-decoration: none;
        color: white;
    }
    #nav ul ul {
        display: none;
        position: absolute;
        background-color: #e26a63;
        margin-top: 5px;
    }
    #nav ul ul li {
        display: block;
        min-width: 200px;
    }
    
    /* hover */
    #nav ul li:hover {
        background-color: #cb5f59;
        border-bottom-color: #9e4a45;
    }
    #nav ul li:hover ul {
        display: block;
    }
    #nav ul li:hover li {
      border-bottom-width: 0;
    }
    <div id="nav">
    	<div id="wrap">
        	<ul>
            <li><a href="#">Home</a></li><li>
            <a href="#">Study</a></li><li>
            <a href="#">Games</a>
            	<ul>
                	<li><a href="#">Riddles</a></li><li> 
                    <a href="#">Flip card game</a></li><li>  
                    <a href="#">Spot the mistake</a></li><li> 
                    <a href="#">Multiple choice</a></li>            	
                </ul>
              </li><li>
            <a href="#">Read</a></li><li>
            <a href="#">Contact</a></li><li>
            <a href="#">About Us</a></li>
            </ul>
        </div>
    </div>

    此外,还可以使用:after + background 来获得相同的下边框样式。

    Jsfiddle Example

    #nav {
        background-color: #e26a63;
    }
    #wrap {
        display: table;
        height: 100px;
        margin: 0 auto;
    }
    #nav ul {
        padding: 0;
        margin: 0;
        display: table-cell; 
        vertical-align: bottom;
    }
    #nav ul li {
        display: inline-block;
    }
    #nav ul li a {
        display: block;
        padding: 15px;
        text-decoration: none;
        color: white;
    }
    #nav ul li:after {
        content: "";
        display: block;
        height: 5px;
    }
    #nav ul ul {
        display: none;
        position: absolute;
        background-color: #e26a63;
        margin-top: 5px;
    }
    #nav ul ul li {
        display: block;
        min-width: 200px;
    }
    
    /* hover */
    #nav ul li:hover {
        background-color: #cb5f59;
    }
    #nav ul li:hover:after {
        background: #9e4a45;
    }
    #nav ul li:hover ul {
        display: block;
    }
    #nav ul ul li:after {
        height: 0;
    }
    <div id="nav">
    	<div id="wrap">
        	<ul>
            <li><a href="#">Home</a></li><li>
            <a href="#">Study</a></li><li>
            <a href="#">Games</a>
            	<ul>
                	<li><a href="#">Riddles</a></li><li> 
                    <a href="#">Flip card game</a></li><li>  
                    <a href="#">Spot the mistake</a></li><li> 
                    <a href="#">Multiple choice</a></li>            	
                </ul>
              </li><li>
            <a href="#">Read</a></li><li>
            <a href="#">Contact</a></li><li>
            <a href="#">About Us</a></li>
            </ul>
        </div>
    </div>

    1CSS 的形状 - https://css-tricks.com/examples/ShapesOfCSS/

    【讨论】:

      【解决方案2】:

      因为您已将下拉菜单集成到标题中,所以如果您只是使其可见,它可能会调整标题的大小。

      一个简单的解决方案是添加如下内容:

      ul li ul{
          position: absolute;
          top: 58px;
      }
      

      通过使这个元素成为绝对元素,我们将其从标头代码中“分解”出来。

      注意:这可能不是完美的代码,但它可能会给你一个方向。

      【讨论】:

        【解决方案3】:

        你的 ul 是绝对定位的,所以它隐含在顶部:0px,

        只需将此设置为 5px 以补偿边框大小

        #nav ul ul {
            top: 5px;   /* added */
        }
        
        #nav {
            background-color: #e26a63;
        }
        #wrap {
            padding-left: 60px;
            height: 100px;
            width: 100%;
            margin: 0 auto;
            display: table-cell; 
            vertical-align: bottom;
        }
        #nav ul {
            list-style-type: none;
            padding: 0;
            margin: 0;
            position: relative;
            min-width: 200px; 
        }
        #nav ul li {
            display: inline-block;
            border: 5px solid transparent;
        }
        #nav ul li:hover {
            background-color: #cb5f59;
            border-bottom: 5px solid #9e4a45;
        }
        #nav ul li a, visited {
            color: white;
            display: block;
            padding: 15px;
            text-decoration: none;
        }
        #nav ul li:hover ul {
            display: block;
        }
        #nav ul ul {
            display: none;
            position: absolute;
            background-color: #e26a63;
            border-top: 0;
            margin-left: -5px;
        }
        #nav ul ul li {
            display: block;
        }
        #nav ul ul li a:hover {
            color: white;
        }
        <div id="nav">
        	<div id="wrap">
            	<ul>
                <li><a href="#">Home</a></li><li>
                <a href="#">Study</a></li><li>
                <a href="#">Games</a>
                	<ul>
                    	<li><a href="#">Riddles</a></li><li> 
                        <a href="#">Flip card game</a></li><li>  
                        <a href="#">Spot the mistake</a></li><li> 
                        <a href="#">Multiple choice</a></li>            	
                    </ul>
                  </li><li>
                <a href="#">Read</a></li><li>
                <a href="#">Contact</a></li><li>
                <a href="#">About Us</a></li>
                </ul>
            </div>
        </div>

        【讨论】:

          【解决方案4】:

          您可以将边框更改为 box-shadow 并且盒子阴影不会从盒子模型中占据

          #nav ul li:hover {
              background-color: #cb5f59;
              box-shadow: 0 -2.2px 0 #9e4a45 inset,0 0 0 #9e4a45;
          } 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-04-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-05
            相关资源
            最近更新 更多