如何配置VSCode以支持函数式计算和Serverless调试?

答案:配置VSCode需集成语言扩展与云工具链。安装F#、Haskell等语言扩展以实现智能感知和REPL交互,结合AWS SAM CLI、Azure Functions Core Tools在本地模拟Serverless运行时,通过launch.json配置事件载荷、环境变量及preLaunchTask自动化构建与调试,利用Docker确保环境一致性,并通过条件断点、日志点等高级调试功能提升效率,最终实现高效本地开发与测试。

如何配置vscode以支持函数式计算和serverless调试?

在VSCode中配置函数式计算和Serverless调试,本质上是围绕特定语言的工具链集成与云服务商的本地模拟环境搭建。这能显著提升开发效率,让本地开发体验尽可能接近生产环境,同时享受VSCode强大的编辑和调试能力。

配置VSCode以支持函数式计算和Serverless调试,这事儿说起来简单,做起来也确实有章可循,但其中的“坑”和优化空间,往往需要亲身踩过才能体会。我个人觉得,核心在于理解工具链的边界和VSCode扩展的魔力。

解决方案

首先,确保你的VSCode是最新版本,这能避免很多兼容性问题。

针对函数式计算:

语言支持扩展: 这几乎是基础中的基础。例如,如果你偏爱F#,

Ionide

扩展是必装的,它提供了智能感知、类型检查、构建集成等一切你需要的。Haskell开发者会安装

Haskell

扩展,Scala则有

Metals

。这些扩展通常会依赖于语言本身的SDK或编译器,所以确保你的系统已经正确安装了对应的语言环境。REPL集成: 许多函数式语言都有强大的REPL(Read-Eval-Print Loop)。像F#的

F# Interactive

,可以通过

Ionide

直接在VSCode中启动并交互,这对于快速原型验证和理解代码行为至关重要。你可能需要在

settings.json

中配置REPL的路径或启动参数。代码格式化与Linting: 函数式代码的风格往往很严格,保持一致性非常重要。安装对应的格式化工具(如

Fantomas

for F#)和Linter,并配置VSCode在保存时自动格式化。这能解放你的心智,专注于逻辑而非格式。类型推断与提示: 函数式编程中类型系统扮演着核心角色。确保扩展能提供实时的类型推断和错误提示,这能大大减少调试时间。

针对Serverless调试:

云服务商工具包: 这是Serverless调试的基石。AWS Lambda: 安装

AWS Toolkit for Visual Studio Code

。它能让你直接在VSCode中浏览Lambda函数、S3桶等资源,更重要的是,它集成了

AWS SAM CLI

。你需要本地安装

Docker

AWS SAM CLI

Azure Functions: 安装

Azure Functions

扩展。它依赖于

Azure Functions Core Tools

,也需要

Node.js

Docker

(用于某些语言运行时)。Google Cloud Functions:

Google Cloud Code

扩展是首选,它提供了本地模拟和部署功能。本地模拟与调试配置:

launch.json

配置: 这是VSCode调试的核心。对于Serverless应用,你通常会配置一个

launch.json

条目来调用本地的SAM CLI或Azure Functions Core Tools。AWS SAM示例:

{    "version": "0.2.0",    "configurations": [        {            "name": "Debug SAM Local",            "type": "aws-sam",            "request": "direct-invoke",            "invokeTarget": {                "target": "code",                "projectRoot": "${workspaceFolder}",                "lambdaHandler": "app.lambda_handler" // 你的函数入口            },            "lambda": {                "runtime": "python3.9", // 你的运行时                "payload": {                    "json": {} // 你的测试事件JSON                },                "environmentVariables": {                    "TABLE_NAME": "my-local-table" // 本地环境变量                }            }        }    ]}

Azure Functions示例:

{    "version": "0.2.0",    "configurations": [        {            "name": "Attach to Python Functions",            "type": "python",            "request": "attach",            "port": 9091,            "preLaunchTask": "func: host start" // 启动Azure Functions Host的task        }    ],    "compounds": [        {            "name": "Debug Functions",            "configurations": ["Attach to Python Functions"]        }    ]}

事件载荷模拟: Serverless函数通常由事件触发。在

launch.json

中,你需要提供模拟的事件载荷(JSON格式),这能让你在本地重现生产环境中的触发条件。环境变量管理: Serverless函数严重依赖环境变量。在

launch.json

.env

文件中配置这些变量,确保本地调试时能正确读取。断点调试: 一旦配置好

launch.json

,你就可以像调试普通应用一样,在Serverless函数的代码中设置断点,单步执行,检查变量状态。这比在云端查看日志文件高效得多。

在VSCode中,如何高效地为不同函数式编程语言配置开发环境?

为不同的函数式编程语言配置VSCode开发环境,我的经验是,这不单单是安装一个扩展那么简单,更深层次的是要让VSCode“理解”你的代码,并提供语言层面的深度支持。这包括但不限于语法高亮、智能感知、类型检查、重构工具,以及与语言特有工具(如REPL、构建系统)的无缝集成。

以F#为例,

Ionide

扩展是其在VSCode中的核心。安装后,你需要确保F# SDK已正确安装在你的系统路径中。

Ionide

会自动检测并利用这些工具。但仅仅这样还不够,我发现一些细微的配置能极大提升体验:

项目文件支持: F#项目通常使用

.fsproj

文件。确保

Ionide

能正确解析这些文件,以便提供跨文件的智能感知。有时,如果项目结构复杂,你可能需要在VSCode工作区设置中明确指定解决方案文件(

.sln

)的路径,或者调整

Ionide

的相关配置,让它知道如何找到你的项目。REPL的深度集成: F# Interactive (FSI) 是F#开发者的瑞士军刀。

Ionide

允许你选中代码片段,然后发送到FSI执行。我个人喜欢将FSI窗口放在一个独立的面板,方便实时查看结果。你甚至可以配置快捷键,快速启动FSI或发送代码。这种即时反馈对于探索性编程和理解复杂函数式概念非常有帮助。格式化与Linting: 函数式代码的纯粹性使得代码风格和一致性显得尤为重要。对于F#,

Fantomas

是事实上的标准格式化工具。我通常会配置VSCode,在保存文件时自动运行

Fantomas

。这通过在

settings.json

中添加类似

"[fsharp]": { "editor.formatOnSave": true }

的设置,并确保

Fantomas

已全局安装或作为项目依赖。这样一来,我可以专注于逻辑,而不必担心代码风格问题。构建与测试: 函数式项目同样需要构建和测试。

Ionide

通常会集成

dotnet CLI

的构建和测试命令。你可以通过VSCode的

Tasks

功能,配置自定义的构建和测试任务,例如运行

dotnet build

dotnet test

,并将其绑定到快捷键,从而实现一键操作。

对于Haskell,

Haskell

扩展(通常结合

Haskell Language Server

)提供了类似的深度集成。它会利用

ghc

cabal

stack

等工具。关键在于确保这些工具链在你的环境中是可用的,并且VSCode的扩展能够正确地找到并调用它们。有时,你可能需要调整

settings.json

中的

haskell.serverExecutablePath

haskell.ghcupPath

等路径,以确保一切正常工作。

我的经验是,每种函数式语言都有其独特的生态系统和工具偏好。花时间深入了解你所用语言的VSCode扩展的配置选项,并根据你的项目需求进行调整,是提升开发效率的关键。这不仅仅是让代码能跑起来,更是让开发体验变得顺畅、高效。

Serverless应用本地调试有哪些核心挑战,VSCode如何提供解决方案?

Serverless应用的本地调试,从我的角度看,最大的挑战在于环境模拟的真实性事件驱动的复杂性。Serverless函数本质上是在一个高度抽象、短暂存活的环境中运行的,它依赖于云服务商提供的特定运行时、环境变量、以及各种触发事件。要在本地完全复刻这种环境,确实不容易。

核心挑战:

环境差异(Runtime Parity): 本地开发环境(你的笔记本)与云端Serverless运行时环境(如Lambda的Amazon Linux 2)之间存在差异。这可能导致在本地运行正常的代码,部署到云端后却出现问题,比如依赖库版本不匹配、文件路径问题、或者操作系统级别的差异。事件驱动的模拟: Serverless函数通常由各种事件触发,如API Gateway请求、S3文件上传、SQS消息、定时任务等。要在本地模拟这些复杂的事件载荷,并确保其格式与云端一致,是一个繁琐且容易出错的过程。外部服务依赖: Serverless函数很少是孤立的,它们通常会与数据库(DynamoDB, Cosmos DB)、消息队列(SQS, Azure Service Bus)、存储服务(S3, Azure Blob Storage)等外部云服务交互。在本地调试时,如何模拟或连接这些外部依赖,而又不产生额外的云费用,是个难题。冷启动与并发: 虽然本地调试通常不会直接模拟冷启动或高并发,但理解这些因素在云端对函数行为的影响,并在本地调试时考虑到潜在问题,也是一个挑战。日志与监控: 在云端,你有CloudWatch Logs、Application Insights等强大的监控工具。本地调试时,如何有效地收集和分析日志,以诊断问题,也需要一套方案。

VSCode提供的解决方案:

VSCode本身是一个强大的编辑器,它通过其扩展生态系统,与云服务商提供的本地工具链深度集成,为上述挑战提供了实用的解决方案:

本地模拟工具集成:

如知AI笔记 如知AI笔记

如知笔记——支持markdown的在线笔记,支持ai智能写作、AI搜索,支持DeepseekR1满血大模型

如知AI笔记 27 查看详情 如知AI笔记 AWS SAM CLI for Lambda:

AWS Toolkit for Visual Studio Code

扩展与

AWS SAM CLI

紧密结合。SAM CLI能够利用

Docker

在本地启动一个与Lambda运行时高度相似的容器。这意味着你可以在本地以几乎与云端一致的环境来运行和调试你的Lambda函数。VSCode的

launch.json

配置可以直接调用SAM CLI来启动这个本地容器,并将你的代码映射进去。Azure Functions Core Tools: 类似地,

Azure Functions

扩展依赖

Azure Functions Core Tools

。这些工具允许你在本地运行Azure Functions Host,模拟Azure Functions的执行环境。VSCode的调试器可以附加到这个本地运行的Host进程,进行断点调试。Google Cloud Functions Framework:

Google Cloud Code

扩展可以集成Google Cloud Functions Framework,允许你在本地HTTP服务器上运行你的函数,模拟HTTP触发器。

事件载荷的便捷管理:

VSCode的

launch.json

配置允许你直接在JSON中定义模拟的事件载荷。你可以创建多个调试配置,每个配置对应一种不同的事件类型或场景。例如,一个用于模拟API Gateway的POST请求,另一个用于模拟S3文件上传事件。某些扩展甚至提供了UI界面来帮助你生成常见的事件模板,减少手动编写JSON的错误。

外部服务模拟与连接:

本地模拟器: 对于一些云服务,如AWS的DynamoDB Local,Azure的Azurite(用于Blob、Queue、Table存储),Google Cloud的Datastore Emulator,你可以在本地运行这些模拟器。VSCode的

tasks.json

可以配置任务来启动这些模拟器,并在调试前确保它们运行。环境变量:

launch.json

.env

文件中配置不同的环境变量,以便在本地调试时连接到本地模拟器,而在部署到云端时连接到实际的云服务。这种灵活的环境变量管理是解决依赖问题的重要一环。

集成式断点调试:

这是VSCode最强大的功能之一。通过正确的

launch.json

配置,你可以在Serverless函数的代码中设置断点,单步执行,检查变量状态,查看调用堆栈。这比仅仅依靠日志输出来诊断问题要高效得多。当代码在本地Docker容器或Function Host中运行时,VSCode的调试器能够“附加”到这些进程,提供无缝的调试体验。

日志与输出:

本地模拟工具通常会将函数的标准输出(

console.log

print

等)直接打印到VSCode的终端或调试控制台。这使得你可以实时查看函数的运行日志,就像在云端查看CloudWatch Logs一样。

总结来说,VSCode通过其强大的扩展生态,将云服务商提供的本地模拟工具链整合到开发流程中,极大地弥补了本地与云端环境的差异,让Serverless应用的调试变得可行且高效。关键在于理解并善用这些工具和配置。

如何优化VSCode的调试配置,以提升Serverless应用的开发与测试效率?

优化VSCode的调试配置,对于Serverless应用的开发和测试效率提升,我认为不仅仅是让代码能跑起来,更是要让整个开发循环(edit-debug-test)尽可能地快和无缝。这需要一些前瞻性的思考和对VSCode特性更深入的挖掘。

精细化

launch.json

配置:

多场景调试: 不要只创建一个通用的调试配置。根据你的函数可能接收的不同事件类型(例如,一个HTTP POST请求,一个S3 PUT事件,一个SQS消息),创建多个独立的

launch.json

配置。每个配置都应该包含一个特定的

payload

,模拟真实世界的触发场景。这能让你快速切换测试场景,而无需手动修改事件JSON。环境变量的灵活管理: 利用

envFile

属性指向一个

.env

文件,或者直接在

environmentVariables

中定义。对于本地调试,你可能需要设置

AWS_REGION=ap-southeast-1

DYNAMODB_ENDPOINT=http://localhost:8000

等,确保函数连接到本地模拟器或正确的开发环境。部署到云端时,这些变量会被云服务商的环境变量覆盖。

preLaunchTask

的利用: 这是一个非常强大的功能。在启动调试会话之前,你可以运行一个或多个VSCode任务。例如:

func: host start

:对于Azure Functions,在调试前启动Functions Host。

npm install

pip install -r requirements.txt

:确保所有依赖都已安装。

sam build

:对于AWS SAM,在调试前构建你的Serverless应用,确保代码是最新的。启动本地数据库模拟器(如

dynamodb-local

)。这能自动化很多准备工作,让你直接进入调试状态。

集成

tasks.json

自动化工作流:

VSCode的

tasks.json

可以定义各种自动化任务,这些任务可以与

launch.json

联动。一键部署: 定义一个任务来执行

sam deploy

func azure functionapp publish

。这样,你可以在本地调试通过后,直接在VSCode中触发部署。本地资源启动/停止: 创建任务来启动或停止本地Docker容器、数据库模拟器等。例如,一个任务启动DynamoDB Local,另一个任务停止它。这可以通过

preLaunchTask

在调试前自动启动,或通过

postDebugTask

在调试结束后清理。测试运行: 配置任务来运行单元测试或集成测试,例如

npm test

pytest

使用工作区(Workspaces)管理复杂项目:

如果你的Serverless项目包含多个函数,或者一个单体仓库(monorepo)中有多个Serverless服务,使用VSCode的工作区文件(

.code-workspace

)来管理它们。每个文件夹都可以有自己的

launch.json

tasks.json

,这样可以保持配置的清晰和独立性。工作区允许你同时打开多个项目文件夹,并在它们之间共享一些顶层配置,这对于大型Serverless项目特别有用。

调试器的高级功能:

条件断点(Conditional Breakpoints): 当你需要调试只在特定条件下发生的错误时,条件断点非常有用。例如,只在某个变量等于特定值时才暂停。日志点(Logpoints): 如果你不想暂停执行,但又想在特定代码行打印一些变量值,可以使用日志点。这在调试性能敏感或并发问题时特别有效,因为它不会中断程序的流程。异常断点(Exception Breakpoints): 配置调试器在捕获或未捕获的异常发生时自动暂停,这能帮助你快速定位错误源。

性能考量:

避免不必要的构建: 如果你的

preLaunchTask

包含了

sam build

,而你只修改了函数逻辑,没有修改依赖,那么每次调试都重新构建可能会很慢。考虑只在必要时才执行构建任务,或者使用

sam build --cached

等优化选项。Docker容器的复用: SAM CLI和Azure Functions Core Tools通常会使用Docker容器。确保你的Docker环境配置良好,并且容器可以被复用,而不是每次调试都重新下载镜像或重建容器。

通过这些优化,你的VSCode调试环境将不再仅仅是一个代码编辑器,而是一个高度集成、智能化的Serverless开发工作站,大大提升你从编写代码到验证其行为的整体效率。

以上就是如何配置VSCode以支持函数式计算和Serverless调试?的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月7日 22:52:10
下一篇 2025年11月7日 22:52:53

相关推荐

  • 如何解决本地图片在使用 mask JS 库时出现的跨域错误?

    如何跨越localhost使用本地图片? 问题: 在本地使用mask js库时,引入本地图片会报跨域错误。 解决方案: 要解决此问题,需要使用本地服务器启动文件,以http或https协议访问图片,而不是使用file://协议。例如: python -m http.server 8000 然后,可以…

    2025年12月24日
    200
  • 使用 Mask 导入本地图片时,如何解决跨域问题?

    跨域疑难:如何解决 mask 引入本地图片产生的跨域问题? 在使用 mask 导入本地图片时,你可能会遇到令人沮丧的跨域错误。为什么会出现跨域问题呢?让我们深入了解一下: mask 框架假设你以 http(s) 协议加载你的 html 文件,而当使用 file:// 协议打开本地文件时,就会产生跨域…

    2025年12月24日
    200
  • 为什么在 React 组件中无法获得 Tailwind CSS 语法提示?

    为什么在 React 组件中无法获得 Tailwind CSS 语法提示? 你在 VSCode 中编写 HTML 文件时,可以正常获取 Tailwind CSS 语法提示。但当你尝试在 React 组件中编写 Tailwind CSS 时,这些提示却消失不见了。这是什么原因造成的? 解决方案 要解决…

    2025年12月24日
    000
  • 如何在 VSCode 中为 React 组件启用 Tailwind CSS 提示?

    在 vscode 中为 react 组件启用 tailwind css 提示 如果你在使用 vscode 编写 react 组件时,发现 tailwind css 提示无法正常显示,这里有一个解决方法: 安装 tailwind css intellisense 插件 这是实现代码提示的关键,确保你已…

    2025年12月24日
    200
  • Vue3 中如何将页面上的 PX 单位转换为 REM?

    vue3 下如何实现某个页面 px 自适应到 rem? 在 vue3 中,您可以在某个页面中使用 px 转 rem 的自适应功能,以免影响其他项目 ui 框架。以下是实现方法: 使用 jquery 获取页面宽度,并将其作为基准值。例如,使用 375 作为基准,您可以在页面 mounted 生命周期函…

    2025年12月24日
    000
  • 如何实现 Vue 3 项目中特定页面自适应,避免影响全局 UI 框架?

    自适应页面 px 到 rem 插件探索 在 vue 3 项目中,开发者有时需要让某个特定页面具有自适应大小,即根据不同分辨率自动调整 px 到 rem 的转换。然而,传统的 px-to-rem 插件可能会影响整个项目的 ui 框架。 为了解决这个问题,这里提供了一种利用 javascript 和 v…

    2025年12月24日
    000
  • Vue 3 页面如何实现 px to rem 自适应?

    如何在 vue 3 页面中实现 px to rem 自适应? 在 vue 项目中,有时需要让特定的页面进行 px to rem 自适应,以实现自动缩放。以下是一个可用的解决方案: 使用 javascript 获取页面宽度,并以 375px 作为基准值。例如: let appwidth = $(‘#a…

    2025年12月24日
    400
  • CSS 砌体 Catness

    css 就像技术中的其他东西一样 – 它总是在变化和发展。该领域正在进行的开发是 css 网格布局模块级别 3,也称为 css masonry 布局。 theo 制作了一段视频,介绍了它的开发方式以及苹果和谷歌就如何实施它进行的辩论。 所有这些让我很高兴尝试 css 砌体! webkit…

    好文分享 2025年12月24日
    000
  • Bear 博客上的浅色/深色模式分步指南

    我最近使用偏好颜色方案媒体功能与 light-dark() 颜色函数相结合,在我的 bear 博客上实现了亮/暗模式切换。 我是这样做的。 第 1 步:设置 css css 在过去几年中获得了一些很酷的新功能,包括 light-dark() 颜色函数。此功能可让您为任何元素指定两种颜色 &#8211…

    2025年12月24日
    100
  • 如何在 Web 开发中检测浏览器中的操作系统暗模式?

    检测浏览器中的操作系统暗模式 在 web 开发中,用户界面适应操作系统(os)的暗模式设置变得越来越重要。本文将重点介绍检测浏览器中 os 暗模式的方法,从而使网站能够针对不同模式调整其设计。 w3c media queries level 5 最新的 web 标准引入了 prefers-color…

    2025年12月24日
    000
  • 如何使用 CSS 检测操作系统是否处于暗模式?

    如何在浏览器中检测操作系统是否处于暗模式? 新发布的 os x 暗模式提供了在 mac 电脑上使用更具沉浸感的用户界面,但我们很多人都想知道如何在浏览器中检测这种设置。 新标准 检测操作系统暗模式的解决方案出现在 w3c media queries level 5 中的最新标准中: 立即学习“前端免…

    2025年12月24日
    000
  • 如何检测浏览器环境中的操作系统暗模式?

    浏览器环境中的操作系统暗模式检测 在如今科技的海洋中,越来越多的设备和软件支持暗模式,以减少对眼睛的刺激并营造更舒适的视觉体验。然而,在浏览器环境中检测操作系统是否处于暗模式却是一个令人好奇的问题。 检测暗模式的标准 要检测操作系统在浏览器中是否处于暗模式,web 开发人员可以使用 w3c 的媒体查…

    2025年12月24日
    200
  • 浏览器中如何检测操作系统的暗模式设置?

    浏览器中的操作系统暗模式检测 近年来,随着用户对夜间浏览体验的偏好不断提高,操作系统已开始引入暗模式功能。作为一名 web 开发人员,您可能想知道如何检测浏览器中操作系统的暗模式状态,以相应地调整您网站的设计。 新 media queries 水平 w3c 的 media queries level…

    2025年12月24日
    000
  • 正则表达式在文本验证中的常见问题有哪些?

    正则表达式助力文本输入验证 在文本输入框的验证中,经常遇到需要限定输入内容的情况。例如,输入框只能输入整数,第一位可以为负号。对于不会使用正则表达式的人来说,这可能是个难题。下面我们将提供三种正则表达式,分别满足不同的验证要求。 1. 可选负号,任意数量数字 如果输入框中允许第一位为负号,后面可输入…

    2025年12月24日
    000
  • 如何解决VSCode中折叠部分的代码复制问题?

    Vscode中折叠代码的复制方法 当Vscode中的代码过多时,可以将其折叠起来以方便查看和编辑。不过,有时用户可能会发现折叠后复制代码时只复制了显示的部分,而折叠部分没有被复制。以下是如何解决此问题的方法: 使用快捷键Ctrl+C直接复制 当代码折叠时,直接使用Ctrl+C快捷键复制即可复制所有代…

    2025年12月24日
    000
  • 如何复制折叠的代码?

    Visual Studio Code 中如何复制折叠的代码? Visual Studio Code (vscode) 中,当遇到过长的代码时,为了提高可读性和简洁性,开发人员会经常使用折叠功能将代码折叠起来。然而,在折叠代码后,直接按住 Ctrl + C 复制代码时,只会复制展开的部分,而折叠的部分…

    2025年12月24日
    000
  • 如何在 VS Code 中解决折叠代码复制问题?

    解决 VS Code 折叠代码复制问题 在 VS Code 中使用折叠功能可以帮助组织长代码,但使用复制功能时,可能会遇到只复制可见部分的问题。以下是如何解决此问题: 当代码被折叠时,可以使用以下简单操作复制整个折叠代码: 按下 Ctrl + C (Windows/Linux) 或 Cmd + C …

    2025年12月24日
    000
  • 如何在 VSCode 复制折叠的代码?

    如何复制折叠的 VSCode 代码 使用 VSCode 时,代码过长可能会造成不便。在折叠代码后,发现无法正常复制折叠的部分,令人感到烦恼。本文将介绍一种解决方案,帮助你轻松复制折叠的 VSCode 代码。 问题:如何复制折叠起来的 VSCode 代码? 当你折叠代码后,直接选中复制只会复制未折叠的…

    2025年12月24日
    000
  • 我在学习编程的第一周学到的工具

    作为一个刚刚完成中学教育的女孩和一个精通技术并热衷于解决问题的人,几周前我开始了我的编程之旅。我的名字是OKESANJO FATHIA OPEYEMI。我很高兴能分享我在编码世界中的经验和发现。拥有计算机科学背景的我一直对编程提供的无限可能性着迷。在这篇文章中,我将反思我在学习编程的第一周中获得的关…

    2025年12月24日
    000
  • CSS 太棒了!

    我正在学习什么 css 赋予了页面活力。多年来,css 变得越来越强大,并且已经开始用于制作以前需要 javascript 的动画。本周我一直在研究它的一些更高级的属性。 媒体查询 媒体查询几乎已经成为新时代设备的必需品。随着智能手机的出现,通过手机消费媒体的人比任何其他设备都多。因此,网站必须在移…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信