笔记本电脑按住电源键强行关机,对电脑有伤害吗?

thbcm阅读(294)

电脑卡住了,我们习惯性地按住电源键或者直接拔掉电源强制关机,但这种做法真的安全吗?会不会对电脑造成伤害呢?

其实,按住电源键关机和直接拔掉电源关机是不一样的。它们在硬件层面有着本质区别。

按住电源键关机

当我们按住电源键时,电脑会收到一个信号,触发一个关机流程。

这个流程并非简单地切断电源,而是按照一定的顺序,关闭各个电源通路,保存数据等等。

这个过程和正常关机在硬件层面是相同的,只是操作系统被跳过了。

按住电源键关机虽然对硬件没有损伤,但对数据安全存在隐患。

按住电源键关机会跳过操作系统,导致操作系统无法正常保存数据,可能会造成数据丢失或文件损坏。

尤其是当我们在进行重要的工作时,例如编辑文档、保存图片等,强制关机可能会导致数据丢失,造成不可挽回的损失。

拔掉电源关机

拔掉电源关机是直接切断电源供应,没有经过任何关机流程,这会导致数据丢失、系统文件损坏等问题,对电脑的伤害更大。

意外掉电对硬件的影响

除了人为强制关机外,意外掉电也会对电脑硬件造成潜在的风险。

● 机械硬盘

机械硬盘本身具有掉电保护功能,在意外掉电的情况下,硬盘会自动将数据写入缓存,并安全地关闭。

因此,意外掉电对机械硬盘的伤害较小。

● 固态硬盘(SSD)

固态硬盘则需要更加注意。

SSD内部拥有一个称为FTL (Flash Translation Layer)的数据转换表,用于将逻辑地址转换为物理地址。

这个转换表需要存储在NAND Flash上,如果在意外掉电的情况下没有及时保存,就会导致数据混乱,甚至导致SSD无法正常工作。

为了解决这个问题,大多数SSD都配备了电容,在意外掉电时,电容会提供短暂的电力,让SSD控制器有时间将FTL表保存到NAND Flash上,从而避免数据丢失。

● 主板

意外掉电还会对主板造成潜在的伤害。掉电前后产生的电涌和电流波动可能会损坏主板上的元件,尤其是劣质主板和电源更容易受到影响。

因此,选择高质量的电源和主板非常重要。

总的来说,按住电源键强制关机对硬件本身不会造成损伤,但可能会导致数据丢失或文件损坏。

意外掉电则可能会对SSD和主板造成潜在的风险,因此需要选择高质量的硬件,并做好数据备份工作。

建议

1️⃣尽量避免使用按住电源键强制关机的方式,除非电脑完全卡死无法正常关机。

2️⃣在进行重要工作时,记得定期保存数据,避免数据丢失。

3️⃣选择高质量的电源和主板,并注意电源线的质量,避免意外掉电。

4️⃣定期对电脑进行清理和维护,确保硬件处于良好的运行状态。

PHP比Java的开发效率高在哪?这两种编程语言,程序员要怎么选?

thbcm阅读(290)

在Web开发的世界里,选对编程语言至关重要,它可能会对你的项目成败产生重大影响。

PHP和Java是这个领域的两大巨头。它们各有千秋,选择哪一个,得看你的项目需求、团队技能和性能预期。

这篇文章会带你了解PHP和Java的对比,探讨它们的主要特点、差异和适用场景,帮你做出明智的选择。

了解PHP和Java



在深入比较之前,我们先来简单了解一下PHP和Java。

PHP是一种专为Web开发设计的服务器端脚本语言。
它以用户友好著称,无论是新手还是老手,都能轻松上手。PHP擅长制作动态网页,并且能很好地融入HTML。

Java是一种高级的、面向对象的编程语言,以其灵活性和多功能性著称,适用于多个领域。

它的应用不仅限于Web开发,还包括移动应用开发(尤其是Android)、桌面应用和企业级软件解决方案。

深入对比PHP和Java



接下来,我们来详细对比一下PHP和Java在性能、易用性、社区支持等方面的表现。

通过这些关键因素的对比,你可以更好地决定哪种语言更适合你的Web开发需求。

性能对Web开发至关重要,它直接影响网站或应用的运行速度和用户体验。

1.性能对比

方面 PHP Java

速度

PHP是解释型语言,可能比Java慢。但PHP 7及之后的版本性能有显著提升。

Java编译成字节码,在JVM上运行,执行速度更快。

可扩展性

PHP适合小到中等规模的Web应用。对于大型复杂项目,性能可能是个问题。

Java以可扩展性著称,适合处理大型、高流量的企业级应用。

Java的编译特性和JVM执行提供了更好的性能,适合复杂项目,确保即使在高流量的企业级应用中也能提供流畅的用户体验。

易用性很重要,尤其是对于新手或希望快速开发的开发者。

2.易用性对比

方面 PHP Java

语法

PHP语法简单直观,新手容易上手。

Java语法更复杂,对新手来说可能有点难。

学习曲线

PHP学习曲线平缓,开发者可以快速开始开发Web应用。

Java的学习曲线较陡,尤其是对编程新手。

开发速度

PHP代码简洁,内置Web开发特性,开发速度快。

Java代码更严格,需要更详细的代码,开发速度可能较慢。

PHP的易用性、平缓的学习曲线和快速的开发速度,使其成为许多Web开发者的首选。

社区支持和库的可用性对于提高开发效率至关重要。

3.社区支持和库对比

方面 PHP Java

社区规模

PHP有庞大的活跃社区,提供了丰富的资源和支持论坛。

Java的社区更大,提供广泛的支持和众多的库和框架。

库/框架

PHP有Laravel、Symfony等流行框架,以及多种库。

Java有Spring、Hibernate、Apache Struts等众多库和框架,适合各种项目需求。

Java的庞大社区和丰富的库和框架生态系统,为开发者提供了无与伦比的支持和资源。

安全性在Web开发中至关重要,任何安全漏洞都可能导致严重问题。

4.安全特性对比

方面 PHP Java

内置安全性

PHP提供输入验证等功能和安全库。

Java的严格类型系统和强大的安全特性使其更安全。

漏洞

PHP应用更容易受到SQL注入和XSS等Web攻击。

Java应用通常对Web攻击的抵抗力更强。

Java的严格类型、强大的安全特性和出色的性能,使其成为Web应用开发的更安全、更高效的选择。

内存使用对Web开发至关重要,它影响Web应用的扩展性和运行效率。

5.内存消耗对比

方面 PHP Java

内存消耗

PHP消耗的内存较少,适合小型项目和共享托管环境。

Java通常需要更多内存,更适合专用服务器。

  PHP的低内存消耗使其成为小型项目和共享托管环境的高效、经济的选择。

在选择Web开发的高级编程语言时,成本是一个重要因素,因为它会影响项目的总体预算。

6.成本对比

方面 PHP Java

开发成本

PHP语法简单直观,新手容易上手。

Java开发可能需要更高的初始投资。

托管成本

PHP托管成本较低,可以在共享托管计划上运行。

Java托管成本较高,通常需要专用服务器资源。

许可

PHP是开源的,免费使用。

Java也是开源的,但某些企业级功能可能需要许可。

PHP的低开发成本、高效的开发流程和实惠的托管选项,使其成为许多项目的经济选择。

PHP和Java的适用场景



PHP适用场景

1️⃣适合开发小型到中型的Web应用和网站。

2️⃣常用于创建动态网页和内容管理系统,如WordPress和Drupal。

3️⃣适合构建电子商务网站和在线表单。

4️⃣适合快速原型制作和快速开发基于Web的项目。

Java适用场景

1️⃣适合大型、企业级应用,这些应用需要处理高流量和复杂需求。

2️⃣常用于Web开发服务和服务器端应用。

3️⃣是Android应用开发的编程语言,对移动应用开发者至关重要。

4️⃣用于构建复杂的系统,如银行软件、航空公司预订系统和数据中心。

总之,PHP和Java各有千秋,选择哪个,得看你的项目需求、团队技能和预算。

无论你选择PHP还是Java,它们都是最受欢迎的编程语言,在不断发展的开发领域中扮演着重要角色,满足各种项目和需求。

Go vs Rust全面对比:谁才是2024年系统编程语言的王者?

thbcm阅读(304)

在当今的软件开发领域,系统编程语言的竞争愈发激烈。Go和Rust这两位重量级选手凭借各自的优势,在性能、安全性和易用性上展开了一场精彩的角逐。

究竟谁才是你的最佳选择?让我们深入探讨这两款语言的优劣,以帮助你做出明智的决策。

Go:简洁高效,云端霸主

Go旨在解决系统编程的复杂性,追求简洁性和可扩展性。它在Web开发、微服务和云计算领域表现出色,成为构建现代应用程序的热门选择。

● 核心优势

1.易学易用

Go的语法简洁明了,学习曲线平缓,即使是初学者也能快速上手。

2.并发性能

Go的goroutines实现了轻量级的并发,轻松构建高性能并发应用程序,尤其适合处理高流量的Web服务和云应用。

3.内置垃圾回收

Go的自动内存管理机制简化了开发过程,无需手动管理内存,降低了内存泄漏的风险。

4.庞大生态系统

Go拥有丰富成熟的库和工具,例如Docker和Kubernetes,为开发者提供了强大的支持。

Rust:内存安全,性能王者

Rust旨在解决内存安全和并发问题。

它在系统编程领域声名远播,凭借对内存使用精细控制和无与伦比的性能,成为构建高性能、低延迟系统的利器。

● 核心优势

1.内存安全

Rust采用所有权和借用系统,强制执行内存安全规则,杜绝空指针等内存错误,确保程序的稳定性和可靠性。

2.极致性能

Rust的手动内存管理和零开销抽象,使其性能接近C/C++,适合构建对性能要求苛刻的应用程序,如游戏引擎和实时系统。

3.安全并发

Rust通过所有权和借用系统实现安全并发,避免数据竞争和死锁等并发问题,提升了代码的健壮性。

4.不断壮大的生态系统

Rust的生态系统正在蓬勃发展,涵盖了系统编程、嵌入式开发和游戏开发等多个领域。

Go和Rust的差异


1.内存管理

Go采用垃圾回收机制,简化了开发,但可能引入性能问题。Rust则通过所有权和借用系统实现手动内存管理,确保性能和安全性,但也增加了学习难度。

2.学习曲线

Go的语法简洁易懂,学习曲线平缓。Rust 则拥有更复杂的语法和所有权机制,学习曲线相对陡峭。

3.并发模型

Go的goroutines实现了轻量级并发,易于使用。Rust通过所有权和借用系统实现安全并发,虽然更安全,但实现难度更高。

4.生态系统

Go拥有更庞大和成熟的生态系统,特别是在Web开发和云计算领域。Rust的生态系统正在快速发展,在系统编程和嵌入式开发领域优势明显。

应用场景

1.Web开发

Go的简洁语法、内置HTTP支持和丰富的框架使其成为Web开发的理想选择,特别适合构建RESTful API和微服务。

2.系统编程

Rust的内存安全、性能和低级控制使其成为系统编程的首选,适用于操作系统、编译器和嵌入式系统等领域。

3.云计算

Go的并发模型和强大的工具使其适合构建云原生应用程序和微服务。

4.游戏开发

Rust的性能和内存安全使其成为游戏开发的有力竞争者,适用于游戏引擎和实时系统。

5.DevOps 和工具

Go和Rust都在DevOps工具领域有广泛的应用,可以用于构建CI/CD管道、监控工具和基础设施管理工具。

性能对比

Go和Rust在性能方面表现出色,但Rust在CPU密集型任务中略胜一筹。

Go的垃圾回收机制在高负载情况下可能会导致性能下降,而Rust的手动内存管理则确保了更高的性能和可预测性。

开发者体验

Go的错误处理机制简洁清晰,但可能略显冗长。Rust的错误处理模型更加灵活高效,但需要更深入的理解。

Go的工具和文档更加完善,学习和使用起来更加方便。Rust的工具和文档同样出色,但由于语言复杂性,学习曲线相对更陡峭。

Go和Rust都是优秀的系统编程语言,各有优劣。

Go更适合构建云原生应用程序、微服务和Web服务,而Rust更适合构建对性能和内存安全要求极高的系统级应用程序。

Go和Rust都拥有充满活力的社区,不断发展和改进。Go将继续保持在云计算领域的领先地位,而Rust则将继续在系统编程领域展现其优势。

最终选择哪种语言取决于你的具体需求和项目特点。

新入职或转岗程序员的项目开发上手指南

thbcm阅读(292)

对于许多新入职或转岗的程序员来说,快速上手新项目是一项挑战。面对陌生的代码库、复杂的业务逻辑和庞大的项目规模,他们常常感到无从下手。作为一名资深的IT从业者,我曾多次面临这样的挑战,并总结出了一套有效的“快速上手”方法,希望能帮助大家更快地融入新项目,成为一名合格的开发者。

一、以用户视角深入理解业务

重要性:在接触项目代码之前,首先要了解项目的功能,即项目是做什么的。最佳的方式是将自己置于普通用户的角色,去体验项目提供的服务。例如,如果项目是一个电商平台,那么你可以浏览商品、加入购物车、进行支付,完整地体验购物流程。通过这种方式,你能从用户的角度理解项目,了解用户的需求以及项目的整体逻辑。

操作步骤

  1. 体验项目服务:将自己置于普通用户的角色,完整地体验项目提供的服务。
  2. 记录主要功能:用笔记本记录下项目的主要功能,并进行分类整理,如用户管理、商品管理、订单管理等。

示例

  • 电商平台:浏览商品、加入购物车、进行支付,体验整个购物流程。
  • 记录内容:用户管理、商品管理、订单管理等。

二、探索项目架构,了解技术细节

重要性:项目文档是了解项目架构和技术细节的关键途径。仔细阅读项目文档,可以帮助你快速掌握项目的整体设计思路以及代码实现的细节。

关键内容

  1. 系统架构图:展示项目的整体架构,包括各个模块之间的交互关系以及使用的技术栈。
  2. 流程图:展示项目的业务流程以及各个环节之间的逻辑关系。
  3. 数据库设计文档:展示项目的数据库设计,包括表结构、字段类型、索引设计等。

操作步骤

  1. 阅读项目文档:仔细阅读系统架构图、流程图和数据库设计文档。
  2. 记录关键信息:记录系统架构、业务流程和数据库设计的关键信息。

示例

  • 系统架构图:了解各个模块之间的交互关系和技术栈。
  • 流程图:了解业务流程和逻辑关系。
  • 数据库设计文档:了解表结构、字段类型和索引设计。

三、跟踪代码调用,定位关键代码

重要性:通过浏览项目中的页面,你可以找到对应的代码实现,并分析代码的功能。例如,点击某个按钮会触发一个API请求,你可以通过浏览器的开发者工具查看API的URL地址以及请求参数和返回值。然后,在项目代码中找到对应的接口实现,了解代码的功能和逻辑。

操作步骤

  1. 使用开发者工具:通过浏览器的开发者工具查看API的URL地址、请求参数和返回值。
  2. 定位代码实现:在项目代码中找到对应的接口实现,并记录关键信息。

示例

  • API请求:点击按钮,查看API的URL地址、请求参数和返回值。
  • 代码实现:在项目代码中找到对应的接口实现,记录关键信息。

四、探索数据库结构,梳理数据关系

重要性:数据库是项目的重要组成部分,了解数据库结构和数据关系可以帮助你更好地理解项目的业务逻辑。

操作步骤

  1. 使用数据库管理工具:使用数据库管理工具(如Navicat)查看数据库表结构。
  2. 绘制ER图:绘制ER图(Entity-Relationship Diagram),梳理各个表之间的关联关系。
  3. 关注核心功能:在初期,先关注核心功能相关的表以及关键字段。

示例

  • 数据库管理工具:使用Navicat查看数据库表结构。
  • ER图:绘制ER图,梳理表之间的关联关系。
  • 核心功能:关注核心功能相关的表和关键字段。

五、从简单到复杂,挑战BUG修复

重要性:修复BUG是快速熟悉项目代码的有效方法。通过修改代码解决问题,可以帮助你快速理解代码的功能和逻辑。

操作步骤

  1. 从简单BUG开始:从简单的BUG如页面样式问题、文案错误等开始。
  2. 逐步挑战复杂BUG:随着对代码的熟悉程度提高,逐渐挑战更复杂的BUG,如逻辑错误、性能问题等。

示例

  • 简单BUG:修复页面样式问题、文案错误等。
  • 复杂BUG:修复逻辑错误、性能问题等。

六、梳理业务流程,绘制流程图

重要性:通过前面的步骤,你已经对项目的业务逻辑、代码实现和数据结构有了初步的了解。接下来,可以尝试自己梳理项目的业务流程,并绘制流程图。推荐使用在线绘图工具,如draw.io和processon,它们操作简单,功能强大,并且可以自动保存绘制的流程图。

操作步骤

  1. 梳理业务流程:根据前面的了解,梳理项目的业务流程。
  2. 绘制流程图:使用在线绘图工具绘制流程图,方便后续查阅和回顾。

示例

  • 业务流程:梳理项目的业务流程。
  • 流程图工具:使用draw.io和processon绘制流程图。

七、定位线上问题,提升实战经验

重要性:定位线上问题是考验开发者实战能力的重要环节。它需要你结合业务逻辑、代码实现、数据库数据以及日志信息,综合分析问题原因,并找到解决方案。

操作步骤

  1. 从简单问题开始:从简单的线上问题如页面显示错误、数据错误等开始。
  2. 逐步挑战复杂问题:随着对项目的深入了解,逐步挑战更复杂的线上问题。

示例

  • 简单问题:修复页面显示错误、数据错误等。
  • 复杂问题:解决更复杂的线上问题。

八、开发新功能,掌握项目全貌

重要性:当你可以熟练地修复BUG并定位线上问题后,你已经具备了开发新功能的能力。在开发新功能之前,需要仔细阅读需求文档,了解功能需求,并根据项目的开发规范编写代码。在开发新功能的过程中,你会遇到各种各样的问题,并通过解决这些问题,不断提升自己的技能和经验。

操作步骤

  1. 阅读需求文档:仔细阅读需求文档,了解功能需求。
  2. 编写代码:根据项目的开发规范编写代码。
  3. 解决开发问题:在开发过程中解决遇到的问题,不断提升自己的技能和经验。

示例

  • 需求文档:仔细阅读需求文档,了解功能需求。
  • 开发规范:根据项目的开发规范编写代码。
  • 开发问题:解决开发过程中遇到的问题。

快速上手一个新项目,需要你不断积累经验,并掌握一定的技巧。希望这篇文章能为你提供一些帮助,让你在面对新的挑战时,能够更加自信地应对。最后,祝愿你早日成为一名优秀的开发者,并在IT行业取得成功!

AI写代码靠谱吗?不会编程者如何利用AI高效开发

thbcm阅读(282)

随着人工智能技术的迅猛发展,AI代码生成工具如雨后春笋般涌现,GitHub Copilot、ChatGPT、Bard等工具层出不穷。它们能够帮助用户快速生成代码,甚至完成一些简单的编程任务,这引发了众多非编程专业人士的思考:不会编程,直接用AI写代码靠谱吗?

答案并非绝对,需视具体情况而定。对于一些简单的脚本任务,如自动化小任务等,AI确实能大显身手。你可以借助AI工具生成代码模板,再根据自身需求进行修改,从而节省大量时间和精力。目前,AI代码生成工具已支持PythonJavaLua以及ReactVue等众多编程语言和框架,覆盖了大部分常用场景。

然而,对于复杂项目,涉及数据库、前后端交互、安全性等方面时,仅依赖AI风险巨大。AI生成的代码可能存在效率低下、潜在bug,或无法完全满足需求等问题。这是因为AI难以完全理解你的需求,或你的需求难以清晰表达。例如,若想用AI生成电商网站代码,需详细告知商品类别、支付方式、配送方式、用户注册流程等信息,描述不详可能导致功能不完善、漏洞百出的网站。

因此,即使不会编程,也应学习基本代码概念和语法。这就像学开车,即使有自动驾驶功能,也需了解基本驾驶操作和交通规则,以便紧急情况下正确判断。掌握代码概念能助你理解AI生成代码,判断正确性及修改方法。事实上,经验丰富的开发者也会用AI提高效率和质量,AI可助其快速生成代码框架、进行代码审查、自动修复Bug,但最终开发者仍需对代码负责,确保符合功能、性能和安全标准。

那么,如何更好地利用AI辅助编程呢?以下是一些关键建议:

选择合适的AI工具

市场上AI代码生成工具众多,各有优劣。初学者可选交互友好的ChatGPT,有一定编程基础者则可尝试GitHub Copilot等。

国产 AI 编程工具推荐

明确需求

使用AI生成代码前,需明确并详细描述需求,确保AI生成代码符合预期。

仔细审查代码

AI生成代码并非完美,需仔细审查其正确性、效率和安全性,必要时进行修改优化。

持续学习

即使使用AI工具,也需持续学习编程知识,以更好地理解代码,提高质量,应对复杂场景。

总之,AI可在一定程度上助你编写代码,但最终责任和控制权在你手中。将编程知识与AI工具结合,才能在开发中取得更佳效果。需强调的是,AI代码生成工具只是辅助,无法完全取代人类开发者。

编程狮反诈声明:切勿通过非官方渠道开通VIP,谨防被骗!

thbcm阅读(362)

 近期,编程狮发现不法分子在闲鱼等第三方电商平台上,以低价销售编程狮VIP会员进行诈骗。其欺诈手法为:不法分子先以远低于官方价格的”优惠价”诱导用户付款,提供所谓代充服务,其实是在为用户开通VIP会员后,却立即向Apple公司申请退款。一旦退款成功,官方核实苹果账单后,用户的VIP会员资格将被自动取消,导致用户既损失了购买资金,又无法继续使用VIP服务。


此类行为不仅严重损害了广大用户的合法权益,也给平台造成巨大经济损失,严重扰乱了平台正常的运营秩序。

现郑重声明如下:

一、购买须知

编程狮VIP会员资格仅可通过以下官方渠道获取:

1.App内购买

2.编程狮官方淘宝店

3.w3cschool编程狮官网:(w3cschool.cn)

4.w3cschool编程狮手机端官网:(m.w3cschool.cn)

二、处理措施

1. 所有通过非官方渠道购买的VIP会员资格均属无效,VIP会员将会被取消,严重违规将会导致相关账号被永久封禁且不予申诉;

2. 为保障平台及正常购买用户的权益,已成立专项打击小组,依法严厉打击此类违法行为;

3. 即日起启动全平台账号安全排查,加强系统安全机制,持续完善反欺诈策略。

三、禁止行为

以下行为均属违规,一经发现,将封禁相关账号或取消VIP会员:

1.在第三方平台购买VIP会员

2.参与账号合租、共享使用

3.在未经授权的渠道进行VIP会员交易

4.以任何形式转借、出租、出售账号

四、维权指引

如您已在第三方平台购买VIP会员,为保护您的合法权益,请立即采取以下措施:

1. 完整保存证据:

· 与卖家的全部聊天记录

· 转账记录及交易凭证

· 相关截图等电子证据

2. 及时向交易平台(如闲鱼)投诉举报并提交证据,申请交易退款;

3. 向我们的客服团队反馈,提供相关证据,我们将协助您维护权益;

4. 如涉及金额较大,建议及时向公安机关报案,我们将全力配合调查。

此类网络诈骗行为已涉嫌违反《中华人民共和国刑法》相关规定。对于从事此类违法犯罪活动的个人或团伙,我们将采取一切必要的法律手段追究其法律责任。

温馨提醒: 亲爱的用户,互联网世界良莠不齐,请您务必提高警惕:

1.切勿相信任何第三方平台的低价VIP会员促销,谨防上当受骗

2.请勿将账号借给他人使用,也不要购买、租用他人账号,以免造成不必要的损失

3.账号安全责任重大,一旦账号被封禁,您的学习进度、收藏内容等都将无法找回

特此通知

编程狮安全中心

2024年12月9日

HTML+CSS+JS制作圣诞祝福网页教程(附源码)

thbcm阅读(278)

简介

在这个教程中,我们将学习如何使用HTML、CSS和JavaScript来创建一个充满节日气氛的圣诞祝福网页。这个网页将包括一个动态的圣诞树、飘落的雪花和闪烁的装饰物,以及一个显示“圣诞快乐!”的消息。

准备工作

在开始之前,请确保你有基本的HTMLCSSJavaScript知识。你将需要一个文本编辑器来编写代码,比如Notepad++、Sublime Text、Visual Studio Code,或者免费AI编程助手豆包 MarsCode

如果你不具备这些基础请移步 ——&前端开发:零基础入门到项目实战

步骤1:创建HTML结构

首先,我们需要创建网页的基本结构。打开你的文本编辑器,输入以下代码:

<!DOCTYPE HTML>
<html>
<head>
    <title>圣诞祝福 - 编程狮(w3cschool.cn)</title>
    <meta charset="utf-8">
</head>
<body>
    <div class="app">
        <!-- 圣诞树将在这里 -->
    </div>
    <div class="message">圣诞快乐!</div> <!-- 消息文本 -->
</body>
</html>

这段代码定义了网页的标题、字符集和基本的HTML结构。

步骤2:添加CSS样式

接下来,我们将添加CSS来设计网页的外观。在<head>标签内添加<style>标签,并输入以下代码:

/* 设置整个页面的基本样式 */
html, body {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    border: 0;
    background: #000;
    overflow: hidden;
    position: relative;
}


/* 应用程序容器的样式 */
.app {
    text-align: center;
    margin: 10px;
}


/* 圣诞树的样式 */
.christmas-tree {
    position: absolute;
    width: 200px;
    height: 300px;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}


/* 圣诞树枝干的通用样式 */
.christmas-tree .branch {
    position: absolute;
    background-color: #008000;
    border-radius: 50% 50% 0 0;
}


/* 圣诞树树干的样式 */
.christmas-tree .trunk {
    width: 40px;
    height: 80px;
    background-color: #8B4513;
    position: absolute;
    bottom: 0;
    left: 80px;
    border-radius: 5px;
}


/* 圣诞树星星的样式 */
.christmas-tree .star {
    position: absolute;
    top: -20px;
    left: 80px;
    width: 40px;
    height: 40px;
    background-color: gold;
    clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);
    animation: star-twinkle 2s infinite alternate;
}


/* 圣诞树装饰物的样式 */
.christmas-tree .ornament {
    position: absolute;
    width: 20px;
    height: 20px;
    background-color: red;
    border-radius: 50%;
    box-shadow: 0 0 10px rgba(255, 0, 0, 0.5);
    animation: ornament-twinkle 2s infinite alternate;
}


/* 消息文本的样式 */
.message {
    position: absolute;
    top: 40%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: white;
    font-size: 48px;
    font-family: Arial, sans-serif;
    text-shadow: 0 0 10px white;
    animation: fadeInOut 4s infinite;
}


/* 雪花效果 */
.snowflake {
    position: absolute;
    width: 10px;
    height: 10px;
    background-color: white;
    border-radius: 50%;
    opacity: 0.8;
    animation: fall linear infinite;
}


/* 动画 */
@keyframes star-twinkle {
    0% { transform: scale(1); }
    100% { transform: scale(1.2); }
}


@keyframes ornament-twinkle {
    0% { transform: scale(1); }
    100% { transform: scale(1.2); }
}


@keyframes fall {
    0% { top: -10px; opacity: 0.8; }
    100% { top: 100vh; opacity: 0; }
}


@keyframes fadeInOut {
    0%, 100% { opacity: 0; }
    50% { opacity: 1; }
}

这段代码定义了网页的所有视觉元素,包括圣诞树、装饰物、星星、雪花和消息文本的样式。

步骤3:构建圣诞树

<div class="app">内添加圣诞树的结构:

<div class="christmas-tree">
    <div class="branch top"></div> <!-- 顶部枝干 -->
    <div class="branch middle"></div> <!-- 中部枝干 -->
    <div class="branch bottom"></div> <!-- 底部枝干 -->
    <div class="trunk"></div> <!-- 树干 -->
    <div class="star"></div> <!-- 星星 -->
    <div class="ornament" style="top: 60px; left: 60px;"></div> <!-- 装饰物1 -->
    <div class="ornament" style="top: 100px; left: 140px;"></div> <!-- 装饰物2 -->
    <div class="ornament" style="top: 140px; left: 100px;"></div> <!-- 装饰物3 -->
    <div class="ornament" style="top: 180px; left: 180px;"></div> <!-- 装饰物4 -->
    <div class="ornament" style="top: 220px; left: 20px;"></div> <!-- 装饰物5 -->
</div>

这段代码定义了圣诞树的各个部分,包括枝干、树干、星星和装饰物。

步骤4:添加 JavaScript

最后,我们需要添加一些 JavaScript 代码来创建飘落的雪花效果。在</body>标签之前添加以下代码:

<script>
    // 创建雪花
    function createSnowflakes(num) {
        for (let i = 0; i < num; i++) {
            const snowflake = document.createElement('div'); // 创建一个 div 元素
            snowflake.classList.add('snowflake'); // 添加雪花类
            snowflake.style.left = Math.random() * 100 + 'vw'; // 随机水平位置
            snowflake.style.animationDuration = Math.random() * 2 + 3 + 's'; // 随机动画持续时间
            document.body.appendChild(snowflake); // 将雪花添加到页面
        }
    }


    // 调用函数创建雪花
    createSnowflakes(100);
</script>

这段代码将创建100个雪花,并随机分布在页面上,模拟雪花飘落的效果。

完成

现在,你已经完成了圣诞祝福网页的制作。将你的代码保存为.html文件,然后用浏览器打开它,你就可以看到一个充满节日气氛的圣诞树和飘落的雪花了。你可以根据自己的喜好调整样式和动画,创造一个独一无二的圣诞祝福网页。祝你编程愉快!

最后附上完整代码:

<!DOCTYPE HTML>
<html>


<head>
    <title>圣诞祝福 - 编程狮(w3cschool.cn)</title>
    <meta charset="utf-8">
    <style>
        /* 设置整个页面的基本样式 */
        html,
        body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            border: 0;
            background: #000; /* 黑色背景 */
            overflow: hidden; /* 隐藏溢出内容 */
            position: relative; /* 使子元素可以相对于此元素定位 */
        }


        /* 应用程序容器的样式 */
        .app {
            text-align: center; /* 文本居中对齐 */
            margin: 10px; /* 外边距 */
        }


        /* 圣诞树的样式 */
        .christmas-tree {
            position: absolute; /* 绝对定位 */
            margin: 0; /* 没有外边距 */
            width: 200px; /* 宽度 */
            height: 300px; /* 高度 */
            top: 50%; /* 垂直居中 */
            left: 50%; /* 水平居中 */
            transform: translate(-50%, -50%); /* 精确居中 */
        }


        /* 圣诞树枝干的通用样式 */
        .christmas-tree .branch {
            position: absolute; /* 绝对定位 */
            background-color: #008000; /* 绿色背景 */
            border-radius: 50% 50% 0 0; /* 上半部分圆角 */
        }


        /* 顶部枝干的样式 */
        .christmas-tree .branch.top {
            width: 160px; /* 宽度 */
            height: 100px; /* 高度 */
            top: 0; /* 从顶部开始 */
            left: 20px; /* 从左边偏移 */
        }


        /* 中部枝干的样式 */
        .christmas-tree .branch.middle {
            width: 200px; /* 宽度 */
            height: 120px; /* 高度 */
            top: 100px; /* 从顶部偏移 */
            left: 0; /* 从左边开始 */
        }


        /* 底部枝干的样式 */
        .christmas-tree .branch.bottom {
            width: 240px; /* 宽度 */
            height: 140px; /* 高度 */
            top: 220px; /* 从顶部偏移 */
            left: -20px; /* 从左边偏移 */
        }


        /* 圣诞树树干的样式 */
        .christmas-tree .trunk {
            width: 40px; /* 宽度 */
            height: 80px; /* 高度 */
            background-color: #8B4513; /* 棕色背景 */
            position: absolute; /* 绝对定位 */
            bottom: 0; /* 从底部开始 */
            left: 80px; /* 从左边偏移 */
            border-radius: 5px; /* 圆角 */
        }


        /* 圣诞树星星的样式 */
        .christmas-tree .star {
            position: absolute; /* 绝对定位 */
            top: -20px; /* 从顶部偏移 */
            left: 80px; /* 从左边偏移 */
            width: 40px; /* 宽度 */
            height: 40px; /* 高度 */
            background-color: gold; /* 金色背景 */
            clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%); /* 星星形状 */
            animation: star-twinkle 2s infinite alternate; /* 闪烁动画 */
        }


        /* 圣诞树装饰物的样式 */
        .christmas-tree .ornament {
            position: absolute; /* 绝对定位 */
            width: 20px; /* 宽度 */
            height: 20px; /* 高度 */
            background-color: red; /* 红色背景 */
            border-radius: 50%; /* 圆形 */
            box-shadow: 0 0 10px rgba(255, 0, 0, 0.5); /* 发光效果 */
            animation: ornament-twinkle 2s infinite alternate; /* 闪烁动画 */
        }


        /* 星星闪烁动画 */
        @keyframes star-twinkle {
            0% {
                transform: scale(1); /* 初始大小 */
            }
            100% {
                transform: scale(1.2); /* 放大 */
            }
        }


        /* 装饰物闪烁动画 */
        @keyframes ornament-twinkle {
            0% {
                transform: scale(1); /* 初始大小 */
            }
            100% {
                transform: scale(1.2); /* 放大 */
            }
        }


        /* 雪花效果 */
        .snowflake {
            position: absolute; /* 绝对定位 */
            width: 10px; /* 宽度 */
            height: 10px; /* 高度 */
            background-color: white; /* 白色背景 */
            border-radius: 50%; /* 圆形 */
            opacity: 0.8; /* 透明度 */
            animation: fall linear infinite; /* 下落动画 */
        }


        /* 雪花下落动画 */
        @keyframes fall {
            0% {
                top: -10px; /* 从顶部开始 */
                opacity: 0.8; /* 透明度 */
            }
            100% {
                top: 100vh; /* 下落到屏幕底部 */
                opacity: 0; /* 透明度逐渐消失 */
            }
        }


        /* 消息文本的样式 */
        .message {
            position: absolute; /* 绝对定位 */
            top: 40%; /* 从顶部偏移 */
            left: 50%; /* 从左边偏移 */
            transform: translate(-50%, -50%); /* 精确居中 */
            color: white; /* 白色文字 */
            font-size: 48px; /* 字体大小 */
            font-family: Arial, sans-serif; /* 字体 */
            text-shadow: 0 0 10px white; /* 发光效果 */
            animation: fadeInOut 4s infinite; /* 渐隐渐现动画 */
        }


        /* 消息文本渐隐渐现动画 */
        @keyframes fadeInOut {
            0%, 100% {
                opacity: 0; /* 完全透明 */
            }
            50% {
                opacity: 1; /* 完全不透明 */
            }
        }
    </style>
</head>


<body>
    <div class="app">
        <div class="christmas-tree">
            <div class="branch top"></div> <!-- 顶部枝干 -->
            <div class="branch middle"></div> <!-- 中部枝干 -->
            <div class="branch bottom"></div> <!-- 底部枝干 -->
            <div class="trunk"></div> <!-- 树干 -->
            <div class="star"></div> <!-- 星星 -->
            <div class="ornament" style="top: 60px; left: 60px;"></div> <!-- 装饰物1 -->
            <div class="ornament" style="top: 100px; left: 140px;"></div> <!-- 装饰物2 -->
            <div class="ornament" style="top: 140px; left: 100px;"></div> <!-- 装饰物3 -->
            <div class="ornament" style="top: 180px; left: 180px;"></div> <!-- 装饰物4 -->
            <div class="ornament" style="top: 220px; left: 20px;"></div> <!-- 装饰物5 -->
        </div>
    </div>


    <div class="message">圣诞快乐!</div> <!-- 消息文本 -->


    <script>
        // 创建雪花
        function createSnowflakes(num) {
            for (let i = 0; i < num; i++) {
                const snowflake = document.createElement('div'); // 创建一个 div 元素
                snowflake.classList.add('snowflake'); // 添加雪花类
                snowflake.style.left = Math.random() * 100 + 'vw'; // 随机水平位置
                snowflake.style.animationDuration = Math.random() * 2 + 3 + 's'; // 随机动画持续时间
                document.body.appendChild(snowflake); // 将雪花添加到页面
            }
        }


        // 调用函数创建雪花
        createSnowflakes(100);
    </script>
</body>


</html>

更多实例分享

学C++还是学Java?做软件研发需掌握哪些知识和技能?

thbcm阅读(326)

每年秋招,不少人对软件研发领域充满兴趣。

那么,在求职软件研发岗位时我们需要掌握哪些关键的知识和技能,软件研发行业的当前状况和未来趋势如何呢?

今天,我们一起来梳理这个问题,希望这能为正在高校学习的同学们,以及那些考虑转行的朋友们提供一些参考。

-PART 01-


学C++还是Java?


这个话题非常经典,许多人在职业规划时都会遇到类似的疑问。

根据我们在实际工作中的经验以及多年来的行业观察,Java和C++都是具有广阔前景的编程语言,它们各自都有着良好的就业机会。

在大型软件系统的构建中,无论是前端还是后端,Java和C++都扮演着不可或缺的角色。

例如,安卓客户端应用和后端的Web服务器通常使用Java来开发,而Windows客户端程序和许多后端业务服务器则多采用C++来实现。Java还是大数据、云计算以及云原生技术(如微服务)的主流开发语言。

在我们的日常生活中,许多安卓手机上的手机应用,如QQ、桌面版微信、腾讯会议、企业微信、飞书、钉钉、阿里旺旺客户端等,都是用Java开发的。而像Chrome浏览器这样的Windows客户端软件,则是通过C++来实现的。

因此,无论你选择C++还是Java,都能找到适合自己的舞台,发挥自己的才能。



-PART 02-


Java的应用领域与使用场景


随着移动互联网的蓬勃发展,移动APP已经成为众多IT企业争夺市场的重要领域。这给作为安卓APP开发语言的Java带来了新的生机和活力。

目前,Java是构建大型Web系统后台业务的首选语言,像淘宝和京东等大型电商平台的服务器端都是使用Java来实现的。

在大数据和云计算领域,许多知名的开源框架,如Hadoop、Spark和OpenStack,都是基于Java开发的,使得Java成为大数据开发者青睐的语言之一。此外,随着云原生和微服务等新兴技术和框架的出现,Java也成为这些领域的主要战场。

Java运行在虚拟机上,具有独特的跨平台特性,并且拥有完善的异常处理机制,它能在程序异常时抛出异常,并将异常信息输出到日志中,帮助开发者快速定位问题。

Java还以其近乎完美的封装和多种成熟的框架而著称,例如Hibernate、MyBatis、SpringMVC、SpringBoot和SpringCloud等微服务框架。

与C++相比,Java具有更完善的内存管理机制,避免了C++中复杂的指针操作,使得Java的学习门槛相对较低,这也是许多人选择Java的重要原因。

从当前在校学生的选择来看,确实有更多的人倾向于学习Java。近几年在招聘C++开发者时,应聘者的数量明显减少,相较于Java开发者的招聘难度更大。这种趋势反映了Java在当前技术教育和职业发展中的流行度和重要性。

-PART 03-


C++的应用领域与使用场景


C++语言以其强大的功能和灵活性,不仅在PC端客户端程序的开发上占据重要地位,而且在服务器程序和后台业务服务器的开发上也扮演着关键角色。这些系统往往对性能和效率有着极高的要求,因此C++成为了首选语言。

C++拥有丰富的开源生态系统,提供了各种功能的开源库,但在软件框架方面,C++可能没有Java那样成熟和通用的框架选择。

C/C++的执行效率非常接近汇编语言,因此在需要执行高效率代码或算法的服务器端业务中,C++往往是更优的选择。

当前,PC端的客户端程序大多数都是使用C++或其他语言(如C#)开发的,而Java在这一领域的应用已经较少。在人工智能、机器学习、计算机视觉与图像识别、自动驾驶等对运行性能要求极高的新兴技术领域,C++因其高效率而成为首选开发语言。

尽管Python在某些场景下非常流行,但在这些对性能要求极高的领域,Python的运行效率往往无法满足需求。

因此,在各种大型系统中,无论是前端还是后端,C++都有着广泛的应用场景和巨大的市场需求。C++不仅是一种用途广泛、市场认可度高的主流开发语言,而且在特定领域内,其优势和重要性尤为突出。



在构建一个大型系统时,后端服务或组件可能部分由Java编写,部分由C++构建,这两种语言相互交织,没有清晰的分界线。它们通过通信和协作来实现共同的目标。

决定将哪种编程语言作为主要学习和发展的方向,不仅取决于个人对语言本身的兴趣,还取决于对语言所支持的技术领域的兴趣。这是一个需要综合考量的决定。

CSS手绘圣诞老人教程 – 创造节日气氛的网页设计技巧(附源码)

thbcm阅读(325)

在这篇文章中,我们将学习如何使用CSS来手绘一个圣诞老人的卡通形象。这不仅是一个有趣的练习,也是提升你CSS技能的好机会。通过本教程,你将学会如何使用CSS变量、伪元素、动画和媒体查询来创建一个生动的圣诞老人形象。如果你对CSS还不够熟悉,不妨先浏览一下编程狮上的相关课程,这将为你打下坚实的基础。

效果图:

准备工作

在开始之前,请确保你有一个现代浏览器和一个代码编辑器。你可以直接在浏览器的开发者工具中尝试这些代码,或者创建一个HTML文件来保存你的代码。推荐使用免费AI编程助手——豆包 MarsCode,能大大提升我们的开发效率。

HTML结构

首先,我们需要创建一个HTML结构来作为圣诞老人形象的基础。我们将使用一个div元素作为画布,然后在这个画布中添加圣诞老人的各个部分。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS手绘圣诞老人 - 编程狮(w3cschool.cn)</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="canvas" role="img" aria-label="一个站在雪地小山上的圣诞老人卡通形象。">
        <!-- 圣诞老人的各个部分 -->
        <div class="hand"></div><!-- 左手 -->
        <div class="hand"></div><!-- 右手 -->
        <div class="arms"></div><!-- 手臂 -->
        <div class="leg"></div> <!-- 左腿 -->
        <div class="leg"></div> <!-- 右腿 -->
        <div class="body"> <!-- 圣诞老人的身体 -->
            <div class="belt"></div> <!-- 圣诞老人的腰带 -->
        </div>
        <div class="beard"></div> <!-- 圣诞老人的胡子 -->
        <div class="head"> <!-- 圣诞老人的头部 -->
            <div class="cheek"></div><!-- 左脸颊 -->
            <div class="cheek"></div> <!-- 右脸颊 -->
            <div class="eye"></div> <!-- 左眼 -->
            <div class="eye"></div> <!-- 右眼 -->
            <div class="mustache"></div> <!-- 左小胡子 -->
            <div class="mustache"></div><!-- 右小胡子 -->
            <div class="hat"></div> <!-- 圣诞老人的帽子 -->
        </div>
    </div>
</body>
</html>

CSS样式

接下来,我们将使用CSS来定义圣诞老人的形象。我们将使用CSS变量来定义颜色,这使得我们能够轻松地更改颜色而不需要修改多个属性。

:root {
    --skin: PeachPuff;
    /* 圣诞老人皮肤颜色 */
    --eyes: Black;
    /* 圣诞老人眼睛颜色 */
    --cheeks: Salmon;
    /* 圣诞老人脸颊颜色 */
    --beard: GhostWhite;
    /* 圣诞老人胡子颜色 */
    --mustache: white;
    /* 圣诞老人小胡子颜色 */
    --suit: Tomato;
    /* 圣诞老人衣服颜色 */
    --belt: #363636;
    /* 圣诞老人腰带颜色 */
    --belt-buckle: gold;
    /* 圣诞老人腰带扣颜色 */
}

全局样式

我们设置背景为天蓝色,并添加雪花效果,以营造圣诞氛围。

body {
    background: SkyBlue;
    /* 背景颜色为天蓝色 */
    overflow: hidden;
    /* 隐藏溢出的内容 */
    background-image: radial-gradient(circle at 50% 50%, white 2.5%, transparent 0), radial-gradient(circle at 30% 90%, white 1.5%, transparent 0), radial-gradient(circle at 70% 10%, white 1%, transparent 0), radial-gradient(circle at 10% 40%, white 1%, transparent 0);
    /* 添加雪花背景效果 */
    background-size: 45vmin 35vmin, 50vmin 70vmin, 60vmin 50vmin, 65vmin 60vmin;
    /* 设置背景图像大小 */
    background-position: 0 0;
    /* 设置背景图像位置 */
    animation: snow infinite 7s linear;
    /* 添加雪花飘落动画 */
}

画布样式

我们将画布居中,并设置其大小和宽高比。

.canvas {
    width: 60vmin;
    /* 设置画布宽度 */
    aspect-ratio: 1;
    /* 设置画布宽高比为1:1 */
    position: absolute;
    /* 绝对定位 */
    top: 50%;
    /* 距离顶部50% */
    left: 50%;
    /* 距离左侧50% */
    transform: translate(-50%, -50%);
    /* 将画布居中 */
}
.canvas::before {
    content: "";
    /* 伪元素内容为空 */
    display: block;
    /* 显示为块级元素 */
    position: absolute;
    /* 绝对定位 */
    top: 90%;
    /* 距离顶部90% */
    left: 50%;
    /* 距离左侧50% */
    width: 200vmax;
    /* 设置宽度 */
    height: 200vmax;
    /* 设置高度 */
    background: white;
    /* 背景颜色为白色 */
    transform: translate(-50%, 0) rotate(1deg);
    /* 将伪元素居中并旋转1度 */
    border-radius: 100% / 20%;
    /* 设置椭圆形边框 */
}

圣诞老人形象

我们将使用多个div元素来构建圣诞老人的各个部分,包括头部、眼睛、脸颊、胡子、帽子、身体、腰带、手臂、手和腿。

/* 圣诞老人头部样式 */
.head {
    --positionX: 27%;
    /* 定义眼睛和脸颊的水平位置 */
    --positionY: 63%;
    /* 定义眼睛和脸颊的垂直位置 */
    position: absolute;
    /* 绝对定位 */
    top: 10%;
    /* 距离顶部10% */
    left: 50%;
    /* 距离左侧50% */
    border-radius: 50%;
    /* 设置圆形边框 */
    width: 25%;
    /* 设置宽度 */
    height: 25%;
    /* 设置高度 */
    transform: translate(-50%, 0);
    /* 将头部居中 */
    background: var(--skin);
    /* 设置背景颜色为皮肤色 */
        }


.eye {
    position: absolute;
    /* 绝对定位 */
    top: var(--positionY);
    /* 使用定义的垂直位置 */
    left: var(--positionX);
    /* 使用定义的水平位置 */
    width: 12%;
    /* 设置宽度 */
    height: 12%;
    /* 设置高度 */
    background: var(--eyes);
    /* 设置背景颜色为黑色 */
    border-radius: 50%;
    /* 设置圆形边框 */
    animation: blink 5s infinite linear;
    /* 添加眨眼动画 */
        }


.eye+.eye {
    left: auto;
    /* 取消之前的left属性 */
    right: var(--positionX);
    /* 设置右侧眼睛的位置 */
        }


.cheek {
    position: absolute;
    /* 绝对定位 */
    top: calc(var(--positionY) + 7%);
    /* 计算脸颊的垂直位置 */
    left: calc(var(--positionX) - 12%);
    /* 计算脸颊的水平位置 */
    width: 20%;
    /* 设置宽度 */
    height: 12%;
    /* 设置高度 */
    background: var(--cheeks);
    /* 设置背景颜色为脸颊色 */
    border-radius: 50%;
    /* 设置圆形边框 */
        }


.cheek+.cheek {
    left: auto;
    /* 取消之前的left属性 */
    right: calc(var(--positionX) - 12%);
    /* 设置右侧脸颊的位置 */
        }


        /* 圣诞老人胡须和小胡子样式 */
.beard {
    position: absolute;
    /* 绝对定位 */
    top: 10%;
    /* 距离顶部10% */
    left: 50%;
    /* 距离左侧50% */
    width: 30%;
    /* 设置宽度 */
    height: 40%;
    /* 设置高度 */
    background: var(--beard);
    /* 设置背景颜色为胡子色 */
    transform: translate(-50%, 0);
    /* 将胡须居中 */
    border-radius: 100% / 120% 120% 80% 80%;
    /* 设置不规则形状的边框 */
        }


.mustache {
    position: absolute;
    /* 绝对定位 */
    top: 88%;
    /* 距离顶部88% */
    left: 52%;
    /* 距离左侧52% */
    width: 40%;
    /* 设置宽度 */
    height: 40%;
    /* 设置高度 */
    background: var(--mustache);
    /* 设置背景颜色为小胡子色 */
    border-radius: 100% 10% 100% 0;
    /* 设置不规则形状的边框 */
    transform-origin: top right;
    /* 设置变换原点 */
    transform: translate(-100%, 0) rotate(25deg);
    /* 将小胡子向左旋转25度 */
    animation: moveMustache 7s infinite linear;
    /* 添加小胡子移动动画 */
        }


.mustache+.mustache {
    left: 48%;
    /* 设置左侧小胡子的位置 */
    border-radius: 10% 100% 0 100%;
    /* 设置不规则形状的边框 */
    transform-origin: top left;
    /* 设置变换原点 */
    transform: rotate(-25deg);
    /* 将小胡子向右旋转25度 */
    animation: moveMustache2 7s infinite linear;
    /* 添加小胡子移动动画 */
        }


        /* 圣诞老人帽子样式 */
.hat {
    position: absolute;
    /* 绝对定位 */
    width: 98%;
    /* 设置宽度 */
    height: 80%;
    /* 设置高度 */
    background: var(--suit);
    /* 设置背景颜色为衣服色 */
    border-radius: 100% 20% 0 0;
    /* 设置不规则形状的边框 */
    top: -40%;
    /* 距离顶部-40% */
    left: 50%;
    /* 距离左侧50% */
    transform: translate(-50%, 0) rotate(1deg);
    /* 将帽子居中并旋转1度 */
        }


.hat::before {
    content: "";
    /* 伪元素内容为空 */
    display: block;
    /* 显示为块级元素 */
    position: absolute;
    /* 绝对定位 */
    bottom: -17%;
    /* 距离底部-17% */
    left: -5%;
    /* 距离左侧-5% */
    width: 110%;
    /* 设置宽度 */
    height: 40%;
    /* 设置高度 */
    border-radius: 100% / 50%;
    /* 设置椭圆形边框 */
    transform: rotate(-2deg);
    /* 旋转-2度 */
    background: radial-gradient(200% 100% at 50% 100%, #0000 30%, var(--mustache) 31%);
    /* 设置径向渐变背景 */
        }


.hat::after {
    content: "";
    /* 伪元素内容为空 */
    display: block;
    /* 显示为块级元素 */
    position: absolute;
    /* 绝对定位 */
    right: -25%;
    /* 距离右侧-25% */
    top: -15%;
    /* 距离顶部-15% */
    width: 40%;
    /* 设置宽度 */
    aspect-ratio: 1;
    /* 设置宽高比为1:1 */
    border-radius: 50%;
    /* 设置圆形边框 */
    background: var(--beard);
    /* 设置背景颜色为胡子色 */
        }


        /* 圣诞老人身体样式 */
.body {
    position: absolute;
    /* 绝对定位 */
    top: 35%;
    /* 距离顶部35% */
    left: 50%;
    /* 距离左侧50% */
    width: 50%;
    /* 设置宽度 */
    height: 50%;
    /* 设置高度 */
    background: var(--suit);
    /* 设置背景颜色为衣服色 */
    border-radius: 100% / 150% 150% 25% 25%;
    /* 设置不规则形状的边框 */
    transform: translate(-50%, 0);
    /* 将身体居中 */
    background-image: radial-gradient(circle at 50% 36%, var(--belt) 2.75%, #0000 3%), radial-gradient(circle at 50% 48%, var(--belt) 3%, #0000 3.25%), radial-gradient(circle at 50% 60%, var(--belt) 2.75%, #0000 3%), radial-gradient(circle at 50% 90%, var(--belt) 2.25%, #0000 2.5%), radial-gradient(circle at 50% -50%, transparent 75%, var(--belt) 75.1% 83%, transparent 83.1%), linear-gradient(to right, transparent 42%, white 42.2% 57%, transparent 57.2%);
    /* 设置径向渐变背景和线性渐变背景 */
    clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 51% 100%, 50% 96%, 49% 100%, 0% 100%);
    /* 设置裁剪路径 */
        }


.belt {
    position: absolute;
    /* 绝对定位 */
    top: 75%;
    /* 距离顶部75% */
    left: 50%;
    /* 距离左侧50% */
    transform: translate(-50%, -50%);
    /* 将腰带居中 */
    width: 23%;
    /* 设置宽度 */
    height: 15%;
    /* 设置高度 */
    background: linear-gradient(var(--belt-buckle) 0 0) 75% 50% / 25% 12% no-repeat, linear-gradient(var(--belt) 0 0) 50% 50% / 85% 80% no-repeat, var(--belt-buckle);
    /* 设置背景图像和背景颜色 */
        }


        /* 圣诞老人手臂样式 */
.arms {
    position: absolute;
    /* 绝对定位 */
    top: 37%;
    /* 距离顶部37% */
    left: 50%;
    /* 距离左侧50% */
    transform: translate(-50%, 0);
    /* 将手臂居中 */
    width: 65%;
    /* 设置宽度 */
    height: 40%;
    /* 设置高度 */
    background: OrangeRed;
    /* 设置背景颜色为橙红色 */
    border-radius: 100% / 170% 170% 25% 25%;
    /* 设置不规则形状的边框 */
    background-image: linear-gradient(transparent 20%, #0003);
    /* 设置线性渐变背景 */
}


.hand {
    --positionX: 18%;
    /* 定义手的水平位置 */
    position: absolute;
    /* 绝对定位 */
    top: 70%;
    /* 距离顶部70% */
    left: var(--positionX);
    /* 使用定义的水平位置 */
    width: 13%;
    /* 设置宽度 */
    height: 13%;
    /* 设置高度 */
    background: var(--belt);
    /* 设置背景颜色为腰带色 */
    border-radius: 50%;
    /* 设置圆形边框 */
}


.hand+.hand {
    left: auto;
    /* 取消之前的left属性 */
    right: var(--positionX);
    /* 设置右侧手的位置 */
}


/* 圣诞老人腿部样式 */
.leg {
    position: absolute;
    /* 绝对定位 */
    top: 75%;
    /* 距离顶部75% */
    left: 29%;
    /* 距离左侧29% */
    width: 19%;
    /* 设置宽度 */
    height: 25%;
    /* 设置高度 */
    background: var(--suit);
    /* 设置背景颜色为衣服色 */
    transform: skew(2deg);
    /* 斜切变形 */
    background-image: linear-gradient(#0002, transparent 70%, var(--belt) 0);
    /* 设置线性渐变背景 */
}


.leg+.leg {
    left: 52%;
    /* 设置右侧腿的位置 */
}


.leg::after {
    content: "";
    /* 伪元素内容为空 */
    display: block;
    /* 显示为块级元素 */
    position: absolute;
    /* 绝对定位 */
    bottom: 0;
    /* 距离底部0 */
    left: -6%;
    /* 距离左侧-6% */
    width: 110%;
    /* 设置宽度 */
    height: 20%;
    /* 设置高度 */
    background: black;
    /* 设置背景颜色为黑色 */
    border-radius: 50% / 100% 100% 0 0;
    /* 设置椭圆形边框 */
}

        
.leg+.leg::after {
    left: -4%;
    /* 设置右侧腿脚的位置 */
}

动画效果

为了让圣诞老人更加生动,我们添加了一些动画效果,如眨眼和胡子的微动。

/* 动画关键帧 */
/* 动画关键帧 */
@keyframes snow {
0% {
background-position: 0 0, 0 0, 0 0, 0 0;
/* 设置初始背景位置 */
}


40% {
background-position: 10px 14vmin, -20px 28vmin, 20px 20vmin, 10px 24vmin;
/* 设置40%时的背景位置 */
}


60% {
background-position: -10px 21vmin, -30px 42vmin, 30px 30vmin, 15px 36vmin;
/* 设置60%时的背景位置 */
}


100% {
background-position: 0 35vmin, 0 70vmin, 0 50vmin, 0 60vmin;
/* 设置100%时的背景位置 */
}
}


@keyframes blink {


0%,
6%,
100% {
height: 12%;
/* 设置眼睛的高度 */
}


3% {
height: 0%;
/* 设置眼睛的高度为0,模拟眨眼 */
}
}


@keyframes moveMustache {


0%,
40%,
44%,
100% {
transform: translate(-100%, 0) rotate(25deg);
/* 设置小胡子的初始和结束状态 */
}


42% {
transform: translate(-100%, 0) rotate(30deg);
/* 设置小胡子的中间状态 */
}
}


/* 定义名为 moveMustache2 的关键帧动画 */
@keyframes moveMustache2 {


/* 在 0%, 40%, 44%, 和 100% 的时间点上,将小胡子旋转 -25 度 */
0%,
40%,
44%,
100% {
transform: rotate(-25deg);
}


/* 在 42% 的时间点上,将小胡子旋转 -30 度 */
42% {
transform: rotate(-30deg);
}
}

媒体查询

为了适配偏好减少动画的用户,我们使用媒体查询来取消动画效果。

/* 媒体查询,适配偏好减少动画的用户 */
@media (prefers-reduced-motion) {


/* 如果用户偏好减少动画,则取消所有元素的动画效果 */
* {
animation: none !important;
}
}

最后看下完整代码

<!DOCTYPE html>
<html lang="zh-CN">
<!-- 设置文档的语言为中文 -->


<head>
    <meta charset="UTF-8">
    <!-- 设置字符编码为UTF-8,确保支持多种字符 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 设置视口,使页面适应不同设备的屏幕 -->
    <title>CSS手绘圣诞老人 - 编程狮(w3cschool.cn)</title>
    <!-- 设置网页标题 -->
    <style>
        /* 定义颜色变量 */
        :root {
            --skin: PeachPuff;
            /* 圣诞老人皮肤颜色 */
            --eyes: Black;
            /* 圣诞老人眼睛颜色 */
            --cheeks: Salmon;
            /* 圣诞老人脸颊颜色 */
            --beard: GhostWhite;
            /* 圣诞老人胡子颜色 */
            --mustache: white;
            /* 圣诞老人小胡子颜色 */
            --suit: Tomato;
            /* 圣诞老人衣服颜色 */
            --belt: #363636;
            /* 圣诞老人腰带颜色 */
            --belt-buckle: gold;
            /* 圣诞老人腰带扣颜色 */
        }


        /* 全局样式 */
        body {
            background: SkyBlue;
            /* 背景颜色为天蓝色 */
            overflow: hidden;
            /* 隐藏溢出的内容 */
            background-image: radial-gradient(circle at 50% 50%, white 2.5%, transparent 0), radial-gradient(circle at 30% 90%, white 1.5%, transparent 0), radial-gradient(circle at 70% 10%, white 1%, transparent 0), radial-gradient(circle at 10% 40%, white 1%, transparent 0);
            /* 添加雪花背景效果 */
            background-size: 45vmin 35vmin, 50vmin 70vmin, 60vmin 50vmin, 65vmin 60vmin;
            /* 设置背景图像大小 */
            background-position: 0 0;
            /* 设置背景图像位置 */
            animation: snow infinite 7s linear;
            /* 添加雪花飘落动画 */
        }


        /* 画布样式 */
        .canvas {
            width: 60vmin;
            /* 设置画布宽度 */
            aspect-ratio: 1;
            /* 设置画布宽高比为1:1 */
            position: absolute;
            /* 绝对定位 */
            top: 50%;
            /* 距离顶部50% */
            left: 50%;
            /* 距离左侧50% */
            transform: translate(-50%, -50%);
            /* 将画布居中 */
        }


        .canvas::before {
            content: "";
            /* 伪元素内容为空 */
            display: block;
            /* 显示为块级元素 */
            position: absolute;
            /* 绝对定位 */
            top: 90%;
            /* 距离顶部90% */
            left: 50%;
            /* 距离左侧50% */
            width: 200vmax;
            /* 设置宽度 */
            height: 200vmax;
            /* 设置高度 */
            background: white;
            /* 背景颜色为白色 */
            transform: translate(-50%, 0) rotate(1deg);
            /* 将伪元素居中并旋转1度 */
            border-radius: 100% / 20%;
            /* 设置椭圆形边框 */
        }


        /* 圣诞老人头部样式 */
        .head {
            --positionX: 27%;
            /* 定义眼睛和脸颊的水平位置 */
            --positionY: 63%;
            /* 定义眼睛和脸颊的垂直位置 */
            position: absolute;
            /* 绝对定位 */
            top: 10%;
            /* 距离顶部10% */
            left: 50%;
            /* 距离左侧50% */
            border-radius: 50%;
            /* 设置圆形边框 */
            width: 25%;
            /* 设置宽度 */
            height: 25%;
            /* 设置高度 */
            transform: translate(-50%, 0);
            /* 将头部居中 */
            background: var(--skin);
            /* 设置背景颜色为皮肤色 */
        }


        .eye {
            position: absolute;
            /* 绝对定位 */
            top: var(--positionY);
            /* 使用定义的垂直位置 */
            left: var(--positionX);
            /* 使用定义的水平位置 */
            width: 12%;
            /* 设置宽度 */
            height: 12%;
            /* 设置高度 */
            background: var(--eyes);
            /* 设置背景颜色为黑色 */
            border-radius: 50%;
            /* 设置圆形边框 */
            animation: blink 5s infinite linear;
            /* 添加眨眼动画 */
        }


        .eye+.eye {
            left: auto;
            /* 取消之前的left属性 */
            right: var(--positionX);
            /* 设置右侧眼睛的位置 */
        }


        .cheek {
            position: absolute;
            /* 绝对定位 */
            top: calc(var(--positionY) + 7%);
            /* 计算脸颊的垂直位置 */
            left: calc(var(--positionX) - 12%);
            /* 计算脸颊的水平位置 */
            width: 20%;
            /* 设置宽度 */
            height: 12%;
            /* 设置高度 */
            background: var(--cheeks);
            /* 设置背景颜色为脸颊色 */
            border-radius: 50%;
            /* 设置圆形边框 */
        }


        .cheek+.cheek {
            left: auto;
            /* 取消之前的left属性 */
            right: calc(var(--positionX) - 12%);
            /* 设置右侧脸颊的位置 */
        }


        /* 圣诞老人胡须和小胡子样式 */
        .beard {
            position: absolute;
            /* 绝对定位 */
            top: 10%;
            /* 距离顶部10% */
            left: 50%;
            /* 距离左侧50% */
            width: 30%;
            /* 设置宽度 */
            height: 40%;
            /* 设置高度 */
            background: var(--beard);
            /* 设置背景颜色为胡子色 */
            transform: translate(-50%, 0);
            /* 将胡须居中 */
            border-radius: 100% / 120% 120% 80% 80%;
            /* 设置不规则形状的边框 */
        }


        .mustache {
            position: absolute;
            /* 绝对定位 */
            top: 88%;
            /* 距离顶部88% */
            left: 52%;
            /* 距离左侧52% */
            width: 40%;
            /* 设置宽度 */
            height: 40%;
            /* 设置高度 */
            background: var(--mustache);
            /* 设置背景颜色为小胡子色 */
            border-radius: 100% 10% 100% 0;
            /* 设置不规则形状的边框 */
            transform-origin: top right;
            /* 设置变换原点 */
            transform: translate(-100%, 0) rotate(25deg);
            /* 将小胡子向左旋转25度 */
            animation: moveMustache 7s infinite linear;
            /* 添加小胡子移动动画 */
        }


        .mustache+.mustache {
            left: 48%;
            /* 设置左侧小胡子的位置 */
            border-radius: 10% 100% 0 100%;
            /* 设置不规则形状的边框 */
            transform-origin: top left;
            /* 设置变换原点 */
            transform: rotate(-25deg);
            /* 将小胡子向右旋转25度 */
            animation: moveMustache2 7s infinite linear;
            /* 添加小胡子移动动画 */
        }


        /* 圣诞老人帽子样式 */
        .hat {
            position: absolute;
            /* 绝对定位 */
            width: 98%;
            /* 设置宽度 */
            height: 80%;
            /* 设置高度 */
            background: var(--suit);
            /* 设置背景颜色为衣服色 */
            border-radius: 100% 20% 0 0;
            /* 设置不规则形状的边框 */
            top: -40%;
            /* 距离顶部-40% */
            left: 50%;
            /* 距离左侧50% */
            transform: translate(-50%, 0) rotate(1deg);
            /* 将帽子居中并旋转1度 */
        }


        .hat::before {
            content: "";
            /* 伪元素内容为空 */
            display: block;
            /* 显示为块级元素 */
            position: absolute;
            /* 绝对定位 */
            bottom: -17%;
            /* 距离底部-17% */
            left: -5%;
            /* 距离左侧-5% */
            width: 110%;
            /* 设置宽度 */
            height: 40%;
            /* 设置高度 */
            border-radius: 100% / 50%;
            /* 设置椭圆形边框 */
            transform: rotate(-2deg);
            /* 旋转-2度 */
            background: radial-gradient(200% 100% at 50% 100%, #0000 30%, var(--mustache) 31%);
            /* 设置径向渐变背景 */
        }


        .hat::after {
            content: "";
            /* 伪元素内容为空 */
            display: block;
            /* 显示为块级元素 */
            position: absolute;
            /* 绝对定位 */
            right: -25%;
            /* 距离右侧-25% */
            top: -15%;
            /* 距离顶部-15% */
            width: 40%;
            /* 设置宽度 */
            aspect-ratio: 1;
            /* 设置宽高比为1:1 */
            border-radius: 50%;
            /* 设置圆形边框 */
            background: var(--beard);
            /* 设置背景颜色为胡子色 */
        }


        /* 圣诞老人身体样式 */
        .body {
            position: absolute;
            /* 绝对定位 */
            top: 35%;
            /* 距离顶部35% */
            left: 50%;
            /* 距离左侧50% */
            width: 50%;
            /* 设置宽度 */
            height: 50%;
            /* 设置高度 */
            background: var(--suit);
            /* 设置背景颜色为衣服色 */
            border-radius: 100% / 150% 150% 25% 25%;
            /* 设置不规则形状的边框 */
            transform: translate(-50%, 0);
            /* 将身体居中 */
            background-image: radial-gradient(circle at 50% 36%, var(--belt) 2.75%, #0000 3%), radial-gradient(circle at 50% 48%, var(--belt) 3%, #0000 3.25%), radial-gradient(circle at 50% 60%, var(--belt) 2.75%, #0000 3%), radial-gradient(circle at 50% 90%, var(--belt) 2.25%, #0000 2.5%), radial-gradient(circle at 50% -50%, transparent 75%, var(--belt) 75.1% 83%, transparent 83.1%), linear-gradient(to right, transparent 42%, white 42.2% 57%, transparent 57.2%);
            /* 设置径向渐变背景和线性渐变背景 */
            clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 51% 100%, 50% 96%, 49% 100%, 0% 100%);
            /* 设置裁剪路径 */
        }


        .belt {
            position: absolute;
            /* 绝对定位 */
            top: 75%;
            /* 距离顶部75% */
            left: 50%;
            /* 距离左侧50% */
            transform: translate(-50%, -50%);
            /* 将腰带居中 */
            width: 23%;
            /* 设置宽度 */
            height: 15%;
            /* 设置高度 */
            background: linear-gradient(var(--belt-buckle) 0 0) 75% 50% / 25% 12% no-repeat, linear-gradient(var(--belt) 0 0) 50% 50% / 85% 80% no-repeat, var(--belt-buckle);
            /* 设置背景图像和背景颜色 */
        }


        /* 圣诞老人手臂样式 */
        .arms {
            position: absolute;
            /* 绝对定位 */
            top: 37%;
            /* 距离顶部37% */
            left: 50%;
            /* 距离左侧50% */
            transform: translate(-50%, 0);
            /* 将手臂居中 */
            width: 65%;
            /* 设置宽度 */
            height: 40%;
            /* 设置高度 */
            background: OrangeRed;
            /* 设置背景颜色为橙红色 */
            border-radius: 100% / 170% 170% 25% 25%;
            /* 设置不规则形状的边框 */
            background-image: linear-gradient(transparent 20%, #0003);
            /* 设置线性渐变背景 */
        }


        .hand {
            --positionX: 18%;
            /* 定义手的水平位置 */
            position: absolute;
            /* 绝对定位 */
            top: 70%;
            /* 距离顶部70% */
            left: var(--positionX);
            /* 使用定义的水平位置 */
            width: 13%;
            /* 设置宽度 */
            height: 13%;
            /* 设置高度 */
            background: var(--belt);
            /* 设置背景颜色为腰带色 */
            border-radius: 50%;
            /* 设置圆形边框 */
        }


        .hand+.hand {
            left: auto;
            /* 取消之前的left属性 */
            right: var(--positionX);
            /* 设置右侧手的位置 */
        }


        /* 圣诞老人腿部样式 */
        .leg {
            position: absolute;
            /* 绝对定位 */
            top: 75%;
            /* 距离顶部75% */
            left: 29%;
            /* 距离左侧29% */
            width: 19%;
            /* 设置宽度 */
            height: 25%;
            /* 设置高度 */
            background: var(--suit);
            /* 设置背景颜色为衣服色 */
            transform: skew(2deg);
            /* 斜切变形 */
            background-image: linear-gradient(#0002, transparent 70%, var(--belt) 0);
            /* 设置线性渐变背景 */
        }


        .leg+.leg {
            left: 52%;
            /* 设置右侧腿的位置 */
        }


        .leg::after {
            content: "";
            /* 伪元素内容为空 */
            display: block;
            /* 显示为块级元素 */
            position: absolute;
            /* 绝对定位 */
            bottom: 0;
            /* 距离底部0 */
            left: -6%;
            /* 距离左侧-6% */
            width: 110%;
            /* 设置宽度 */
            height: 20%;
            /* 设置高度 */
            background: black;
            /* 设置背景颜色为黑色 */
            border-radius: 50% / 100% 100% 0 0;
            /* 设置椭圆形边框 */
        }


        .leg+.leg::after {
            left: -4%;
            /* 设置右侧腿脚的位置 */
        }


        /* 动画关键帧 */
        @keyframes snow {
            0% {
                background-position: 0 0, 0 0, 0 0, 0 0;
                /* 设置初始背景位置 */
            }


            40% {
                background-position: 10px 14vmin, -20px 28vmin, 20px 20vmin, 10px 24vmin;
                /* 设置40%时的背景位置 */
            }


            60% {
                background-position: -10px 21vmin, -30px 42vmin, 30px 30vmin, 15px 36vmin;
                /* 设置60%时的背景位置 */
            }


            100% {
                background-position: 0 35vmin, 0 70vmin, 0 50vmin, 0 60vmin;
                /* 设置100%时的背景位置 */
            }
        }


        @keyframes blink {


            0%,
            6%,
            100% {
                height: 12%;
                /* 设置眼睛的高度 */
            }


            3% {
                height: 0%;
                /* 设置眼睛的高度为0,模拟眨眼 */
            }
        }


        @keyframes moveMustache {


            0%,
            40%,
            44%,
            100% {
                transform: translate(-100%, 0) rotate(25deg);
                /* 设置小胡子的初始和结束状态 */
            }


            42% {
                transform: translate(-100%, 0) rotate(30deg);
                /* 设置小胡子的中间状态 */
            }
        }


        /* 定义名为 moveMustache2 的关键帧动画 */
        @keyframes moveMustache2 {


            /* 在 0%, 40%, 44%, 和 100% 的时间点上,将小胡子旋转 -25 度 */
            0%,
            40%,
            44%,
            100% {
                transform: rotate(-25deg);
            }


            /* 在 42% 的时间点上,将小胡子旋转 -30 度 */
            42% {
                transform: rotate(-30deg);
            }
        }


        /* 媒体查询,适配偏好减少动画的用户 */
        @media (prefers-reduced-motion) {


            /* 如果用户偏好减少动画,则取消所有元素的动画效果 */
            * {
                animation: none !important;
            }
        }
    </style>
</head>


<body>
    <div class="canvas" role="img" aria-label="一个站在雪地小山上的圣诞老人卡通形象。">
        <!-- 创建一个画布容器,包含圣诞老人的所有部分,并设置ARIA标签以便于辅助技术 -->
        <div class="hand"></div><!-- 左手 -->
        <div class="hand"></div><!-- 右手 -->
        <div class="arms"></div><!-- 手臂 -->
        <div class="leg"></div> <!-- 左腿 -->
        <div class="leg"></div> <!-- 右腿 -->
        <div class="body"> <!-- 圣诞老人的身体 -->
            <div class="belt"></div> <!-- 圣诞老人的腰带 -->
        </div>
        <div class="beard"></div> <!-- 圣诞老人的胡子 -->
        <div class="head"> <!-- 圣诞老人的头部 -->
            <div class="cheek"></div><!-- 左脸颊 -->
            <div class="cheek"></div> <!-- 右脸颊 -->
            <div class="eye"></div> <!-- 左眼 -->
            <div class="eye"></div> <!-- 右眼 -->
            <div class="mustache"></div> <!-- 左小胡子 -->
            <div class="mustache"></div><!-- 右小胡子 -->
            <div class="hat"></div> <!-- 圣诞老人的帽子 -->
        </div>
    </div>
</body>


</html>

创建一个圣诞老人.html文件并使用编辑器打开,将以上代码粘贴后保存,使用浏览器即可查看效果。

通过本教程,你不仅学会了如何使用CSS来手绘一个圣诞老人形象,还了解了如何通过CSS动画来增强网页的互动性。如果你想要更深入地学习CSS,编程狮(w3cschool.cn)提供了丰富的课程,包括CSS基础、进阶技巧以及实战项目,帮助你成为CSS高手。现在就开始你的学习之旅吧,下一个圣诞节,你或许可以自己制作一个更加复杂的圣诞主题网页!

保姆级Python安装教程,小白一看就懂,收藏!

thbcm阅读(303)

Python是一种非常流行和易用的编程语言,它可以用来做很多有用的事情,比如数据分析、网站开发、游戏制作等等。但是在你开始学习Python之前,你需要先安装Python到你的电脑上。今天,小狮妹就来教你如何安装Python吧!

确定电脑操作系统

首先,你需要确定你的电脑的操作系统是什么。操作系统就是你的电脑运行的基本软件,它可以让你和电脑交互,比如打开文件、浏览网页、运行程序等等。常见的操作系统有Windows、Mac OS、Linux等。

如果你不知道你的电脑是什么系统,你可以这样做:

  • 如果你的电脑是Windows系统,你可以在屏幕左下角找到一个叫做“开始”的按钮,点击它,然后在弹出的菜单中找到一个叫做“设置”的图标,点击它。然后,在打开的窗口中,找到一个叫做“系统”的选项,点击它。在左边的菜单中,找到一个叫做“关于”的选项,点击它。在右边的页面中,你可以看到一些关于你的电脑的信息,其中有一项叫做“设备规格”,下面有一项叫做“系统类型”,这里就显示了你的操作系统的版本和位数。比如,“64位操作系统, x64处理器”就表示你的电脑是64位的Windows系统。

  • 如果你的电脑是Mac OS系统,你可以在屏幕左上角找到一个苹果图标,点击它,然后在弹出的菜单中找到一个叫做“关于本机”的选项,点击它。然后,在打开的窗口中,你可以看到一些关于你的电脑的信息,其中有一项叫做“软件”,这里就显示了你的操作系统的版本和名称。比如,“macOS Big Sur 11.4”就表示你的电脑是最新版的Mac OS系统。

  • 如果你的电脑是Linux系统,那么可能有很多种不同的发行版和桌面环境,所以没有统一的方法来查看操作系统信息。但是,一般来说,你可以在屏幕上找到一个类似于Windows或者Mac OS中“开始”或者“苹果”图标的按钮或者菜单,点击它,然后找到一个叫做“关于”或者“信息”或者“帮助”的选项,点击它。然后,在打开的窗口或者页面中,你可以看到一些关于你的电脑和操作系统的信息。比如,“Ubuntu 20.04.2 LTS”就表示你的电脑是Ubuntu发行版的最新长期支持版。

确定了操作系统之后,我们就可以开始下载和安装Python了。

下载Python

要下载Python,我们需要访问Python官方网站。这个网站提供了Python最新版和历史版的下载链接和文档说明。我们可以根据自己需要选择合适版本和平台(即操作系统)来下载。

如果你不知道该选择哪个版本和平台来下载Python,我建议你这样做:

  • 选择最新版(目前是3.9.6)来下载。因为最新版通常会修复一些错误和增加一些功能,而且大多数第三方库和框架都会支持最新版。除非你有特殊的需求,比如要运行一些只能在旧版Python上工作的代码,否则不建议你下载旧版Python。
  • 选择和你的操作系统和位数相匹配的平台来下载。比如,如果你的电脑是64位的Windows系统,那么你就应该选择“Windows x86-64 executable installer”来下载。如果你的电脑是Mac OS系统,那么你就应该选择“macOS 64-bit Intel installer”来下载。如果你的电脑是Linux系统,那么你就应该选择“Linux”来下载,然后根据你的发行版和包管理器来选择合适的安装方式。

下载好Python之后,我们就可以开始安装Python了。

安装Python

要安装Python,我们需要运行下载好的安装文件或者包,并按照提示进行操作。不同的操作系统可能有不同的安装步骤,所以我们要根据自己的情况来进行。

如果你不知道该如何安装Python,我建议你这样做:

  • 如果你的电脑是Windows系统,那么你可以双击下载好的“Windows x86-64 executable installer”文件,然后会弹出一个安装向导窗口。在这个窗口中,你可以看到一些选项,比如“Install Now”(立即安装)、“Customize installation”(自定义安装)、“Add Python 3.9 to PATH”(将Python 3.9添加到环境变量)等。我建议你勾选“Add Python 3.9 to PATH”这个选项,这样就可以让你在任何地方都可以运行Python。然后,你可以选择“Install Now”这个选项,这样就会使用默认的设置来安装Python。如果你想自己选择安装位置或者安装组件,你可以选择“Customize installation”这个选项,然后按照提示进行操作。无论你选择哪个选项,都要等待安装完成,并点击“Close”按钮关闭窗口。

  • 如果你的电脑是Mac OS系统,那么你可以双击下载好的“macOS 64-bit Intel installer”文件,然后会弹出一个安装向导窗口。在这个窗口中,你可以看到一些步骤,比如“Introduction”(介绍)、“Read Me”(阅读我)、“License”(许可协议)、“Destination Select”(目标选择)、“Installation Type”(安装类型)、“Installation”(安装)、“Summary”(总结)等。我建议你按照默认的设置来进行安装,只需要点击“Continue”按钮,并在需要时输入密码或者同意协议即可。等待安装完成,并点击“Close”按钮关闭窗口。

  • 如果你的电脑是Linux系统,那么你可以根据你的发行版和包管理器来选择合适的安装方式。比如,如果你的电脑是Ubuntu系统,并且使用apt作为包管理器,那么你可以在终端中输入以下命令来安装Python:
 
 
sudo apt update # 更新软件源sudo apt install python3 # 安装Python 3

如果你想要更详细的安装指南或者遇到了一些问题,请参考Python官方网站上提供的文档。

验证Python

安装好Python之后,我们需要验证一下是否成功。我们可以用以下方法来检查:

  • 如果你的电脑是Windows系统或者Mac OS系统,那么你可以打开一个叫做“命令提示符”或者“终端”的程序,在里面输入以下命令:
 
 
python --version # 查看Python版本

如果输出类似于“Python 3.9.6”的信息,就表示成功安装了Python。

  • 如果你的电脑是Linux系统,那么你可以在终端中输入以下命令:
 
 
python3 --version # 查看Python 3版本

如果输出类似于“Python 3.9.6”的信息,就表示成功安装了Python 3。

如果你没有看到这样的信息,或者看到了一些错误提示,那么可能是你的安装过程出了一些问题,或者你的环境变量没有设置正确。你可以尝试重新安装Python,或者检查一下你的环境变量是否包含了Python的路径。如果你不知道如何设置环境变量,请参考Python官方网站上提供的文档。

运行Python

验证好Python之后,我们就可以开始运行Python了。我们可以用以下方法来运行Python:

  • 如果你的电脑是Windows系统或者Mac OS系统,那么你可以打开一个叫做“命令提示符”或者“终端”的程序,在里面输入以下命令:
 
 
python # 启动Python交互式解释器

如果成功启动了Python交互式解释器,你会看到类似于这样的信息:

 
 
Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>>

这里的>>>就是一个提示符,表示你可以在这里输入Python代码,并按回车键执行。比如,你可以输入以下代码:

 
 
print("Hello, world!") # 打印一句话

然后按回车键,就会看到以下输出:

Hello, world!

这就表示你成功运行了一段Python代码。你可以在这里尝试更多的Python代码,学习和练习Python的语法和功能。如果你想退出Python交互式解释器,你可以输入以下命令:

 
 

exit() # 退出Python交互式解释器

然后按回车键,就会回到命令提示符或者终端中。

  • 如果你的电脑是Linux系统,那么你可以在终端中输入以下命令:
 
 
python3 # 启动Python 3交互式解释器

如果成功启动了Python 3交互式解释器,你会看到类似于这样的信息:

 
 
Python 3.9.6 (default, Jun 29 2021, 05:25:02)
[GCC 10.2.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>>

这里的>>>就是一个提示符,表示你可以在这里输入Python代码,并按回车键执行。比如,你可以输入以下代码

print("Hello, world!") # 打印一句话

然后按回车键,就会看到以下输出:

Hello, world!

这就表示你成功运行了一段Python代码。你可以在这里尝试更多的Python代码,学习和练习Python的语法和功能。如果你想退出Python交互式解释器,你可以输入以下命令:

 
 

exit() # 退出Python交互式解释器

然后按回车键,就会回到终端中。

恭喜你!你已经完成了Python的安装、验证、运行。接下来,你可以继续学习更多的Python知识和技能,并且尝试编写更多有趣和有用的程序。小狮妹希望你能享受Python编程带给你的乐趣和挑战~

联系我们