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

问题描述 投票:1回答:1

除中文日历选项卡外,所有菜单中的项目均匀分布到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>

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

html css css3 flexbox
1个回答
1
投票

您只需将justify-content: space-evenly;更改为justify-content: left;以获得.item.has-children:hover .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样式使它们居中平坦的空间。

它与链接无关。

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

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

justify-content: space-evenly; before

justify-content: left; after

© www.soinside.com 2019 - 2024. All rights reserved.