
不止于JS导入用responsive-loader查询参数打造CSS响应式背景图【免费下载链接】responsive-loaderA webpack loader for responsive images项目地址: https://gitcode.com/gh_mirrors/re/responsive-loaderresponsive-loader 是一个强大的 webpack 响应式图片加载器webpack loader它可以从一张源图片自动生成多种尺寸并返回srcset。更妙的是它的核心能力藏在查询参数query parameters里无论是 JS 导入还是CSS 响应式背景图你只需在图片路径后面加一个?size480这样的小尾巴构建时就会自动裁剪出对应宽度的图片文件让背景图也能做到小屏小图、大屏大图。一分钟认识 responsive-loader一句话概括喂给它一张图它还你一排图。支持sharp推荐速度快支持 webp/avif和jimp纯 JS 实现随处可跑两种图像处理适配器输出带哈希的文件名默认[hash]-[width].[ext]天然适配缓存通过 src/parseQuery.ts 解析导入路径中的查询参数再通过 src/index.ts 调度适配器完成缩放安装也很简单一行命令搞定npm install responsive-loader sharp --save-dev然后在 webpack 配置里注册一条规则即可完整的安装与配置说明见 README.mdmodule.exports { module: { rules: [ { test: /\.(png|jpe?g)$/, use: [{ loader: responsive-loader }], type: javascript/auto, }, ], }, }查询参数魔法图片路径后加个问号responsive-loader 最灵活的地方在于每一张图片都可以单独点菜。查询参数解析逻辑实现在 src/parseQuery.ts支持的常见参数包括查询参数作用示例?size只生成一个指定宽度hero.jpg?size480?sizes[]生成多个宽度可重复hero.jpg?sizes[]480,sizes[]1140?format转换格式webp/avif/png/jpghero.jpg?formatwebp?quality压缩质量默认 85hero.jpg?quality70?minmaxsteps按区间自动均分尺寸hero.jpg?min300max1200steps4?rotate旋转图片角度hero.jpg?rotate90?placeholdertrue额外输出 data URI 占位小图hero.jpg?placeholdertrue?disable开发时跳过处理提速构建hero.jpg?disable这些参数的合法性由 src/schema.json 校验写错了会在构建时报错提示对新手非常友好。参数写法支持三种风格普通键值对?size500、JSON5 对象?{sizes:[500,1000], format:webp}、以及option/-option的布尔快捷写法。测试用例 test/sharp/index.js 里几乎涵盖了全部玩法是学习查询参数的活字典。核心玩法CSS 响应式背景图的配置方法很多文章只教你在 JS 里import图片但CSS 里的url()同样会被 webpack 处理查询参数一样生效——这正是打造响应式背景图的捷径。以这张 1000×900 的测试猫咪图test/cat-1000.jpg为例构建时它会真的被裁剪成 1140px 和 480px 两个文件.hero { background: url(../images/cat-1000.jpg?size1140) center/cover no-repeat; } media (max-width: 480px) { .hero { background: url(../images/cat-1000.jpg?size480) center/cover no-repeat; } }效果对比手机端只会下载 480px 的轻量版本而大屏用户拿到 1140px 的清晰大图。手机流量省了页面首屏也快了一截。 注意在 CSS 中使用多个sizes[]时只有第一个缩放后的图片会被用作背景所以给背景图请优先用?size。进阶技巧让背景图更省流量1. 自动转 webp / avif需 sharp.hero { background: url(../images/cat-1000.jpg?size1140formatwebp) center/cover; }同样的视觉质量webp 体积通常只有 jpg 的一半左右。2. 占位图防闪烁?placeholdertrue会额外输出一个 40px 宽的 data URI 小图可以先用它在背景上垫底大图加载完再替换避免背景区域一片空白。3. 旋转与渐进式扫描sharp 适配器还支持?rotate90旋转图片、?progressivetrue输出渐进式 JPEG。项目自带的测试素材 test/cat-rotated-1000.jpg 就演示了旋转场景下的正确处理保证 EXIF 方向信息不会让背景图躺倒。4. 开发模式提速本地开发时可以给特定图片加?disable跳过缩放处理或者在配置里开启cacheDirectory缓存构建结果二次构建秒完成。详见 src/cache.ts。常见问题速答尺寸写大了会放大图片吗不会。指定宽度超过原图宽度时自动按原图宽度输出见 src/utils.ts避免无谓的放大模糊。CSS 里能用多尺寸sizes[]吗可以但只会取第一张想要真正多尺寸请用 JS 导入拿到srcSet再写入srcset属性。能用别的图片库吗可以。responsive-loader 的适配器接口定义在 src/types.d.ts实现自己的 adapter 即可替换 sharp/jimp。小结responsive-loader 一张源图 → 多个尺寸 srcset的 webpack loader查询参数?size、?sizes[]、?format是它的瑞士军刀JS 导入和 CSSurl()都能用CSS 响应式背景图的最佳实践桌面?size1140 媒体查询切移动端?size480再叠加?formatwebp省流量掌握查询参数这套玩法你的图片体积和页面性能都能立竿见影。更多选项细节欢迎翻一翻 README.md 中的 Options 表格和 test/ 目录下的真实用例。【免费下载链接】responsive-loaderA webpack loader for responsive images项目地址: https://gitcode.com/gh_mirrors/re/responsive-loader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考