
🔎大家好,我是ZTLJQ,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
📝个人主页-ZTLJQ的主页
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝📣系列果你对这个系列感兴趣的话
专栏 - Python从零到企业级应用:短时间成为市场抢手的程序员
✔说明⇢本人讲解主要包括Python爬虫、JS逆向、Python的企业级应用
如果你对这个系列感兴趣的话,可以关注订阅哟👋
开启Web之旅
在浩瀚的互联网世界中,每一个网页都是一座精心构建的数字建筑。而要建造这座建筑,我们离不开三种最核心、最基础的"建材"------HTML 、CSS 和 JavaScript。这三者分工明确,协同合作,共同构成了我们所看到的一切网页。
- HTML (HyperText Markup Language): 网页的"骨架"和"内容"。它定义了页面上有什么,比如标题、段落、图片、链接等。
- CSS (Cascading Style Sheets): 网页的"皮肤"和"装修"。它决定了页面内容看起来怎么样,比如颜色、字体、布局、动画等。
- JavaScript (JS): 网页的"肌肉"和"灵魂"。它赋予了页面动态交互的能力,让页面可以响应用户的点击、滚动、输入等行为,实现复杂的逻辑。
本篇博客将带您从零开始,深入浅出地学习这三项基础技术,并通过实际案例,亲手构建一个功能完整的网页。
第一部分:HTML - 网页的结构与内容
HTML是所有Web技术的基石。它是一种标记语言,通过一系列的"标签"(Tag)来告诉浏览器如何显示文本、图像和其他内容。
1.1 HTML基础结构
一个标准的HTML文档遵循以下基本结构:
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>我的第一个网页</title>
</head>
<body>
<!-- 页面的可见内容写在这里 -->
<h1>欢迎来到我的网站!</h1>
<p>这是一个段落。</p>
</body>
</html>
结构解析:
<!DOCTYPE html>: 声明这是一个HTML5文档。<html>: 根元素,所有其他HTML元素都必须是它的后代。<head>: 包含页面的元数据(metadata),如字符编码、标题、引入的CSS/JS文件等,这些内容不会直接显示在页面上。<meta charset="UTF-8">: 定义文档的字符编码,UTF-8可以正确显示世界上几乎所有的字符。<meta name="viewport"...>: 响应式设计的关键,它告诉移动设备如何控制页面的尺寸和缩放。<title>: 定义浏览器标签页上显示的标题。<body>: 包含页面的所有可见内容,如文本、图片、链接等。
1.2 常用HTML标签
| 标签 | 描述 | 示例 |
|---|---|---|
<h1> 到 <h6> |
标题标签,<h1> 最重要,<h6> 最不重要 |
<h1>主标题</h1> |
<p> |
段落标签 | <p>这是一个段落。</p> |
<a> |
超链接标签 | <a href="https://www.example.com">点击这里</a> |
<img> |
图片标签 | <img src="image.jpg" alt="图片描述"> |
<ul>, <ol>, <li> |
无序列表、有序列表、列表项 | <ul><li>项目一</li></ul> |
<div> |
通用块级容器,用于布局和样式分组 | <div class="container">...</div> |
<span> |
通用行内容器,用于包裹一小段内容 | <p>一段文字中有 <span class="highlight">高亮</span> 部分</p> |
<form>, <input>, <button> |
表单及表单控件,用于收集用户输入 | <form><input type="text" name="username"><button type="submit">提交</button></form> |
1.3 实战案例:创建一个个人作品集页面
让我们创建一个更贴近实际的案例------一个展示个人作品的页面,来综合运用HTML结构和表单元素。
portfolio.html 文件:
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Alice Chen - 作品集</title>
</head>
<body>
<header>
<nav>
<ul>
<li><a href="#home">首页</a></li>
<li><a href="#projects">项目</a></li>
<li><a href="#about">关于</a></li>
<li><a href="#contact">联系</a></li>
</ul>
</nav>
</header>
<main>
<section id="home">
<h1>Hi, I'm Alice Chen</h1>
<p>一名充满热情的Python后端工程师和Web应用开发者。</p>
</section>
<section id="projects">
<h2>我的项目</h2>
<article class="project-card">
<h3>智能博客平台</h3>
<p>使用Django开发的高性能博客系统,支持Markdown编辑、评论系统和用户认证。</p>
<img src="blog-platform-screenshot.png" alt="智能博客平台截图">
</article>
<article class="project-card">
<h3>数据可视化仪表盘</h3>
<p>利用Flask + Chart.js构建的实时数据监控仪表盘,用于展示业务关键指标。</p>
<img src="dashboard-screenshot.png" alt="数据可视化仪表盘截图">
</article>
</section>
<section id="about">
<h2>关于我</h2>
<p>我毕业于XX大学计算机科学专业,专注于Python生态系统。我热衷于构建可扩展、高效的后端服务,并积极探索前端技术以提升用户体验。</p>
</section>
<section id="contact">
<h2>联系我</h2>
<form action="#" method="POST">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" required>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" required>
<label for="message">留言:</label>
<textarea id="message" name="message" rows="5" required></textarea>
<button type="submit">发送消息</button>
</form>
</section>
</main>
<footer>
<p>© 2026 Alice Chen. All rights reserved.</p>
</footer>
</body>
</html>
案例解析:
- 语义化标签 : 大量使用了HTML5的语义化标签,如
<header>,<nav>,<main>,<section>,<article>,<footer>。这些标签不仅使HTML结构更清晰,也有助于搜索引擎理解和索引页面内容。- 锚点链接 : 导航栏中的
<a href="#home">等链接,配合页面上对应的<section id="home">,实现了页面内的平滑跳转。- 表单结构 :
<form>标签包含了<label>,<input>,<textarea>,<button>等元素,用于收集用户输入。required属性是客户端验证的一种简单方式。
第二部分:CSS - 网页的美化与布局
HTML定义了内容,而CSS则负责让内容变得好看。CSS通过"选择器"找到HTML元素,并为其"声明"各种样式规则。
2.1 CSS基础语法
css
选择器 {
属性名: 属性值;
属性名2: 属性值2;
}
示例:
css
h1 {
color: blue;
font-size: 24px;
}
这段CSS代码会选择所有的<h1>标签,并将其文字颜色设为蓝色,字号设为24像素。
2.2 引入CSS的方法
-
行内样式 (Inline Styles) : 直接在HTML标签的
style属性中写CSS。优先级最高,但不易维护。html<h1 style="color: red;">这是红色的标题</h1> -
内部样式表 (Internal Stylesheet) : 在HTML文档的
<head>部分使用<style>标签。html<head> <style> body { background-color: lightgray; } </style> </head> -
外部样式表 (External Stylesheet) : 将CSS代码写在一个独立的
.css文件中,然后在HTML中用<link>标签引入。这是最推荐、最常用的方法。
html
<head>
<link rel="stylesheet" href="styles.css">
</head>
2.3 实战案例:为作品集页面添加现代化样式
创建一个名为 styles.css 的新文件,并为其添加以下内容,来美化我们刚才创建的作品集页面。
styles.css 文件:
css
/* 重置默认样式,确保在不同浏览器上表现一致 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
line-height: 1.6;
color: #333;
background-color: #f8f9fa; /* 浅灰色背景 */
}
/* 导航栏样式 */
header {
background-color: #2c3e50; /* 深蓝色背景 */
padding: 1rem 0;
position: sticky; /* 粘性定位,滚动时固定在顶部 */
top: 0;
z-index: 100; /* 确保导航栏在其他内容之上 */
}
nav ul {
list-style: none;
display: flex;
justify-content: center; /* 导航项居中 */
gap: 2rem; /* 导航项之间的间距 */
}
nav a {
color: white;
text-decoration: none;
font-weight: bold;
padding: 0.5rem 1rem;
border-radius: 4px;
transition: background-color 0.3s ease; /* 平滑过渡效果 */
}
nav a:hover {
background-color: #34495e; /* 鼠标悬停时的背景色 */
}
/* 主要内容区 */
main {
max-width: 1200px; /* 最大宽度 */
margin: 2rem auto; /* 左右自动居中,上下留白 */
padding: 0 1rem;
}
/* 通用章节样式 */
section {
margin-bottom: 3rem;
padding: 2rem;
background-color: white;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); /* 添加阴影 */
}
h1, h2, h3 {
color: #2c3e50;
}
h1 {
font-size: 2.5rem;
margin-bottom: 1rem;
}
h2 {
font-size: 2rem;
margin-bottom: 1.5rem;
border-bottom: 2px solid #3498db; /* 添加底部边框 */
padding-bottom: 0.5rem;
}
/* 项目卡片样式 */
.project-card {
margin-bottom: 2rem;
padding: 1.5rem;
border: 1px solid #eee;
border-radius: 6px;
background-color: #fcfdfe;
}
.project-card img {
width: 100%; /* 图片占满容器宽度 */
height: auto; /* 保持宽高比 */
margin-top: 1rem;
border-radius: 4px;
}
/* 表单样式 */
form {
display: flex;
flex-direction: column; /* 垂直排列 */
gap: 1rem; /* 元素之间的间距 */
}
label {
font-weight: bold;
margin-top: 0.5rem;
}
input, textarea {
padding: 0.8rem;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1rem;
}
input:focus, textarea:focus {
outline: none; /* 移除默认焦点轮廓 */
border-color: #3498db; /* 聚焦时的边框颜色 */
}
button {
padding: 0.8rem 1.5rem;
background-color: #3498db;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #2980b9;
}
/* 页脚样式 */
footer {
text-align: center;
padding: 2rem;
background-color: #34495e;
color: white;
margin-top: 3rem;
}
然后,在你的portfolio.html文件的<head>部分引入这个CSS文件:
html
<!-- ... -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Alice Chen - 作品集</title>
<link rel="stylesheet" href="styles.css"> <!-- 引入外部CSS文件 -->
</head>
<!-- ... -->
案例解析:
- CSS盒模型 :
box-sizing: border-box;确保元素的padding和border包含在width和height之内,简化了布局计算。- Flexbox布局 :
display: flex;和flex-direction: column;用于创建灵活的水平和垂直布局。justify-content: center;和gap属性让导航栏和表单的布局变得异常简单。- 响应式单位 :
max-width: 1200px;和margin: 2rem auto;让主要内容区在大屏幕上居中且有最大宽度,在小屏幕上自动填满。- 视觉效果 :
box-shadow,border-radius,transition等属性大大提升了页面的视觉美感和用户体验。- 粘性定位 :
position: sticky;让导航栏在用户向下滚动时固定在屏幕顶部,方便随时跳转。
第三部分:JavaScript - 网页的动态与交互
如果说HTML是房子,CSS是装修,那么JavaScript就是房子里的居民,让它"活"了起来。JavaScript可以直接操作HTML文档(DOM),响应用户事件,并与服务器通信。
3.1 JavaScript基础语法
JavaScript代码可以直接写在HTML的<script>标签内,也可以放在一个独立的.js文件中。
示例:
html
<script>
// 这是一个弹窗
alert("Hello, World!");
// 定义一个变量
let message = "你好,JavaScript!";
console.log(message); // 在浏览器控制台输出
</script>
3.2 DOM (Document Object Model) 操作
DOM是HTML文档在JavaScript中的对象表示。通过DOM API,JavaScript可以动态地修改页面内容、结构和样式。
3.3 实战案例:为作品集页面添加交互功能
我们来为页面添加一个"主题切换"按钮,让用户可以选择明亮或暗黑主题,同时为表单添加简单的客户端验证。
第一步:修改 portfolio.html,添加主题切换按钮
在 <nav> 标签内部,放在<ul>之前:
html
<header>
<button id="theme-toggle">切换主题</button> <!-- 添加此按钮 -->
<nav>
<ul>
...
第二步:扩展 styles.css,定义暗黑主题
在styles.css文件的最后添加以下代码:
css
/* 暗黑主题样式 */
body.dark-theme {
background-color: #1a1a1d;
color: #e0e0e0;
}
.dark-theme header {
background-color: #2d2d2d;
}
.dark-theme section {
background-color: #2d2d2d;
color: #e0e0e0;
}
.dark-theme .project-card {
background-color: #3a3a3a;
border-color: #555;
}
.dark-theme h1, .dark-theme h2, .dark-theme h3 {
color: #f0f0f0;
}
.dark-theme footer {
background-color: #2d2d2d;
color: #e0e0e0;
}
.dark-theme input, .dark-theme textarea {
background-color: #3a3a3a;
color: #e0e0e0;
border-color: #555;
}
第三步:创建 script.js 文件,编写交互逻辑
script.js 文件:
javascript
// 等待DOM内容加载完成后再执行脚本
document.addEventListener('DOMContentLoaded', function() {
// --- 主题切换功能 ---
const themeToggleBtn = document.getElementById('theme-toggle');
const currentTheme = localStorage.getItem('theme');
if (currentTheme === 'dark') {
document.body.classList.add('dark-theme');
}
themeToggleBtn.addEventListener('click', function() {
document.body.classList.toggle('dark-theme');
const isDark = document.body.classList.contains('dark-theme');
localStorage.setItem('theme', isDark ? 'dark' : 'light');
});
// --- 表单验证功能 ---
const contactForm = document.querySelector('#contact form');
contactForm.addEventListener('submit', function(event) {
event.preventDefault(); // 阻止表单默认提交
const nameInput = document.getElementById('name');
const emailInput = document.getElementById('email');
const messageInput = document.getElementById('message');
// 简单的验证逻辑
if (!nameInput.value.trim()) {
alert('请输入您的姓名。');
nameInput.focus();
return;
}
if (!emailInput.value.trim() || !isValidEmail(emailInput.value.trim())) {
alert('请输入一个有效的邮箱地址。');
emailInput.focus();
return;
}
if (!messageInput.value.trim()) {
alert('请填写您的留言。');
messageInput.focus();
return;
}
// 如果验证通过,可以在这里处理表单提交(例如,发送AJAX请求)
alert('表单验证成功!(实际项目中,这里会发送数据到服务器)');
// 重置表单
contactForm.reset();
});
// 辅助函数:验证邮箱格式
function isValidEmail(email) {
const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return re.test(email);
}
});
第四步:在 portfolio.html 中引入 script.js
html
<!-- 在 </body> 标签关闭前引入JS文件 -->
<!-- ... -->
<footer>
<p>© 2026 Alice Chen. All rights reserved.</p>
</footer>
<script src="script.js"></script> <!-- 引入外部JS文件 -->
</body>
</html>
案例解析:
document.querySelector(...)和document.getElementById(...): 获取DOM元素的不同方法,querySelector更加灵活,可以使用CSS选择器。addEventListener('click', ...)和addEventListener('submit', ...): 为元素添加事件监听器。event.preventDefault()是处理表单提交的核心,它阻止了页面刷新,让我们可以用JavaScript来处理后续逻辑。classList.toggle(...): 切换CSS类,是实现主题切换的简洁方法。localStorage: 用于在用户浏览器中持久化存储数据。在这里,我们用来记住用户选择的主题。- 客户端验证 :
isValidEmail函数使用正则表达式(Regex)来检查邮箱格式。虽然这不是服务器端安全的替代品,但它能即时给用户提供反馈,改善体验。
总结:三剑客的协同作战
至此,我们已经完整地走过了HTML、CSS和JavaScript的基础路程,并亲手打造了一个功能丰富、美观大方的个人作品集页面。
- HTML 构建了网页的骨架和内容(导航、项目、表单)。
- CSS 让网页变得美观、布局整齐、响应式且交互流畅。
- JavaScript 赋予网页生命,实现了主题切换、表单验证等动态交互功能。