导航栏Dropdown菜单无背景致内容穿透,如何添加背景框?
解决下拉菜单背景穿透问题
你的问题出在下拉菜单容器高度塌陷:.row里的.column用了float脱离文档流,导致.dropdown-content无法被内容撑开,设置的背景只覆盖了header区域,下方内容自然就穿透显示了。
下面给你两个简单有效的修复方案:
方案1:用Flex布局替代Float(推荐)
Flex布局不用处理浮动清除,容器会自动被内容撑开,同时完美保留三列等分的布局效果:
修改CSS中.row和.column的样式:
/* 替换原row的浮动布局 */ .row { display: flex; } /* 替换原column的浮动样式 */ .column { flex: 1; /* 三列自动等分宽度 */ padding: 10px; background-color: #B598F9; /* 去掉固定height,让内容决定高度 */ } /* 响应式布局调整 */ @media screen and (max-width: 600px) { .row { flex-direction: column; /* 小屏幕下垂直堆叠 */ } }
同时可以删掉原有的.row:after清除浮动代码,Flex布局不需要这个。
方案2:修复Float导致的高度塌陷
如果不想改动布局逻辑,给.dropdown-content添加清除浮动的伪元素,强制容器被内容撑开:
.dropdown-content:after { content: ""; display: table; clear: both; }
另外建议给.dropdown-content加一点底部内边距,让内容和容器边缘有间距,视觉更舒适:
.dropdown-content { /* 保留原有样式 */ padding-bottom: 10px; /* 添加底部内边距 */ }
修改后的完整代码
CSS部分
* { box-sizing: border-box; } body { margin: 0; } .navbar { overflow: hidden; background-color: #333; font-family: Aclonica, Arial, Helvetica, sans-serif; } .navbar a { float: left; font-size: 30px; color: white; text-align: center; padding: 16px 16px; text-decoration: none; } .dropdown { float: left; overflow: hidden; } .dropdown .dropbtn { font-size: 30px; border: none; outline: none; color: white; padding: 15px; background-color: inherit; font: inherit; margin: 0; } .navbar a:hover, .dropdown:hover .dropbtn { background-color: #B598F9; } .dropdown-content { display: none; position: absolute; background-color: #B598F9; width: 100%; left: 0; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1; padding-bottom: 10px; /* 添加底部内边距 */ } .dropdown-content .header { background: #B598F9; padding: 5px; color: white; } .dropdown:hover .dropdown-content { display: block; } /* 改用flex布局 */ .row { display: flex; } .column { flex: 1; padding: 10px; background-color: #B598F9; } .column a { float: none; color: black; padding: 16px; text-decoration: none; display: block; text-align: left; } .column a:hover { background-color: #d4bfff; /* hover时换浅色调,和背景区分开 */ } /* 响应式布局 */ @media screen and (max-width: 600px) { .row { flex-direction: column; } } .center { margin:auto; width: 50%; }
HTML部分(无需修改)
<div class="navbar"> <a href="#home"> <img src="images/lotus_painting.png" type="images/lotus_painting.png" rel="icon" height="75px" width="75px"></a> <a href="#">Artists <br>Hour</a> <!--This is the page list of artists--> <div class="dropdown"> <button class="dropbtn" style="font-size:30px">School <br>of Art <i class="fa fa-caret-down"></i> </button> <div class="dropdown-content"> <div class="header"> <h1>Where Would You Like To Go?</h1> </div> <div class="row"> <div class="column"> <h1>Art Study</h1> <a href="#">Fundamentals</a> <a href="#">Tutorials</a> </div> <div class="column"> <h1>How To...</h1> <a href="#">Upgrade Your <br>Art Business</a> <a href="#">Have A Good <br>Portfolio</a> <a href="#">Achieve <br>Multi-Stream<br> Income</a> </div> <div class="column"> <h1>Business</h1> <a href="#">Tax Facts</a> <a href="#">Terms of Service<br> Checklist</a> <a href="#">How To Be<br> Prepared To <br> Talk To A <br>Lawyer</a> </div> </div> </div> </div> </div>
额外优化了.column a:hover的背景色,让用户能看到明确的hover反馈(原代码hover背景和容器一致,无法区分)。
内容的提问来源于stack exchange,提问作者Sage
相关产品推荐
相关产品推荐

