html - 对齐不适用于所有子菜单项

标签 html css flexbox

除中文日历选项卡外,所有菜单中的元素都均匀分布在 flex 容器中,我不明白为什么。 它们对齐得很好,但是当我添加到子菜单项的链接时,它随机散开。我几乎可以肯定我必须在 {} 中添加一些东西来纠正这个问题,但我已经尝试了以下方法,但没有修复:

  • 尝试删除链接。没有修复。
  • 尝试将子菜单中的代码复制到 CSS 中的 {} 中,使问题恶化。 enter image description here
* {
    font-family: arial, sans-serif; 
    box-sizing: border-box;}

html, body {
    margin: 0;
    padding: 0;
}

a {
    text-decoration: none;
    color: black;
}

.nav {
    position:fixed; 
    top:0; 
    left:0;
    background-color: rgba(255,255,255,.8);
    border-radius: 0px;
    border: none;
    width: 100%;
    margin: 0;
    padding: 25px 0;
    flex-direction: row;
    display: flex;
    align-items: center;
    justify-content: space-evenly;
}

.item {
    color: black;
    font-weight: bold;
    text-transform: uppercase;
}

.submenu {
    display: none;
    flex-wrap: wrap;
    align-items: center;
    align-text: center;
    position: absolute;
    padding-top: 107px;
    padding: 10px;
    left: 0;
    right: 0;
    text-transform: uppercase;
    z-index: 1;
    background-color: #2F4F4F;
    color: white;
    justify-content: space-evenly;
}

.submenu li {
    margin-left: 6%;
    width: 19%;
    padding: 5px;

}

.item.has-children:hover .submenu {
    display: flex;
    align-items: center;
    flex-direction: row;
    justify-content: space-evenly;
    flex-wrap: wrap;
    flex: 1 1 calc(25% - 80px);
    color: black;
    background-color: rgba(255,255,255,.8);
}

ul {
    list-style: none;
    padding: 0;
}
<nav>
    <ul class="nav">
        <li class="item">
            <a href="../index.html">
                <img src="../Images/Navigation/Intak Logo 25px High.png" alt="Home" />
            </a>
        </li>
        <li class="item has-children" style="color:#4D4D4D;">Printing
            <ul class="submenu">
                <li>Labels & Stickers</li>
                <li>Banners</li>
                <li>A-Frame</li>
                <li>Menu Boards</li>
                <li>Takeout Menus</li>
                <li>Business Cards</li>
                <li>Dine-In Menus</li>
                <li>Posters</li>
                <li>Envelopes</li>
                <li>Chinese Wedding Cards</li>
                <li>Flyers</li>
                <li>Letterheads</li>
                <li>Brochures</li>
                <li>Vinyl</li>
                <li>NCR Forms</li>
                <li>Catalogues</li>
            </ul>
        </li>
        <li class="item has-children">Graphic Design
            <ul class="submenu">
                <li>Logo Design</li>
                <li>Ads/Flyers/Promotions</li>
                <li style="text-align: center;">Menu Boards<br>
                    (Digital & Boards)</li>
                <li style="text-align: center;">Restaurant Menus<br>
                    (Takeout & Dine-In)</li>
            </ul>
        </li>
        <li class="item has-children">Chinese Calendars
            <ul class="submenu">
                <li><a href="Calendars/Cane Wallscroll Calendars.html">Cane Wallscroll Calendars</a></li>
                <li><a href="Calendars/Wall Calendars.html">Wall Calendars</a></li>
                <li><a href="Calendars/Mini Calendars.html">Mini Calendars</a></li>
                <li><a href="Calendars/Desk Calendars.html">Desk Calendars</a></li>
                <li><a href="Calendars/Special Desk Calendars.html">Special Desk Calendars</a></li>
                <li><a href="Calendars/Red Packet.html">Packet Calendars</a></li>
                <li><a href="Calendars/More.html">More Calendars</a></li>
            </ul>
        </li>
        <li class="item">FAQS</li>
        <li class="item">Contact Us</li>
    </ul>
</nav>

预期的结果是所有导航子菜单项要对齐

最佳答案

对于 .item.has-children:hover,您只需将 justify-content: space-evenly; 更改为 justify-content: left; .submenu 样式。

子菜单样式应该是这样的:

.item.has-children:hover .submenu {
    display: flex;
    align-items: center;
    flex-direction: row;
    justify-content: left;
    flex-wrap: wrap;
    flex: 1 1 calc(25% - 80px);
    color: black;
    background-color: rgba(255,255,255,.8);
}

至于中国日历的子菜单,只有 7 个元素,这导致它在第一行有 4 个,在第二行有 3 个,因此导致它们看起来没有对齐,因为 space -evenly 样式使它们以均匀的空间居中。

它与链接无关。

通过将它们设置为左侧,可以防止左侧的空白区域弄乱第二行的位置。

之前和之后(红色边框可视化框)

justify-content: space-evenly; before

justify-content: left; after

关于html - 对齐不适用于所有子菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55614115/

相关文章:

html - 无法为网页上的元素添加边框

mouseover() 和 slideDown 需要 jQuery 帮助

javascript - 如何在 <img> 元素中访问 SVG 文件的内容?

html - <button> 的动画悬停状态无法按预期工作

javascript - Rails 页面特定的 css 和 javascript

html - 将四个元素相邻放置在 div 内,宽度不同

html - 对齐 self 拉伸(stretch)不起作用?

html - 为带有背景的文本元素设置样式

javascript - 将 html 文件转换为 vue.js

css - 使用 flexbox 实现这种布局的最佳方式是什么?