我正在使用CSS网格创建导航栏。
我决定使用网格来重新排列部分(项目),而无需修改HTML(只需修改CSS)。
然后,我创建了一个带有3个区域的网格:logo、菜单和切换器。
我添加了一些间隔,以防止每个项目粘在一起。 到目前为止一切都很好,直到我尝试删除一个/一些部分,即使该部分已经消失,间隙仍然存在。
然后我尝试删除间隙并将其替换为每个部分的边距。但是该边距不会在网格的开头/结尾处折叠。它的行为与常规块元素不同。
我知道使用flexbox比使用grid更实用,但我更喜欢grid,因为可以重新排列部分而无需修改html。可以将徽标移动到顶部或其他位置。这是使用flex无法实现的。
有人能解决我的grid-gap问题吗?或者您对创建导航栏有不同的方法吗?
请查看我的sandbox:
我决定使用网格来重新排列部分(项目),而无需修改HTML(只需修改CSS)。
然后,我创建了一个带有3个区域的网格:logo、菜单和切换器。
我添加了一些间隔,以防止每个项目粘在一起。 到目前为止一切都很好,直到我尝试删除一个/一些部分,即使该部分已经消失,间隙仍然存在。
然后我尝试删除间隙并将其替换为每个部分的边距。但是该边距不会在网格的开头/结尾处折叠。它的行为与常规块元素不同。
我知道使用flexbox比使用grid更实用,但我更喜欢grid,因为可以重新排列部分而无需修改html。可以将徽标移动到顶部或其他位置。这是使用flex无法实现的。
有人能解决我的grid-gap问题吗?或者您对创建导航栏有不同的方法吗?
请查看我的sandbox:
.navbar {
background: pink;
display: grid;
grid-template-rows: auto;
grid-template-columns: max-content auto max-content;
grid-template-areas: "logo menus toggler";
justify-items: stretch;
align-items: stretch;
column-gap: 20px;
}
.logo {
background: green;
grid-area: logo;
width: 60px;
}
.menus {
background: lightsalmon;
grid-area: menus;
display: flex;
flex-direction: row;
justify-content: start;
}
.menus * {
padding: 5px;
}
.toggler {
background: lightskyblue;
grid-area: toggler;
}
<p>navbar with complete sections:</p>
<nav class="navbar">
<div class="logo">
LoGo
</div>
<div class="menus">
<div>menu-1</div>
<div>menu-2</div>
<div>menu-3</div>
</div>
<div class="toggler">
X
</div>
</nav>
<hr>
<p>navbar without logo:</p>
<nav class="navbar">
<div class="menus">
<div>menu-1</div>
<div>menu-2</div>
<div>menu-3</div>
</div>
<div class="toggler">
X
</div>
</nav>
<hr>
<p>navbar without toggler:</p>
<nav class="navbar">
<div class="logo">
LoGo
</div>
<div class="menus">
<div>menu-1</div>
<div>menu-2</div>
<div>menu-3</div>
</div>
</nav>