如何仅用HTML和CSS的Grid(fr)实现网格等份划分
CSS Grid fr单位疑问解答
核心认知澄清
你之前了解到的「CSS Grid体系默认共有12fr单位」是误解,12列栅格是Bootstrap等前端UI框架的通用设计规则,并非CSS Grid原生规范的限制。
fr是自由空间占比单位,总分配份数由你在grid-template-columns/grid-template-rows属性中定义的所有fr值相加的总和决定,没有固定的预设总份数。
关于“剩余2fr”的处理
你当前代码中grid-template-columns: repeat(5, 2fr)的总fr份数为5*2=10,Grid布局计算时,会先扣除Grid容器的固定宽度、列间隙等占用的空间,将剩下的可用自由空间平均分为10份,每列占2份,刚好占满所有可用空间,不存在所谓的“剩余2fr”,这也是你当前实现效果符合预期的原因。
总fr数凑满12的实现方式
如果需要让总占比份数刚好为12,可调整每列的fr值为12/5=2.4fr,修改后的样式如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> .grid { display: grid; grid-template-columns: repeat(5, 2.4fr); } </style> </head> <body> <footer class="grid"> <div>A</div> <div>B</div> <div>C</div> <div>D</div> <div>E</div> </footer> </body> </html>
该写法和你当前代码的视觉效果完全一致,仅调整了总占比份数为12,没有本质差异。
如果仅需要实现5个等宽列,更简洁的写法是grid-template-columns: repeat(5, 1fr),总份数为5,每列占1/5可用空间,效果和上述两种写法完全相同。
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

