Sass可通过变量与calc()实现响应式图片网格,避免手算错误:定义列数、间隙等变量,用公式计算单列净宽并动态生成媒体查询;配合floor()处理像素舍入、aspect-ratio条件编译及inline-block优化兼容性。
纯数学逻辑布局(比如 calc() + % + float 或 inline-block)在老项目里仍常见。Sass能帮你把列数、间隙、容器宽度这些变量串起来算出每个项的宽度,避免手算出错。
width自动重算;间隙变12px还是1.5rem,只改一个变量width: calc(33.333% - 12px)——浏览器对calc()里混合单位支持不稳定,尤其在float布局中容易折行错位100% - (gap * (cols - 1))) / cols,再给margin-right设固定间隙(最后一列清掉)$gap: 16px;<br>$cols: 3;<br>.grid-item {<br> width: calc((100% - #{$gap * ($cols - 1)}) / #{$cols});<br> margin-right: $gap;<br> &:nth-child(#{$cols}) { margin-right: 0; }<br>}
别用@media嵌套一层套一层写三遍width。用@each配合映射表,让断点、列数、间隙一起驱动计算。
$breakpoints: (sm: 576px, md: 768px, lg: 992px)和$columns: (sm: 1, md: 2, lg: 4),然后@each $key, $bp in $breakpoints生成媒体查询calc()里的$gap如果用了rem或em,在媒体查询里不能直接插值——Sass会报"Invalid CSS after...",必须用#{unitless($gap)}或统一用px
$cols: 1,再在@media (min-width: ...)里覆盖,比从大屏往下写更稳网格只是容器,图片失真往往是因为没控制好object-fit或height策略。Sass能帮你批量加aspect-ratio或兜底padding-top技巧。
aspect-ratio: 4/3,但IE和旧版Safari不支持——Sass可条件编译:@if $supports-aspect-ratio { aspect-ratio: 4/3; } @else { padding-top: percentage(3/4); }
img设height: 100%再object-fit: cover就完事:父容器若没明确height,100%会失效;得配合position: relative + padding-top占位min-height下限,防网格被压塌:min-height: #{160px + $gap * 2}
float布局时Sass生成的width总差1像素?不是Sass算错,是浏览器渲染时对小数像素的舍入策略不同。尤其当100% / 3 = 33.333333%,加上gap后总宽可能超100%,触发换行。
立即学习“前端免费学习笔记(深入)”;
round(33.333333%)会更糟;而是用floor()强制向下取整:width: floor((100% - $gap * 2) / 3)
display: inline-block + font-size: 0清空间隙,此时width容错率更高transform: translateZ(0)强制GPU加速,或直接切到grid(Sass可生成两套规则,用@supports (display: grid)分发)数学逻辑布局的麻烦不在写,而在验证——不同设备、缩放比、字体设置下,小数像素和舍入行为全都不一样。别信“本地看着对就行”。