我有一个导航栏,其中包含16个链接。
在桌面屏幕上,我希望有16个链接在一排。
当窗口变小,我希望16个链接分裂成两行都8个链接。
然后,当窗口宽度变得非常窄,我希望16个链接分成4x4网格。
我可以在CSS中做什么?目前我不得不硬编码父对象的宽度,这听起来很难在将来维护或更新。
div {padding:.5em;margin:1em;border: 1px solid #000}
div#test1 {width:550px}
nav a {width:60px; background:#ff0; text-align:center;padding:.5em}
nav {display:flex; gap:.5em; flex-wrap: wrap;justify-content:center}
div#test2 {width:500px}
div#test3 {width:400px}
div#test4 {width:680px}
<h3>This is NOT good:</h3>
<div id="test1">
<nav>
<a>br3f</a>
<a>dfee</a>
<a>xfef</a>
<a>33fv</a>
<a>vef3</a>
<a>f3rr</a>
<a>ber3</a>
<a>b4t3</a>
<a>nyjk</a>
<a>dsfj</a>
<a>rg4h</a>
<a>nlkg</a>
<a>gvre</a>
<a>berg</a>
<a>grgg</a>
<a>gr4g</a>
</nav>
</div>
<h3>This is NOT good:</h3>
<div id="test2">
<nav>
<a>br3f</a>
<a>dfee</a>
<a>xfef</a>
<a>33fv</a>
<a>vef3</a>
<a>f3rr</a>
<a>ber3</a>
<a>b4t3</a>
<a>nyjk</a>
<a>dsfj</a>
<a>rg4h</a>
<a>nlkg</a>
<a>gvre</a>
<a>berg</a>
<a>grgg</a>
<a>gr4g</a>
</nav>
</div>
<h3>This is good:</h3>
<div id="test3">
<nav>
<a>br3f</a>
<a>dfee</a>
<a>xfef</a>
<a>33fv</a>
<a>vef3</a>
<a>f3rr</a>
<a>ber3</a>
<a>b4t3</a>
<a>nyjk</a>
<a>dsfj</a>
<a>rg4h</a>
<a>nlkg</a>
<a>gvre</a>
<a>berg</a>
<a>grgg</a>
<a>gr4g</a>
</nav>
</div>
<h3>This is good:</h3>
<div id="test4">
<nav>
<a>br3f</a>
<a>dfee</a>
<a>xfef</a>
<a>33fv</a>
<a>vef3</a>
<a>f3rr</a>
<a>ber3</a>
<a>b4t3</a>
<a>nyjk</a>
<a>dsfj</a>
<a>rg4h</a>
<a>nlkg</a>
<a>gvre</a>
<a>berg</a>
<a>grgg</a>
<a>gr4g</a>
</nav>
</div>
3条答案
按热度按时间pbwdgjma1#
你说你希望它基于父宽度,所以媒体查询不会真正帮助你。你要么需要一个容器查询,要么使用下面的解决方案。
调整div大小以查看结果。我有一篇关于这个把戏的详细文章:https://css-tricks.com/responsive-layouts-fewer-media-queries/
vxf3dgd42#
使用
grid
布局。我已经为max-width:500px
和max-width:1200px
添加了媒体查询,你可以为你的屏幕断点使用任何像素值,如果你愿意,还可以添加更多的媒体查询。repeat(4, 1fr)
只是节省了写grid-template-rows: 1fr 1fr 1fr 1fr;
的时间,所以不要被这一点所迷惑。查看此链接以了解有关网格布局的一些基础知识:https://www.w3schools.com/css/css_grid.aspcpjpxq1n3#
您应该使用一个弹性框或网格来 Package 所有这些导航链接。然后在css中,你可以使用media queries来根据屏幕宽度改变布局。
我建议你学习这一点,因为它是一个非常强大的工具来制作响应式网站。