使用Display Flex构建导航栏时,右侧菜单元素无法横向对齐
问题:导航栏右侧元素重叠无法横向排列
我在练习复刻ARTE网站导航栏时遇到问题:已使用Display Flex布局,左侧导航元素可正常横向对齐,但右侧导航元素重叠无法在同一行排列。我学习CSS已有一个月,每天学习4小时,仍无法解决该问题,以下是我的代码:
CSS代码
* { list-style: none; background-color: black; font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; color: rgb(221, 213, 213); margin: 0; padding: 0; } .arte-logo { height: 45px; margin: 0; } nav { display: flex; justify-content: space-between; align-items: center; } .nav-left ul { display: flex; } .nav-right ul { display: flex; }
HTML代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Documentaires et reportages</title> <link rel="stylesheet" href="style.css" /> <link rel="icon" href="/Users/jeandizian/Documents/Code/space/Arte/Assets/imgs/arte-icon.png" /> </head> <body> <nav> <div class="nav-left"> <ul> <li> <img class="arte-logo" src="/Users/jeandizian/Documents/Code/space/Arte/Assets/imgs/arte-logo.png" alt="arte logo" ; /> </li> <li><span>☷</span></li> <li>Guide TV</li> <li>Direct</li> <li>Bientôt en ligne</li> <li>Arte Concert</li> </ul> </div> <div class="nav-right"> <ul> <li><span>☸</span></li> <li><span>⊕</span></li> <div class="connecter"> <li><span>⚉</span></li> <li>Se connecter</li> </div> <li>ARTE en 6 langues</li> </ul> </div> </nav> </body> </html>
解决方案
问题核心是HTML结构不符合规范:<ul>的直接子元素只能是<li>,但你在右侧<ul>中嵌套了<div class="connecter">,同时<li>内部又嵌套了<li>,这两种错误结构破坏了Flex布局的正常渲染,导致元素重叠。
修改后的HTML代码
调整结构,将connecter改为<li>,内部图标和文字用<span>包裹:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Documentaires et reportages</title> <link rel="stylesheet" href="style.css" /> <link rel="icon" href="/Users/jeandizian/Documents/Code/space/Arte/Assets/imgs/arte-icon.png" /> </head> <body> <nav> <div class="nav-left"> <ul> <li> <img class="arte-logo" src="/Users/jeandizian/Documents/Code/space/Arte/Assets/imgs/arte-logo.png" alt="arte logo" /> </li> <li><span>☷</span></li> <li>Guide TV</li> <li>Direct</li> <li>Bientôt en ligne</li> <li>Arte Concert</li> </ul> </div> <div class="nav-right"> <ul> <li><span>☸</span></li> <li><span>⊕</span></li> <li class="connecter"> <span>⚉</span> <span>Se connecter</span> </li> <li>ARTE en 6 langues</li> </ul> </div> </nav> </body> </html>
修改后的CSS代码
添加间距和对齐样式,确保元素不重叠:
* { list-style: none; background-color: black; font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", "Lucida Sans Unicode", Geneva, Verdana, sans-serif; color: rgb(221, 213, 213); margin: 0; padding: 0; } .arte-logo { height: 45px; margin: 0; } nav { display: flex; justify-content: space-between; align-items: center; padding: 0 1rem; /* 避免导航元素贴边 */ } .nav-left ul, .nav-right ul { display: flex; align-items: center; gap: 1.5rem; /* 列表项之间添加间距 */ } .nav-right .connecter { display: flex; align-items: center; gap: 0.5rem; /* 图标与文字之间添加间距 */ }
修改后右侧导航元素即可正常横向排列,不会出现重叠问题。
内容的提问来源于stack exchange,提问作者FarBeyond
相关产品推荐
相关产品推荐

