Bun 1.3 正式发布

2025年10月10日,高性能 javascript 运行时 bun 发布了 1.3 版本。这是 bun 项目迄今为止最重大的版本更新,标志着 bun 从单纯的运行时工具演变为一个功能完备的全栈 javascript 开发平台。

从运行时到全栈平台的跨越

Bun 1.3 的核心突破在于将前端开发能力深度整合进运行时。据官方介绍,此次更新新增了对前端开发的一级支持,开发者现在可以直接运行 HTML 文件,无需额外配置即可启动一个功能完整的开发服务器。

bun ./**/*.html

执行上述命令后,Bun 会自动识别项目中的 HTML 文件并启动开发服务器,包括热模块替换(HMR)、React Fast Refresh 等现代前端开发必备功能。这种「开箱即用」的设计理念贯穿整个 1.3 版本。

值得注意的是,Bun 的开发服务器并非简单的静态文件服务器,而是集成了原生的 JavaScript、CSS 和 HTML 转译与打包能力。这意味着开发者可以在同一个进程中同时处理前后端代码,从根本上解决了传统开发中前后端端口分离导致的 CORS 跨域问题。

内置数据库客户端:性能与便利的平衡

数据库访问是后端开发的核心需求。Bun 1.3 将内置数据库支持从单一的 PostgreSQL 扩展到 MySQL、MariaDB 和 SQLite,并提供了统一的 Bun.SQL API。这一设计大幅降低了项目的依赖复杂度,同时带来显著的性能提升。

import { sql, SQL } from "bun";// 使用统一 API 连接不同数据库const postgres = new SQL("postgres://localhost/mydb");const mysql = new SQL("mysql://localhost/mydb");const sqlite = new SQL("sqlite://data.db");// 自动从环境变量读取连接信息const seniorAge = 65;const seniorUsers = await sql`  SELECT name, age FROM users  WHERE age >= ${seniorAge}`;

虽然现有的 npm 包如 postgresmysql2 在 Bun 中已有不错的性能表现,但原生实现带来的优势不容小觑。官方数据显示,内置客户端在某些场景下性能提升可达数倍。

新版本还新增了 Redis 客户端支持,官方基准测试显示其性能是流行的 ioredis 库的 7.9 倍以上。对于需要缓存和消息队列的应用场景,这一改进意义重大。

Bun 1.3 正式发布

路由系统:简化全栈应用架构

Bun 1.3 为 Bun.serve() 引入了内置路由系统,支持参数化路由和通配符,让开发者能够在同一服务中优雅地处理前端页面和后端 API。

import { serve, sql } from "bun";import App from "./myReactSPA.html";serve({  port: 3000,  routes: {    "/*": App,        "/api/users": {      GET: async () => Response.json(await sql`SELECT * FROM users LIMIT 10`),      POST: async (req) => {        const { name, email } = await req.json();        const [user] = await sql`          INSERT INTO users ${sql({ name, email })}          RETURNING *;        `;        return Response.json(user);      },    },        "/api/users/:id": async (req) => {      const { id } = req.params;      const [user] = await sql`SELECT * FROM users WHERE id = ${id} LIMIT 1`;      if (!user) return new Response("User not found", { status: 404 });      return Response.json(user);    },  },});

这种设计让全栈应用的部署变得极为简单。更令人印象深刻的是,Bun 的打包器现在支持将前后端代码打包成单一的可执行文件:

bun build --compile ./index.html --outfile myapp

生成的可执行文件可以在任何地方运行,无需安装 Node.js 或其他依赖,这对于微服务部署和边缘计算场景具有重要价值。

Cookie 管理:告别第三方库

Web 应用中的 Cookie 处理一直是个痛点。开发者要么选择单一功能的 tough-cookie 库,要么被迫引入 Express、Elysia 等完整框架。Bun 1.3 提供了原生的 Cookie API,采用类似 Map 的接口设计:

import { serve, randomUUIDv7 } from "bun";serve({  routes: {    "/api/users/sign-in": (request) => {      request.cookies.set("sessionId", randomUUIDv7(), {        httpOnly: true,        sameSite: "strict",      });      return new Response("Signed in");    },    "/api/users/sign-out": (request) => {      request.cookies.delete("sessionId");      return new Response("Signed out");    },  },});

这个 API 的巧妙之处在于零性能开销的延迟解析——只有在实际访问 request.cookies 时才会解析请求头中的 Cookie,避免了不必要的计算。

包管理器的重大革新

Bun 的包管理器在 1.3 版本中获得了多项企业级特性。其中最值得关注的是隔离安装模式成为工作空间的默认行为。这一改变解决了大型 monorepo 项目中最常见的问题之一:包的幽灵依赖(phantom dependencies)。

在传统的提升安装模式下,所有依赖都平铺在根目录的 node_modules 中,包可能意外访问到未在 package.json 中声明的依赖。隔离模式确保每个包只能访问其明确声明的依赖,提高了构建的可预测性和可靠性。

依赖目录 (Catalogs) 功能为 monorepo 中的版本管理提供了优雅的解决方案:

{  "name": "monorepo",  "workspaces": ["packages/*"],  "catalog": {    "react": "^18.0.0",    "typescript": "^5.0.0"  }}

工作空间包可以通过 "react": "catalog:" 引用目录中的版本,实现集中式版本管理。这一设计借鉴了 pnpm 的成功经验,但整合得更加自然。

新增的安全扫描 API 让企业能够在安装阶段拦截恶意包。Bun 团队与 Socket 安全公司合作,推出了官方安全扫描器 @socketsecurity/bun-security-scanner。开发者也可以基于公开的 API 编写自定义扫描器,满足特定的安全合规需求。

[install.security]scanner = "@socketsecurity/bun-security-scanner"

最小发布时间限制功能则提供了对供应链攻击的防护:

[install]minimumReleaseAge = 604800  # 7天

这项配置要求包必须发布至少指定时间后才允许安装,给社区留出时间识别潜在的恶意包。

交互式更新命令 bun update --interactive 让依赖升级变得可控:

bun update --interactive

开发者可以逐个选择要更新的包,而不是一次性升级所有依赖,从而更好地控制潜在的破坏性变更。

测试框架的成熟化

Bun 的测试运行器在 1.3 版本中获得了与 VS Code Test Explorer 的深度集成。开发者可以直接在编辑器侧边栏查看测试列表,一键运行或调试单个测试,内联查看错误信息。这种开发体验与 Jest + VS Code Jest 扩展相当,但得益于 Bun 的性能优势,测试执行速度更快。

并发测试支持的加入让 I/O 密集型测试套件的运行时间大幅缩短:

import { test } from "bun:test";test.concurrent("fetch user 1", async () => {  const res = await fetch("https://api.example.com/users/1");  expect(res.status).toBe(200);});describe.concurrent("server tests", () => {  test("sends a request to server 1", async () => {    const response = await fetch("https://example.com/server-1");    expect(response.status).toBe(200);  });});

默认情况下,最多 20 个测试会并发运行,这个数字可以通过 --max-concurrency 标志调整。对于需要保持串行执行的测试,可以使用 test.serial 修饰符。

类型测试功能 expectTypeOf() 的引入是另一个亮点。开发者现在可以在单元测试中直接验证 TypeScript 类型:

import { expectTypeOf, test } from "bun:test";test("types are correct", () => {  expectTypeOf().toEqualTypeOf();  expectTypeOf({ foo: 1 }).toHaveProperty("foo");  expectTypeOf<Promise>().resolves.toBeNumber();});

这些类型断言可以通过 bunx tsc --noEmit 在 CI 流程中验证,将类型安全检查提升到了新的高度。

Node.js 兼容性的持续推进

Bun 1.3 在每次提交时运行 Node.js 测试套件中额外的 800 个测试用例。官方数据显示,N-API 测试通过率已达 98% 以上,timers 模块通过率达到 98.4%。

node:vm 模块的全面支持是本次更新的重要成果。这个模块常用于代码沙箱、插件系统等高级场景,其实现难度较大。Bun 1.3 不仅支持基础的 vm.Script,还实现了 vm.SourceTextModulevm.SyntheticModule 等高级 API,并支持字节码缓存以提升编译性能。

import vm from "node:vm";const script = new vm.Script('console.log("Hello from VM")');script.runInThisContext();

node:test 模块的初步支持让使用 Node.js 原生测试框架的项目能够在 Bun 上运行,这对于生态系统的兼容性意义重大。

加密性能的提升令人瞩目。DiffieHellman 和 Cipheriv/Decipheriv 的速度提升了约 400 倍,scrypt 提升了 6 倍。这些改进通过将关键路径用原生 C++ 重写实现,大幅降低了密码学操作的开销。

Web 标准与现代 API

Bun 1.3 新增了对多项 Web 标准的支持。YAML 原生支持让配置文件处理变得简单:

import { YAML } from "bun";const obj = YAML.parse("key: value");const yaml = YAML.stringify({ key: "value" }, 0, 2);// 直接导入 YAML 文件import config from "./config.yaml";

官方实现的 YAML 解析器目前通过了官方测试套件的 90% 用例,性能表现优异。

WebSocket 压缩功能的自动协商是另一个实用特性。当连接支持 permessage-deflate 时,Bun 会自动启用压缩,对于 JSON 等结构化数据,压缩率可达 60-80%,显著减少带宽消耗。

Zstandard 压缩的全面支持包括 fetch() 的自动解压和手动压缩 API:

import { zstdCompress, zstdDecompress } from "bun";const compressed = await zstdCompress("Hello, world!");const decompressed = await zstdDecompress(compressed);

DisposableStackAsyncDisposableStack 的实现体现了 Bun 对 TC39 提案的快速跟进。这些 API 与 usingawait using 声明配合,提供了优雅的资源管理机制。

性能优化:细节见真章

Bun 1.3 的性能优化遍布各个层面。空闲 CPU 占用的降低源于对垃圾回收调度的优化,在没有进行中的请求时,Bun.serve 的计时器不再活跃。JavaScript 内存占用降低 10-30% (Next.js 应用降低 28%,Elysia 降低 11%) 归功于更智能的 GC 计时器调度。

I/O 线程池的优化让 macOS 上的 Bun.build 快了 60%。Express 性能提升 9%,Fastify 提升 5.4%,这些改进来自对 node:http 模块的持续优化。

postMessage 的性能提升尤为惊人——字符串传递快了 500 倍,简单对象快了 240 倍。这通过避免对安全共享的字符串进行序列化实现,同时减少了约 22 倍的峰值内存使用。

// 在 Worker 间传递大型 JSON 字符串现在快了 500 倍const response = await fetch("https://api.example.com/data");const json = await response.text();postMessage(json);

启动时间减少了 1ms,内存占用减少了 3MB,这些看似微小的优化累积起来,对用户体验产生显著影响。

开发者体验的精心打磨

Bun 1.3 在开发者体验上的改进同样值得称道。TypeScript 默认配置改为 "module": "Preserve",保留模块语法的原始形态,更符合 Bun 作为原生 ES 模块运行时的定位。

console.log() 的深度控制让调试大型对象变得可控:

bun --console-depth=5 ./app.ts

[console]depth = 5

BUN_OPTIONS 环境变量提供了设置默认 CLI 参数的便捷方式:

export BUN_OPTIONS="--watch --hot"bun run ./app.ts# 等同于: bun --watch --hot run ./app.ts

bunx --package 标志让运行二进制文件与包名不一致的包变得简单:

bunx --package=@typescript-eslint/parser eslint ./src

新增的 bun why 命令清晰地展示依赖链,解答「为什么这个包会出现在我的项目中」:

bun why tailwindcss

这些看似细小的改进,体现了 Bun 团队对开发者日常工作流程的深刻理解。

打包器与构建系统的增强

Bun 的打包器在 1.3 版本中获得了跨平台编译能力。开发者现在可以在任何平台上为 Windows、macOS 和 Linux 构建可执行文件:

bun build --compile --target=linux-x64 ./app.ts --outfile myapp-linuxbun build --compile --target=darwin-arm64 ./app.ts --outfile myapp-macosbun build --compile --target=windows-x64 ./app.ts --outfile myapp.exe

Windows 可执行文件元数据的支持让企业应用的打包更加专业:

bun build --compile --target=windows-x64   --title="My App"   --publisher="My Company"   --version="1.0.0"   ./app.ts

代码签名支持(Windows 的 Authenticode 和 macOS 的 codesign)确保了发布的可执行文件可以通过操作系统的安全验证。

压缩器变得更加智能,能够移除未使用的函数和类名,优化 new Object()new Array() 等表达式,消除无用的 try...catch...finally 块。这些优化让生产构建的体积进一步缩小。

安全性的持续关注

Bun 1.3 引入了 Bun.secrets API,利用操作系统的原生凭据存储(macOS 的 Keychain、Linux 的 libsecret、Windows 的 Credential Manager):

import { secrets } from "bun";await secrets.set({  service: "my-app",  name: "api-key",  value: "secret-value",});const key = await secrets.get({  service: "my-app",  name: "api-key",});

凭据在静态时被加密,与环境变量分离存储,提供了更高的安全保障。

Bun.CSRF 模块为跨站请求伪造防护提供了原生支持:

import { CSRF } from "bun";const secret = "your-secret-key";const token = CSRF.generate({ secret, encoding: "hex", expiresIn: 60 * 1000 });const isValid = CSRF.verify(token, { secret });

这些安全特性的内置化降低了开发者的心智负担,让安全最佳实践更容易落地。

生态系统的影响与展望

Bun 1.3 的发布标志着该项目从「快速运行时」向「完整开发平台」的战略转型。Midjourney 等知名公司已在生产环境中使用 Bun 进行前端开发,这证明了其稳定性和可靠性。

官方提到,每个提交都会运行大量的 Node.js 测试套件,表明 Bun 团队对兼容性的重视。对 pnpm.lockyarn.lock 的迁移支持,让团队可以无痛试用 Bun,而无需说服所有成员同时升级工具链。

不过,1.3 版本也带来了一些破坏性变更。Bun.serve() 的 TypeScript 类型被重构,WebSocket 数据定义方式发生变化;SQL 客户端现在强制使用标签模板语法;测试过滤器在没有匹配用例时会报错而非静默成功。这些变更虽然可能给现有项目带来迁移成本,但从长远看有利于 API 的一致性和可维护性。

数据说话:性能对比

根据官方提供的基准测试数据:

Redis 客户端: 比 ioredis 快 7.9 倍以上 postMessage 字符串: 速度提升 500 倍,内存减少 22 倍 postMessage 对象: 速度提升 240 倍 DiffieHellman: 约快 400 倍 Cipheriv/Decipheriv: 约快 400 倍 scrypt: 快 6 倍 AbortSignal.timeout: 快 40 倍 Headers 操作: 快 2 倍 Bun.build on macOS: 快 60% Express: 快 9% Fastify: 快 5.4%

这些数据展示了 Bun 在性能上的持续领先优势。

社区反响与未来规划

Bun 1.3 的发布在社区引发了热烈讨论。开发者们尤其关注全栈开发能力的提升和包管理器的企业级特性。Socket 公司 CTO Ahmad Nassri 对安全扫描 API 的评价颇具代表性:「Bun 团队行动迅速,在包管理器层面保护开发者。开放安全扫描 API,让 Socket 这样的工具能够在安装过程中提供实时威胁检测。这是让开源开发默认更安全的重要一步。」

官方表示,1.3 系列将持续关注全栈应用开发体验的提升。Redis 集群、流式处理和 Lua 脚本支持已在规划中。WebAssembly 流式编译的实现,以及对更多 TC39 提案的支持,也在进行中。

Bun 的快速迭代和对社区反馈的积极响应,让人对其未来发展充满期待。从一个「更快的 Node.js」到一个「完整的 JavaScript 平台」,Bun 正在书写属于自己的故事。

源码地址:点击下载

以上就是Bun 1.3 正式发布的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/24197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月2日 05:00:00
下一篇 2025年11月2日 05:30:32

相关推荐

  • CSS mask属性无法获取图片:为什么我的图片不见了?

    CSS mask属性无法获取图片 在使用CSS mask属性时,可能会遇到无法获取指定照片的情况。这个问题通常表现为: 网络面板中没有请求图片:尽管CSS代码中指定了图片地址,但网络面板中却找不到图片的请求记录。 问题原因: 此问题的可能原因是浏览器的兼容性问题。某些较旧版本的浏览器可能不支持CSS…

    2025年12月24日
    900
  • 如何用dom2img解决网页打印样式不显示的问题?

    用dom2img解决网页打印样式不显示的问题 想将网页以所见即打印的的效果呈现,需要采取一些措施,特别是在使用了bootstrap等大量采用外部css样式的框架时。 问题根源 在常规打印操作中,浏览器通常会忽略css样式等非必要的页面元素,导致打印出的结果与网页显示效果不一致。这是因为打印机制只识别…

    2025年12月24日
    800
  • 如何用 CSS 模拟不影响其他元素的链接移入效果?

    如何模拟 css 中链接的移入效果 在 css 中,模拟移入到指定链接的效果尤为复杂,因为链接的移入效果不影响其他元素。要实现这种效果,最简单的方法是利用放大,例如使用 scale 或 transform 元素的 scale 属性。下面提供两种方法: scale 属性: .goods-item:ho…

    2025年12月24日
    700
  • Uniapp 中如何不拉伸不裁剪地展示图片?

    灵活展示图片:如何不拉伸不裁剪 在界面设计中,常常需要以原尺寸展示用户上传的图片。本文将介绍一种在 uniapp 框架中实现该功能的简单方法。 对于不同尺寸的图片,可以采用以下处理方式: 极端宽高比:撑满屏幕宽度或高度,再等比缩放居中。非极端宽高比:居中显示,若能撑满则撑满。 然而,如果需要不拉伸不…

    2025年12月24日
    400
  • PC端H5项目如何实现适配:流式布局、响应式设计和两套样式?

    PC端的适配方案及PC与H5兼顾的实现方案探讨 在开发H5项目时,常用的屏幕适配方案是postcss-pxtorem或postcss-px-to-viewport,通常基于iPhone 6标准作为设计稿。但对于PC端网项目,处理不同屏幕大小需要其他方案。 PC端屏幕适配方案 PC端屏幕适配一般采用流…

    2025年12月24日
    300
  • CSS 元素设置 10em 和 transition 后为何没有放大效果?

    CSS 元素设置 10em 和 transition 后为何无放大效果? 你尝试设置了一个 .box 类,其中包含字体大小为 10em 和过渡持续时间为 2 秒的文本。当你载入到页面时,它没有像 YouTube 视频中那样产生放大效果。 原因可能在于你将 CSS 直接写在页面中 在你的代码示例中,C…

    2025年12月24日
    400
  • 如何实现类似横向U型步骤条的组件?

    横向U型步骤条寻求替代品 希望找到类似横向U型步骤条的组件或 CSS 实现。 潜在解决方案 根据给出的参考图片,类似的组件有: 图片所示组件:图片提供了组件的外观,但没有提供具体的实现方式。参考链接:提供的链接指向了 SegmentFault 上的另一个问题,其中可能包含相关的讨论或解决方案建议。 …

    2025年12月24日
    800
  • 如何让小说网站控制台显示乱码,同时网页内容正常显示?

    如何在不影响用户界面的情况下实现控制台乱码? 当在小说网站上下载小说时,大家可能会遇到一个问题:网站上的文本在网页内正常显示,但是在控制台中却是乱码。如何实现此类操作,从而在不影响用户界面(UI)的情况下保持控制台乱码呢? 答案在于使用自定义字体。网站可以通过在服务器端配置自定义字体,并通过在客户端…

    2025年12月24日
    800
  • 如何优化CSS Grid布局中子元素排列和宽度问题?

    css grid布局中的优化问题 在使用css grid布局时可能会遇到以下问题: 问题1:无法控制box1中li的布局 box1设置了grid-template-columns: repeat(auto-fill, 20%),这意味着容器将自动填充尽可能多的20%宽度的列。当li数量大于5时,它们…

    2025年12月24日
    800
  • SASS 中的 Mixins

    mixin 是 css 预处理器提供的工具,虽然它们不是可以被理解的函数,但它们的主要用途是重用代码。 不止一次,我们需要创建多个类来执行相同的操作,但更改单个值,例如字体大小的多个类。 .fs-10 { font-size: 10px;}.fs-20 { font-size: 20px;}.fs-…

    2025年12月24日
    000
  • 如何在地图上轻松创建气泡信息框?

    地图上气泡信息框的巧妙生成 地图上气泡信息框是一种常用的交互功能,它简便易用,能够为用户提供额外信息。本文将探讨如何借助地图库的功能轻松创建这一功能。 利用地图库的原生功能 大多数地图库,如高德地图,都提供了现成的信息窗体和右键菜单功能。这些功能可以通过以下途径实现: 高德地图 JS API 参考文…

    2025年12月24日
    400
  • 如何使用 scroll-behavior 属性实现元素scrollLeft变化时的平滑动画?

    如何实现元素scrollleft变化时的平滑动画效果? 在许多网页应用中,滚动容器的水平滚动条(scrollleft)需要频繁使用。为了让滚动动作更加自然,你希望给scrollleft的变化添加动画效果。 解决方案:scroll-behavior 属性 要实现scrollleft变化时的平滑动画效果…

    2025年12月24日
    000
  • CSS mask 属性无法加载图片:浏览器问题还是代码错误?

    CSS mask 属性请求图片失败 在使用 CSS mask 属性时,您遇到了一个问题,即图片没有被请求获取。这可能是由于以下原因: 浏览器问题:某些浏览器可能在处理 mask 属性时存在 bug。尝试更新到浏览器的最新版本。代码示例中的其他信息:您提供的代码示例中还包含其他 HTML 和 CSS …

    2025年12月24日
    000
  • 如何为滚动元素添加平滑过渡,使滚动条滑动时更自然流畅?

    给滚动元素平滑过渡 如何在滚动条属性(scrollleft)发生改变时为元素添加平滑的过渡效果? 解决方案:scroll-behavior 属性 为滚动容器设置 scroll-behavior 属性可以实现平滑滚动。 html 代码: click the button to slide right!…

    2025年12月24日
    500
  • 如何用 CSS 实现链接移入效果?

    css 中实现链接移入效果的技巧 在 css 中模拟链接的移入效果可能并不容易,因为它们不会影响周围元素。但是,有几个方法可以实现类似的效果: 1. 缩放 最简单的方法是使用 scale 属性,它会放大元素。以下是一个示例: 立即学习“前端免费学习笔记(深入)”; .goods-item:hover…

    2025年12月24日
    000
  • 网页使用本地字体:为什么 CSS 代码中明明指定了“荆南麦圆体”,页面却仍然显示“微软雅黑”?

    网页中使用本地字体 本文将解答如何将本地安装字体应用到网页中,避免使用 src 属性直接引入字体文件。 问题: 想要在网页上使用已安装的“荆南麦圆体”字体,但 css 代码中将其置于第一位的“font-family”属性,页面仍显示“微软雅黑”字体。 立即学习“前端免费学习笔记(深入)”; 答案: …

    2025年12月24日
    000
  • 如何选择元素个数不固定的指定类名子元素?

    灵活选择元素个数不固定的指定类名子元素 在网页布局中,有时需要选择特定类名的子元素,但这些元素的数量并不固定。例如,下面这段 html 代码中,activebar 和 item 元素的数量均不固定: *n *n 如果需要选择第一个 item元素,可以使用 css 选择器 :nth-child()。该…

    2025年12月24日
    200
  • 如何用 CSS 实现类似卡券的缺口效果?

    类似卡券的布局如何实现 想要实现类似卡券的布局,可以使用遮罩(mask)来实现缺口效果。 示例代码: .card { -webkit-mask: radial-gradient(circle at 20px, #0000 20px, red 0) -20px;} 效果: 立即学习“前端免费学习笔记(…

    2025年12月24日
    000
  • 如何用纯代码实现自定义宽度和间距的虚线边框?

    自定义宽度和间距的虚线边框 提问: 如何创建一个自定义宽度和间距的虚线边框,如下图所示: 元素宽度:8px元素高度:1px间距:2px圆角:4px 解答: 传统的解决方案通常涉及使用 border-image 引入切片的图片来实现。但是,这需要引入外部资源。本解答将提供一种纯代码的方法,使用 svg…

    2025年12月24日
    000
  • PC端、PC兼响应式H5项目,如何选择最佳适配方案?

    多屏适配:PC端、PC兼响应式H5项目解决方案 针对PC端的网页适配,业界普遍采用以下方案: 流媒体查询:根据设备屏幕宽度应用不同的样式表,实现不同屏幕尺寸的适配。栅格系统:将布局划分为多个网格,根据屏幕宽度调整网格的显示和隐藏,实现自适应布局。 一般情况下,设计师设计PC页面时,会以特定像素宽度为…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信