前端新手教程:HTML、CSS 和 JavaScript 全面详解及实用案例

一、引言

在当今数字化的时代,前端开发扮演着至关重要的角色,它决定了用户与网页和应用程序交互的体验。HTML、CSS 和 JavaScript 作为前端开发的核心技术,分别负责网页的结构、样式和交互。本教程将为前端新手全面深入地介绍 HTML、CSS 和 JavaScript 的知识点,并通过实用案例帮助你快速上手。

二、HTML 基础

(一)HTML 概述

HTML(HyperText Markup Language)即超文本标记语言,是用于创建网页的标准标记语言。它通过各种标签来定义网页的结构和内容,使得浏览器能够正确地显示网页。

(二)HTML 基本结构

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>My Web Page</title>
</head>
<body><!-- 网页内容在这里 -->
</body>
</html>

  1. <!DOCTYPE html>:声明文档类型为 HTML5,确保浏览器以正确的模式解析页面。
  2. <html>:根元素,包含整个网页的内容。
  3. <head>:包含网页的元数据,如字符编码、标题等。其中,<meta charset="UTF-8">设置字符编码为 UTF-8,以支持多种语言和字符。<title>标签定义了网页的标题,显示在浏览器的标签栏上。
  4. <body>:包含网页的可见内容,如文本、图像、链接等。

(三)常用 HTML 标签

  1. 语义化标签
    • <header>:表示网页或章节的头部,通常包含标题、导航链接等。有助于提高网页的可读性和可访问性,方便搜索引擎理解页面结构。
    • <nav>:用于定义导航链接的部分,如网站的主导航菜单、侧边栏导航等。
    • <main>:代表页面的主要内容区域,一个页面应该只有一个<main>元素。突出页面的核心内容。
    • <article>:表示独立的、可复用的内容块,如博客文章、新闻报道等。
    • <section>:用于对页面内容进行分组,通常有一个标题来描述该部分的内容。
    • <aside>:表示与页面主要内容相关但可以独立存在的部分,如侧边栏、广告、引用等。
    • <footer>:包含页面的底部信息,如版权声明、联系信息、相关链接等。
  2. 多媒体标签
    • <audio><video>:允许在网页中直接嵌入音频和视频文件,无需依赖第三方插件。可设置属性如controls来显示播放控制条。
  3. 表单标签
    • <input>:输入字段,有多种类型如textemailpasswordnumberdatetimedatetime-localrangecolor等。可设置属性如placeholder提供输入提示,required表示必填。
    • <select>:下拉列表,使用<option>标签定义选项,可设置selected指定默认选中项。
    • <textarea>:多行文本输入区域,可设置rowscols控制大小。
    • <button>:按钮,可设置typesubmit(提交表单)、reset(重置表单)或button(普通按钮)。
  4. 其他重要标签
    • <a>:超链接,使用href属性指定链接目标地址,target属性可设置链接在新窗口或当前窗口中打开。
    • <img>:图像,使用src属性指定图像路径,alt属性提供图像的替代文本,以便在图像无法显示时显示给用户。
    • <div>:通用容器,用于将其他元素组合在一起,进行布局和样式设置。
    • <span>:内联容器,用于对文本或其他内联元素进行样式设置。

三、CSS 基础

(一)CSS 概述

CSS(Cascading Style Sheets)即层叠样式表,用于控制网页的外观和布局。它可以定义网页中元素的颜色、字体、大小、位置等样式,使网页更加美观和易于阅读。

(二)CSS 引入方式

       1.内联样式:直接在 HTML 标签中使用style属性。这种方式将样式直接应用于特定的元素,但会导致代码重复和难以维护。

  • 例如:
<p style="color: blue;">This is a paragraph.</p>。

       2.内部样式表:在 HTML 文件的<head>部分使用<style>标签。将样式集中在一个地方,方便管理和修改,但只适用于单个 HTML 文件。

  • 例如:
   <head><style>p {color: blue;}</style></head>

       3.外部样式表:将 CSS 代码保存为一个独立的文件,然后在 HTML 文件中使用<link>标签引入。可以在多个 HTML 文件中共享样式,提高开发效率和代码的可维护性。

  • 例如:
   <head><link rel="stylesheet" href="styles.css"></head>

(三)CSS 选择器

  1. 元素选择器:选择特定的 HTML 元素。例如,p { color: blue; }选择所有<p>元素。
  2. 类选择器:选择具有特定类名的元素。使用.class-name { }的语法,可在 HTML 元素中使用class属性指定类名,然后通过类选择器应用样式。
    • 例如:.my-class { color: red; }选择所有具有class="my-class"的元素。
  3. ID 选择器:选择具有特定 ID 的元素。使用#id-name { }的语法,在 HTML 元素中使用id属性指定唯一的 ID,然后通过 ID 选择器应用样式。
    • 例如:#my-id { color: green; }选择具有id="my-id"的元素。
  4. 后代选择器:选择特定元素的后代元素。使用parent-element child-element { }的语法,可以选择父元素内部的任何级别的子元素。
    • 例如:div p { color: purple; }选择<div>元素内的所有<p>元素。

(四)CSS 属性

  1. 字体属性:
    • font-family:设置字体类型,可以指定一个或多个字体名称,浏览器会按照顺序查找可用的字体。
    • font-size:设置字体大小,可以使用像素(px)、百分比(%)、em 等单位。
    • font-weight:设置字体的粗细,可以使用数值(100 - 900)或关键字(normal、bold 等)。
  2. 颜色属性:
    • color:设置文本颜色,可以使用颜色名称、十六进制值、RGB 值或 HSL 值。
  3. 背景属性:
    • background-color:设置背景颜色。
    • background-image:设置背景图像,可以使用 URL 指定图像的路径。
  4. 边框属性:
    • border:设置边框的样式、宽度和颜色。可以使用border: width style color;的语法。
  5. 布局属性:
    • display:设置元素的显示方式,可以是block(块级元素)、inline(内联元素)、inline-block(内联块级元素)等。
    • float:设置元素的浮动方向,可以是left(向左浮动)、right(向右浮动)或none(不浮动)。
    • position:设置元素的定位方式,可以是static(静态定位)、relative(相对定位)、absolute(绝对定位)或fixed(固定定位)。

(五)CSS 高级特性

  1. 变量函数(var ()):可以使用var()函数来引用 CSS 变量。
  2. calc () 函数:用于在 CSS 中进行数学计算。
  3. object-fit 和 object-position 属性:用于控制图像或视频在其容器中的适应方式和位置。
  4. will-change 属性:提示浏览器哪些属性可能会发生变化,以便浏览器进行优化。
  5. transform-origin 属性:用于设置变换的原点。
  6. 过渡的延迟(transition-delay):可以为过渡效果设置延迟时间。
  7. 多背景图像:可以为一个元素设置多个背景图像。
  8. :is():where()伪类:这两个伪类允许你组合多个选择器,并以更简洁的方式应用相同的样式。
  9. :has()伪类(部分浏览器支持有限):用于选择具有特定子元素的元素。
  10. 容器查询(Container Queries):类似于媒体查询,但作用于特定的容器元素,而不是整个视口。
  11. 级联层(Cascade Layers):可以将 CSS 规则分组到不同的层中,以更好地控制样式的优先级。
  12. 颜色函数的更多用法rgb()rgba()函数可以接受百分比值作为参数,用于更灵活地定义颜色。hsl()hsla()函数用于定义颜色的色相、饱和度和亮度。
  13. 视口单位的更多应用:除了vw(视口宽度)和vh(视口高度),还有vmin(视口宽度和高度中的较小值)和vmax(视口宽度和高度中的较大值)。
  14. 自定义属性范围和继承:CSS 自定义属性(变量)可以在不同的选择器范围内定义,并可以通过继承在子元素中使用。
  15. 使用 CSS Grid 和 Flexbox 结合:可以结合 CSS Grid 和 Flexbox 来创建复杂的布局。
  16. clip-path属性:用于创建不规则形状的元素。
  17. backdrop-filter属性:为元素后面的区域添加滤镜效果。
  18. scroll-snap属性:用于创建平滑的滚动效果,使页面在滚动时停在特定的位置。

四、JavaScript 基础

(一)JavaScript 概述

JavaScript 是一种高级编程语言,用于为网页添加交互性和动态效果。它可以在浏览器中运行,与 HTML 和 CSS 结合使用,实现网页的各种功能。

(二)JavaScript 引入方式

       1.内联脚本:在 HTML 文件中使用<script>标签直接编写 JavaScript 代码。适用于小型脚本或快速测试。

例如:

   <body><script>console.log('Hello, World!');</script></body>

       2.外部脚本:将 JavaScript 代码保存为一个独立的文件,然后在 HTML 文件中使用<script>标签引入。可以将代码分离出来,提高代码的可维护性和可重用性。

例如:

   <body><script src="script.js"></script></body>

(三)JavaScript 基本语法

  1. 变量声明:使用letconstvar关键字声明变量。
    • let:用于声明块级作用域的变量,可以在声明后重新赋值。
    • const:用于声明常量,一旦赋值后不能再被修改。
    • var:在 ES6 之前使用的变量声明方式,存在一些作用域和提升的问题,现在不推荐使用。
    • 例如:let x = 10;const y = 20;
  2. 数据类型:包括数字、字符串、布尔值、数组、对象等。
    • 数字:可以是整数或浮点数,如let num = 42;
    • 字符串:用单引号或双引号括起来的文本,如let str = 'Hello';
    • 布尔值:只有truefalse两个值,如let isTrue = true;
    • 数组:用方括号括起来的一组值,可以包含不同类型的元素,如let arr = [1, 2, 3];
    • 对象:用花括号括起来的一组键值对,键必须是字符串,值可以是任何类型,如let obj = { name: 'John', age: 30 };
  3. 控制流语句:如if语句、for循环、while循环等。
    • if语句:用于根据条件执行不同的代码块。
    • for循环:用于重复执行一段代码指定的次数。
    • while循环:在条件为真时重复执行一段代码。
  4. 函数定义:使用function关键字定义函数。函数可以接受参数,并返回一个值。
  • 例如:
   function add(a, b) {return a + b;}

(四)JavaScript 高级特性

  1. 模板字面量(Template Literals):允许在字符串中插入变量和表达式,使用反引号()包裹字符串,并使用 ${expression}` 的形式插入变量或表达式。
    • 例如:const name = "John"; const message = Hello, ${name}!;
  2. 解构赋值(Destructuring Assignment):可以从数组或对象中提取值,并将其赋值给变量。
    • 数组解构赋值:const numbers = [1, 2, 3]; const [a, b, c] = numbers;
    • 对象解构赋值:const person = { name: "John", age: 30 }; const { name, age } = person;
  3. 展开运算符(Spread Operator):可以将数组或对象展开为单个元素或属性。
    • 数组展开:const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const combinedArray = [...arr1,...arr2];
    • 对象展开:const obj1 = { name: "John", age: 30 }; const obj2 = { city: "New York", hobby: "Reading" }; const combinedObject = {...obj1,...obj2 };
  4. 箭头函数(Arrow Functions):是一种更简洁的函数定义方式,具有更简洁的语法和词法作用域。
    • 例如:const add = (a, b) => a + b;
  5. Promise:用于处理异步操作的对象,代表了一个异步操作的最终完成或失败。
    • 例如:
      const fetchData = () => {return new Promise((resolve, reject) => {setTimeout(() => {const data = { name: "John", age: 30 };resolve(data);}, 2000);});};fetchData().then((data) => console.log(data)).catch((error) => console.error(error));
  6. async/await:基于 Promise 的异步编程语法糖,使异步代码看起来更像同步代码。
    • 例如:
       const fetchData = async () => {try {const response = await fetch("https://api.example.com/data");const data = await response.json();return data;} catch (error) {throw error;}};fetchData().then((data) => console.log(data)).catch((error) => console.error(error));
  7. Set 和 Map 数据结构
    • Set:是一种集合数据结构,存储任意类型的唯一值。
    • Map:是一种键值对的数据结构,存储任意类型的键和值。
  8. 模块(Modules):在 ES6 中,可以使用模块来组织和封装代码。模块可以导出变量、函数和类,其他模块可以导入这些导出的内容。
    • 例如:
         // module1.jsexport const message = "Hello from module1";export function add(a, b) {return a + b;}// module2.jsimport { message, add } from "./module1.js";console.log(message);console.log(add(2, 3));
      
  9. 函数参数默认值:可以为函数参数设置默认值,当调用函数时如果没有传入该参数,则使用默认值。
    • 例如:
      function greet(name = "Anonymous") {console.log(Hello, ${name}!); 
      }
  10. 剩余参数(Rest Parameters):允许函数接收不定数量的参数,并将它们作为一个数组处理。

  例如:

function sum(...numbers) {return numbers.reduce((total, num) => total + num, 0);}

五、HTML、CSS 和 JavaScript 的结合使用

(一)使用 JavaScript 操作 HTML 元素

可以使用 JavaScript 来获取、修改和创建 HTML 元素。

  • 例如:
<p id="myParagraph">This is a paragraph.</p>
<script>// 获取元素let paragraph = document.getElementById('myParagraph');// 修改元素内容paragraph.textContent = 'This is a modified paragraph.';// 创建新元素let newParagraph = document.createElement('p');newParagraph.textContent = 'This is a new paragraph.';document.body.appendChild(newParagraph);
</script>

在这个例子中,首先使用document.getElementById方法获取具有id="myParagraph"<p>元素。然后,通过修改textContent属性来改变元素的文本内容。最后,使用document.createElement方法创建一个新的<p>元素,并设置其文本内容,然后使用appendChild方法将新元素添加到<body>元素中。

(二)使用 JavaScript 操作 CSS 样式

可以使用 JavaScript 来修改元素的 CSS 样式。

  • 例如:
<div id="myDiv">This is a div.</div>
<script>let div = document.getElementById('myDiv');// 修改背景颜色div.style.backgroundColor = 'red';// 修改字体大小div.style.fontSize = '20px';
</script>

在这个例子中,首先获取具有id="myDiv"<div>元素。然后,通过修改style属性的backgroundColorfontSize属性来改变元素的背景颜色和字体大小。

六、实用案例

(一)创建一个简单的待办事项列表

  •   HTML 结构:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>To-Do List</title><link rel="stylesheet" href="styles.css">
</head>
<body><h1>To-Do List</h1><input type="text" id="newItemInput"><button id="addItemButton">Add Item</button><ul id="todoList"></ul><script src="script.js"></script>
</body>
</html>
  • CSS 样式:
body {font-family: Arial, sans-serif;
}h1 {text-align: center;
}input {padding: 10px;font-size: 16px;
}button {padding: 10px 20px;font-size: 16px;background-color: #4CAF50;color: white;border: none;cursor: pointer;
}ul {list-style-type: none;padding: 0;
}li {padding: 10px;border: 1px solid #ddd;margin-bottom: 5px;
}
  • JavaScript 代码:
document.getElementById('addItemButton').addEventListener('click', function() {let input = document.getElementById('newItemInput');let value = input.value;if (value) {let list = document.getElementById('todoList');let li = document.createElement('li');li.textContent = value;list.appendChild(li);input.value = '';}
});

(二)创建一个图片轮播器

  • HTML 结构:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Image Slider</title><link rel="stylesheet" href="styles.css">
</head>
<body><div id="slider"><img src="image1.jpg" alt="Image 1"><img src="image2.jpg" alt="Image 2"><img src="image3.jpg" alt="Image 3"></div><button id="prevButton">Previous</button><button id="nextButton">Next</button><script src="script.js"></script>
</body>
</html>

这里有一个包含三张图片的容器<div>,以及两个用于切换图片的按钮。

  • CSS 样式:
#slider {width: 500px;height: 300px;overflow: hidden;
}#slider img {width: 100%;height: 100%;
}

设置图片轮播器的大小,并确保超出部分隐藏,同时让图片自适应容器大小。

  • JavaScript 代码:
let images = document.querySelectorAll('#slider img');
let currentImage = 0;function showImage(index) {for (let i = 0; i < images.length; i++) {images[i].style.display = 'none';}images[index].style.display = 'block';
}showImage(currentImage);document.getElementById('nextButton').addEventListener('click', function() {currentImage++;if (currentImage >= images.length) {currentImage = 0;}showImage(currentImage);
});document.getElementById('prevButton').addEventListener('click', function() {currentImage--;if (currentImage < 0) {currentImage = images.length - 1;}showImage(currentImage);
});

这段代码首先获取所有的图片元素,定义了一个显示特定图片的函数,初始时显示第一张图片。然后为 “下一张” 和 “上一张” 按钮添加点击事件监听器,实现图片的切换功能。

七、总结

通过本教程,你应该对前端开发的核心技术 HTML、CSS 和 JavaScript 有了初步的了解。要成为一名优秀的前端开发人员,需要不断学习和实践。可以通过在线教程、书籍和实际项目来提高自己的技能。祝你在前端开发的道路上取得成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450672.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10秒钟用Midjourney画出国风味的变形金刚

上魔咒 Optimus Prime comes from the movie Transformers, Chinese style, Wu ShanMing, Ink Painting Halo Dyeing, Conceptual of the Digita Art, MasterComposition, Romantic Ancient Style, Inspired by traditional patterns and symbols, Minimalism, do not con…

day01 -- MybatisPlus

1. MybatisPlus简介 有基础的同学可结合资源中的代码一起看 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生 特性 通用的 CRUD 操作&#xff1a;内置通用 Mapper、通用 Service&#xff0c;仅仅通过少量配置即可实…

私有化部署大模型最佳解决方案 Ollama (8B)模型

私有化部署大模型Ollama 为什么需要私有化部署大模型一、Ollama本地部署Llama3大模型二、Langchain4j调用Ollama本地部署模型API三、Ollama本地部署nomic向量模型四、Spring AI调用Ollama本地部署模型API 为什么需要私有化部署大模型 企业考虑成本和数据隐私问题&#xff0c;会…

021_Thermal_Transient_in_Matlab统一偏微分框架之热传导问题

Matlab求解有限元专题系列 固体热传导方程 固体热传导的方程为&#xff1a; ρ C p ( ∂ T ∂ t u t r a n s ⋅ ∇ T ) ∇ ⋅ ( q q r ) − α T d S d t Q \rho C_p \left( \frac{\partial T}{\partial t} \mathbf{u}_{\mathtt{trans}} \cdot \nabla T \right) \nab…

BM算法(手算版)

BM 算法 BM 算法是一种字符串匹配的算法。 与 KMP 相比&#xff0c;BM 算法不扫描全部输入字符&#xff0c;平均匹配时间 c・n, 常量 c <1 (随机或真实文本), 但最坏情况是 O (n・m). 可以将 BM 算法的最坏情况改进到 O (n)&#xff1a;通过记录文本后缀中最…

计算机系统简介

一、计算机的软硬件概念 1.硬件&#xff1a;计算机的实体&#xff0c;如主机、外设、硬盘、显卡等。 2.软件&#xff1a;由具有各类特殊功能的信息&#xff08;程序&#xff09;组成。 系统软件&#xff1a;用来管理整个计算机系统&#xff0c;如语言处理程序、操作系统、服…

群晖前面加了雷池社区版,安装失败,然后无法识别出用户真实访问IP

有nas的相信对公网都不模式&#xff0c;在现在基础上传带宽能有100兆的时代&#xff0c;有公网代表着家里有一个小服务器&#xff0c;像百度网盘&#xff0c;优酷这种在线服务都能部署为私有化服务。但现在运营商几乎不可能提供公网ip&#xff0c;要么自己买个云服务器做内网穿…

通过github创建自己网页链接的方法

文章目录 要使用GitHub创建静态网页链接&#xff0c;可以按照以下详细步骤进行操作&#xff1a;一、准备阶段二、创建仓库并配置三、准备并上传静态网站文件四、配置GitHub Pages五、访问和更新你的静态网页 要使用GitHub创建静态网页链接&#xff0c;可以按照以下详细步骤进行…

uniapp微信小程序调用百度OCR

uniapp编写微信小程序调用百度OCR 公司有一个识别行驶证需求&#xff0c;调用百度ocr识别 使用了image-tools这个插件&#xff0c;因为百度ocr接口用图片的base64 这里只是简单演示&#xff0c;accesstoken获取接口还是要放在服务器端&#xff0c;不然就暴露了自己的百度项目k…

Xshell使用密钥远程登录Ubuntu 22.04报错:所选的用户密钥未在远程主机上注册。请再试一次

报错截图如下&#xff1a; 问题原因&#xff1a; Ubuntu 22.04 不支持 Xshell使用的私钥。 查看系统支持的私钥&#xff1a;sudo sshd -T | egrep "pubkey" ~$ sudo sshd -T | egrep "pubkey" pubkeyauthentication yes pubkeyacceptedalgorithms ssh-ed…

基于SpringBoot+Vue的旅游服务平台【提供源码+答辩PPT+参考文档+项目部署】

&#x1f4a5; ① 前言&#xff1a;这两年毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的JavaWeb项目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff01; ❗② 如何解决这类问题&#xff1f; 让我们能够顺利通过毕业&#xff0c;我也一直在不断思考、…

ROS 的 urdf 中 link 和 joint 的子标签中 origin 的含义

主要参考文章——主要文章&#xff0c;官方关于urdf的介绍和官方文档的翻译解析 link标签里面的origin含义 link标签里面有三个主要的子标签&#xff0c;分别是visual——连杆的外观和坐标系&#xff0c;collisoin——连杆的碰撞属性和inertial——连杆的惯性设置 首先&…

【AIGC】AI如何匹配RAG知识库: Embedding实践,语义搜索

引言 RAG作为减少模型幻觉和让模型分析、回答私域相关知识最简单高效的方式&#xff0c;我们除了使用之外可以尝试了解其是如何实现的。在实现RAG的过程中Embedding是非常重要的手段。本文将带你简单地了解AI工具都是如何通过Embedding去完成语义分析匹配的。 Embedding技术简…

低空经济发展迅猛,无人机设计制造技术详解

低空经济的迅猛发展&#xff0c;为无人机设计制造技术带来了新的机遇和挑战。无人机作为低空经济中的重要组成部分&#xff0c;其设计制造技术直接关系到无人机的性能、安全性和应用场景的拓展。以下是对无人机设计制造技术的详细解析&#xff1a; 一、无人机设计技术 1. 气动…

【HTML + CSS 魔法秀】打造惊艳 3D 旋转卡片

HTML结构 box 类是整个组件的容器。item-wrap 类是每个旋转卡片的包装器&#xff0c;每个都有一个内联样式–i&#xff0c;用于控制动画的延迟。item类是实际的卡片内容&#xff0c;包含一个图片。 <template><div class"box"><div class"item…

STM32L010F4 最小系统设计

画一个 STM32L010F4 的测试板子...... by 矜辰所致前言 最近需要用到一个新的 MCU&#xff1a; STM32L010F4 &#xff0c;上次测试的 VL53L0X 需要移植到这个芯片上&#xff0c;网上一搜 STM32L010F4&#xff0c;都是介绍资料&#xff0c;没有最小系统&#xff0c;使用说明等。…

计算生物学与生物信息学漫谈-1-测序一路走来

最近工作中&#xff0c;反思自己计算生物学基础非常薄弱&#xff0c;然而作为一门非常新兴的交叉学科&#xff0c;涉及计算机、物理、生物、数学等多多学科&#xff0c;国内并没有这样完善的教程&#xff0c;因此想要自己做一个教程&#xff0c;使用费曼学习法学习&#xff0c;…

探讨淘宝商品 API 接口:运用及收益

在当今电子商务蓬勃发展的时代&#xff0c;淘宝作为全球领先的电商平台&#xff0c;拥有海量的商品资源和庞大的用户群体。而淘宝商品 API 接口的出现&#xff0c;为开发者和企业提供了一种强大的工具&#xff0c;能够实现对淘宝商品数据的高效获取和利用。本文将深入探讨淘宝商…

C语言 | Leetcode C语言题解之第492题构造矩形

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> constructRectangle(int area) {int w sqrt(1.0 * area);while (area % w) {--w;}return {area / w, w};} };

2024年PDF转JPG新趋势,4款常用编辑工具梳理,不容错过

嘿&#xff0c;大家好&#xff0c;我是你们的老朋友&#xff0c;今天咱们聊个超实用的技巧——把PDF文件变成JPG图片&#xff0c;这样分享起来就方便多了。不管是工作汇报、学习资料还是生活照片&#xff0c;这招都能让你事半功倍。 1. 福昕PDF编辑器 闪现 ✚ https://editor…