手写一遍bootstrap栅格系统

458 阅读1分钟

最终效果

Jietu20201104-172518-HD.gif

概述

响应式设计的三要素:弹性栅格布局、媒体查询、响应式图片。

这是我写过的第三版浮动栅格布局了。 故事要从MDN的文章传统布局方法说起,里面介绍了960px、12栅格的布局方式,然后用百分比改进成弹性布局。skeleton是一个单纯的浮动栅格,它的间隔是用百分比margin,导致宽度计算起来更复杂了,而且扩展性不强。今天把bootstrap的栅格部分拿出来写了一遍,用两个字来形容:优雅!

要点分析

  • border-box盒模型 百分比计算基于父元素content宽度计算。使用padding来间隔,子元素width包含padding,所以列宽100%/12,计算简单。而且行间距改变不会影响宽度计算,可拓展性强。
  • 负margin 行row使用负margin抵消container的padding(表现为padding重叠)
  • 媒体查询 bootstrap使用了4个断点:xs,sm,md,lg。所以我们可以很轻松地基于尺寸调整布局
  • offset 使用margin-left实现
  • pull,push col列相对定位,push百分比left,pull百分比right。用来改变顺序,类似flex里的order
  • 做demo时发现,bootstrap是用vertical-align: middle清除图片的幽灵空白
  • 问题 高度不一致时导致元素卡在中间。 等高不好处理(背景等高可以用-margin+padding实现-css世界)

代码实现

codepen