gpt4 book ai didi

html - 使用 CSS 网格创建导航栏

转载 作者:行者123 更新时间:2023-12-03 16:46:29 25 4
gpt4 key购买 nike

我正在创建一个用 CSS 网格制作的导航栏。
我决定用网格制作它,这样我就可以 重新安排部分(元素)不修改 html(只需修改 CSS)。
然后我创建了 3 个区域的网格: Logo 、菜单、切换器。
而且我添加了一些间隙,因此每个元素都不会粘在一起。
enter image description here
到目前为止一切顺利,直到我尝试删除一个/一些部分,差距还在即使该部分已经消失。
然后我尝试消除间隙并用每个部分的边距替换。
但边距不会在网格的开始/结束处折叠。它的行为与常规 block 元素不同。
我知道使用 flexbox 而不是网格更实用,但我更喜欢网格,因为该部分可以在不修改 html 的情况下重新排列。可以将 Logo 移动到顶部或其他位置。 flex是不可能的。
任何人都可以解决我的网格间隙问题吗?或者,也许您有不同的方法来创建导航栏?
见我的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>

最佳答案

在这种情况下,您可以依赖隐式列。您只定义一个显式列,并且仅当元素存在时才创建新列。您也可以轻松交换有问题的职位

.navbar {
background: pink;
display: grid;
grid-template-rows: auto;
grid-template-columns: 1fr; /* only column intially */
grid-auto-flow:dense;
justify-items: stretch;
align-items: stretch;
column-gap: 20px;
}

.logo {
background: green;
width: 60px;
grid-column:-3; /* create an implicit one at the beginning */
}

.menus {
background: lightsalmon;
display: flex;
flex-direction: row;
justify-content: start;
grid-column: 1; /* take the explicit one */
}

.menus * {
padding: 5px;
}

.toggler {
background: lightskyblue;
grid-column:2; /* create an implicit one at the end */
}
<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>

<hr>
<p>navbar without toggler and log at the end </p>
<nav class="navbar">
<div class="logo" style="grid-column:2">
LoGo
</div>
<div class="menus">
<div>menu-1</div>
<div>menu-2</div>
<div>menu-3</div>
</div>
</nav>

<hr>

<p>navbar without logo and toogler at the beginning </p>
<nav class="navbar">
<div class="menus">
<div>menu-1</div>
<div>menu-2</div>
<div>menu-3</div>
</div>
<div class="toggler" style="grid-column:-3">
X
</div>
</nav>

关于html - 使用 CSS 网格创建导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67154896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com