欢迎光临
我们一直在努力

【HTML+CSS+JS】前端入门第一周:从标签到九宫格,我把踩过的坑全记下来了

【HTML+CSS+JS】前端入门第一周:从标签到九宫格,我把踩过的坑全记下来了

前言

这周正式开始学前端,四天时间(10.19 — 10.22)从"网页是什么"一路敲到了能做一个小案例:朋友圈九宫格、10 秒倒计时、还有一个"不愿意"按钮的整蛊小程序。

刚开始我以为前端就是背标签,敲完这一周才发现:标签只是骨架,CSS 才是衣服,JS 才是让它动起来的那口气。这篇博客把这一周的学习路线、核心代码和踩过的坑完整整理一遍,既是复盘,也希望能帮到同样刚入门的同学。

先放一张这一周的知识地图:

HTML(骨架) → CSS(样式) → JavaScript(行为)
标签/表单 选择器/盒模型 变量/函数/DOM
表格/视频 flex / grid 定时器/事件


文章目录

  • 一、HTML:网页的骨架
    • 1 文档基本结构
    • 2 文本类标签
    • 3 图片标签与路径
    • 4 表格标签
    • 5 表单标签
    • 6 视频标签
  • 二、CSS:网页的衣服
    • 1 三种引入方式
    • 2 三种基础选择器
    • 3 颜色的三种表示
    • 4 盒子模型与 div / span
    • 5 flex 与 grid 布局
  • 三、JavaScript:网页的动作
    • 1 变量与数据类型
    • 2 运算符与分支
    • 3 函数
    • 4 循环
    • 5 DOM:获取元素与修改内容
    • 6 定时器
  • 四、三个练手小案例
  • 五、踩坑记录(这一周最值钱的部分)
  • 六、一周总结与下周计划

一、HTML:网页的骨架

HTML 全称 HyperText Markup Language,超文本标记语言。它不负责好看,只负责告诉浏览器"这块内容是什么"——这是标题、这是段落、这是图片、这是表格。

1 文档基本结构

任何一个页面,骨架都是固定的:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>

</body>
</html>

几个必须记住的点:

  • <!DOCTYPE html>:声明这是 HTML5 文档,必须写在第一行;
  • <head>:给浏览器看的信息(编码、视口、标题、引入的 CSS),不显示在页面上;
  • <body>:给用户看的内容,都写在这里;
  • charset="UTF-8":不加这句,中文大概率变乱码;
  • viewport:移动端适配的第一行代码,width=device-width 一个字母都不能错。

注意: 我一开始把 width=device-width 手滑写成了 width=f,电脑上看着没事,一到手机上页面就缩放错乱。这种"看起来像废话"的配置,往往是出问题最多的地方。

2 文本类标签

① 标题标签 h1 ~ h6

<h1>一级标题</h1>
<h2>二级标题</h2>

h1 一个页面只建议出现一次(SEO 和语义化的要求),h2 可以多次使用,用来分小节。

② 段落与换行

<p>这是一个段落,段落之间会自动换行并留出间距。</p>
<p>这是第二个段落。</p>

第一行<br>第二行
<hr> <!– 分割线 –>

<br> 和 <hr> 都是单标签(自闭合标签),不需要 </br>。

③ 文本修饰

<b>加粗</b>
<i>斜体</i>
<strong>强调(语义更重)</strong>
<span>行内容器,用来给一小段文字单独加样式</span>

④ 超链接

<a href="https://www.baidu.com" target="_blank">点我跳转百度</a>

  • href:跳转地址;
  • target="_blank":在新标签页打开。

⑤ 标签的嵌套

标签可以一层套一层,但必须先开后关、不能交叉:

<!– 正确 –>
<p>今天学了 <b>HTML</b> 和 <i>CSS</i></p>

<!– 错误:交叉嵌套 –>
<p>今天学了 <b>HTML</p></b>

3 图片标签与路径

<img src="1.jpg" alt="图片加载失败时的提示文字" width="300" height="200">

三个属性各有分工:

属性作用说明
src 图片地址 必填,找不到就显示 alt
alt 替代文字 图片打不开时显示,也利于无障碍阅读
width / height 宽高 只写一个,另一个会等比缩放

相对路径 vs 绝对路径:

<!– 相对路径:以当前 html 文件为参照 –>
<img src="1.jpg"> <!– 同目录 –>
<img src="images/1.jpg"> <!– 子目录 –>
<img src="../1.jpg"> <!– 上一级目录 –>

<!– 绝对路径:从盘符或域名开始 –>
<img src="D:/images/1.jpg">
<img src="https://example.com/1.jpg">

注意: 本地开发优先用相对路径。我一开始图省事写死了 D:/… 的绝对路径,换个文件夹图片就全挂了。

4 表格标签

表格由 table > tr > th/td 三层组成:tr 是一行,th 是表头单元格,td 是普通单元格。

<table border="1">
<tr>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>
<tr>
<td>张三</td>
<td>18</td>
<td>男</td>
</tr>
</table>

渲染出来就是一张带边框的三列表格。border="1" 是 HTML 属性写法,实际开发里更推荐用 CSS 的 border 控制。

5 表单标签

表单是用户和网页"对话"的入口,登录、搜索、注册全靠它。

<form action="https://baidu.com/s" method="get">
账号:<input type="text" name="wd" value=""><br>
密码:<input type="password" name="pwd"><br>

性别:<input type="radio" checked name="sex" value="nan">男
<input type="radio" name="sex" value="nv">女<br>

爱好:<input type="checkbox" checked name="hobby" value="hj">喝酒
<input type="checkbox" name="hobby" value="cy">抽烟<br>

头像:<input type="file" name="img">

<select name="city">
<option selected value="cq">重庆</option>
<option value="bj">北京</option>
</select>

<input type="submit" value="搜索">
</form>

action 和 method 是表单的两个核心属性:

  • action:数据提交到哪个地址;
  • method:get 或 post。get 会把参数拼在 URL 上,形如 http://baidu.com/s?wd=值&pwd=值&sex=值;post 放在请求体里,适合密码等敏感数据。

常见 input 类型:

type作用关键属性
text 单行文本框 name、value、placeholder
password 密码框(显示为圆点) name
radio 单选按钮 同组必须 name 相同
checkbox 多选框 同组 name 相同
file 文件上传 name
submit 提交按钮 value 是按钮文字

注意: radio 单选框要互斥,同组的 name 必须写成一样的;想要默认选中,加 checked。

6 视频标签

<video controls width="600">
<source src="xxx.mp4" type="video/mp4">
您的浏览器不支持视频播放
</video>

controls 会显示播放/暂停/进度条;<source> 可以写多个,浏览器会挑一个能播的格式;标签中间的文字是降级提示。


二、CSS:网页的衣服

HTML 决定"有什么",CSS 决定"长什么样"。

1 三种引入方式

<!– ① 行内样式:写在标签的 style 属性里,优先级最高,但最难维护 –>
<p style="color: blueviolet; font-size: 20px;">重庆移通学院</p>

<!– ② 内嵌样式:写在 head 的 style 标签里,当前页面生效 –>
<style>
p { color: blueviolet; }
</style>

<!– ③ 外链样式:单独建 style.css,用 link 引入,项目开发的标准做法 –>
<link rel="stylesheet" href="style.css">

2 三种基础选择器

/* ① 标签选择器:选中页面上所有该标签 */
p {
font-size: 16px;
color: #333;
}

/* ② id 选择器:以 # 开头,一个页面里 id 必须唯一 */
#continer {
width: 300px;
height: 300px;
background-color: blueviolet;
}

/* ③ 类选择器:以 . 开头,可以被多个标签复用 */
.stx {
font-family: "微软雅黑", sans-serif;
color: blue;
font-weight: 500;
}

对应到页面上:

<p>普通段落</p>
<p class="stx">双体</p>
<h1 class="stx">软件</h1>

注意: id 是身份证,只能有一个;class 是校服,谁都能穿。实际开发中类选择器用得最多。

3 颜色的三种表示

.box1 { color: rgb(5, 5, 5); } /* ① rgb:红绿蓝,0-255 */
.box2 { color: #0458a6; } /* ② 十六进制:#RRGGBB */
.box3 { color: red; } /* ③ 颜色关键字 */
.box4 { background: rgba(190, 44, 44, 0.8); } /* 带透明度 */

配色的时候我常用浏览器的取色器(F12 → 样式面板里的色块),吸一下就能拿到十六进制值,比肉眼猜准得多。

4 盒子模型与 div / span

页面上每一个元素,都可以看成一个盒子,从里到外四层:

content(内容)
padding(内边距)
border(边框)
margin(外边距)

.box {
width: 200px;
height: 100px;
padding: 10px; /* 内容和边框之间的距离 */
border: 1px solid pink; /* 边框 */
margin: 20px auto; /* 外边距,auto 实现水平居中 */
box-sizing: border-box; /* 让宽高包含 padding 和 border */
}

两个最常用的容器:

  • div:块级容器,独占一行,用来划分大区域;
  • span:行内容器,不换行,用来包一小段文字单独加样式。

<div class="header">
<span class="nickname">邹理财</span>
</div>

5 flex 与 grid 布局

这周最大的收获就是搞懂了这两个布局,很多以前要算半天的效果,几行代码就出来了。

① flex:一维布局(一行或一列)

.header {
display: flex;
align-items: center; /* 垂直居中 */
gap: 12px; /* 子元素间距 */
}

② grid:二维布局(行 + 列),九宫格的正确打开方式

.grid {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 三等分列 */
gap: 6px;
}

注意: repeat(3, 1fr) 的意思就是"重复 3 次,每列占 1 份",比写三个 33.33% 干净得多。

顺便记一下老师提到的几种典型网页布局,以后做项目可以照着套:

类型代表布局特点
展示宣传型 小米官网 大图 + 通栏,视觉冲击优先
交易型 京东 多列商品卡,信息密度高
协作出效率型 OA 系统 侧边导航 + 主内容区
内容型 CSDN 博客 单列长文,阅读体验优先

三、JavaScript:网页的动作

HTML 是骨架,CSS 是衣服,JS 才是让页面"活"起来的东西。

1 变量与数据类型

let a = 3; // 数字
let b = 3.14; // 小数
let c = "s"; // 字符串
let d; // 声明未赋值 → undefined
let e = true; // 布尔值
let arr = [a, b, c]; // 数组

console.log(a, b, c, d);
console.log(arr[0]); // 3

let 是现在的主流写法,var 有变量提升的问题,初学阶段建议直接用 let(常量用 const)。

2 运算符与分支

// 逻辑运算符:&& 与、|| 或、! 非(不是 & 和 |)
if (4 < 5 && 2 > 1) {
console.log("条件成立");
}

if (score >= 90) {
console.log("优秀");
} else if (score >= 60) {
console.log("及格");
} else {
console.log("不及格");
}

注意: JS 里的"与/或"是 && 和 ||,写成一个 & 是位运算,意思完全不一样——我第一天就写错了。

3 函数

function test(a, b) {
return a + b;
}

let sum = test(2, 3);
console.log(sum); // 5

function 定义,函数名() 调用,return 返回结果。不写 return 默认返回 undefined。

4 循环

let arr = [1, 2, 3, 4, "a"];

// for…in:拿到的是下标
for (let i in arr) {
console.log(arr[i]);
}

// for…of:拿到的是值(更常用)
for (let item of arr) {
console.log(item);
}

5 DOM:获取元素与修改内容

这是 JS 真正开始"操作网页"的地方。

① 获取元素

let ele = document.getElementById("continer"); // 通过 id
let items = document.querySelectorAll(".item"); // 通过选择器,返回集合

② 修改内容:innerText 与 innerHTML

ele.innerText = "ssss"; // 只改文字
ele.innerHTML = "<a href='http://www.baidu.com'>点我</a>"; // 可以解析 HTML 标签

两者的区别一定要分清:

属性是否解析标签使用场景
innerText 否,原样当文字 只改文字内容
innerHTML 是,会渲染成元素 需要插入标签结构

③ 修改样式

ele.style.height = "100px";
ele.style.backgroundColor = "red";
ele.style.position = "absolute";

④ 绑定事件

ele.addEventListener("click", function () {
alert("被点击了");
});

常见事件:click 点击、mouseover 鼠标移入、mouseout 移出、input 输入。

6 定时器

// setInterval:每隔一段时间执行一次,会一直执行
let timer = setInterval(function () {
console.log("每秒执行一次");
}, 1000);

// setTimeout:延迟一段时间后只执行一次
setTimeout(function () {
alert("时间到");
}, 500);

// 清除定时器
clearInterval(timer);


四、三个练手小案例

学完不练等于没学,这周敲了三个小案例,正好把 HTML、CSS、JS 串起来。

案例一:朋友圈九宫格

效果:头像 + 昵称 + 文字 + 3×3 图片墙,鼠标移上去图片微微放大。

核心 HTML:

<div class="moments">
<div class="header">
<div class="avatar"><img src="1.jpg" alt="头像"></div>
<div class="nickname">邹理财</div>
</div>

<div class="content-text">今日份快乐 ✨ 记录生活中的小美好~</div>

<div class="grid">
<img src="1.jpg" alt="图片1">
<img src="2.jpg" alt="图片2">
<img src="3.jpg" alt="图片3">
<!– 省略 4-9 –>
</div>

<div class="time">5分钟前</div>
</div>

核心 CSS:

* { margin: 0; padding: 0; box-sizing: border-box; }

body {
background: #f5f5f5;
padding: 20px;
font-family: "微软雅黑", sans-serif;
}

.moments {
max-width: 400px;
margin: 0 auto; /* 水平居中 */
background: #fff;
padding: 20px;
border-radius: 8px;
}

.header {
display: flex;
align-items: center;
margin-bottom: 15px;
}

.avatar {
width: 48px;
height: 48px;
border-radius: 6px;
overflow: hidden;
margin-right: 12px;
}

.avatar img { width: 100%; height: 100%; object-fit: cover; }

.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 6px;
}

.grid img {
width: 100%;
aspect-ratio: 1 / 1; /* 强制正方形 */
object-fit: cover; /* 裁剪填充,不变形 */
border-radius: 4px;
transition: transform 0.2s;
}

.grid img:hover { transform: scale(1.05); }

这里有两个关键点:

  • aspect-ratio: 1 / 1 + object-fit: cover:不管原图什么比例,都裁成正方形且不变形;
  • transition + :hover:鼠标移入时放大 5%,加了过渡才显得"顺滑"。

案例二:10 秒倒计时

效果:一个大数字从 10 倒数到 0,归零后高位减 1 并重新回到 10。

<div id="continer1">4</div>
<div id="continer2">10</div>

<script>
let e1 = document.getElementById("continer1");
let e2 = document.getElementById("continer2");

setInterval(function () {
e2.innerText = Number(e2.innerText) – 1;

if (Number(e2.innerText) === 0) {
e1.innerText = Number(e1.innerText) – 1;
e2.innerText = 10;
}
}, 1000);
</script>

这里必须用 Number() 转换:innerText 拿到的是字符串,字符串直接减 1 虽然 JS 会隐式转换,但一旦写成 innerText + 1 就变成字符串拼接了。养成显式转换的习惯,能少一堆莫名其妙的 bug。

案例三:"不愿意"按钮(整蛊小程序)

效果:页面上问"做我女朋友吧","愿意"按钮正常,"不愿意"按钮鼠标一碰就跳转百度。

<h1>做我女朋友吧</h1>
<button>愿意</button>
<button id="n">不愿意</button>

<script>
let ele_n = document.getElementById("n");

ele_n.addEventListener("mouseover", function () {
ele_n.style.position = "absolute";
location.href = "https://www.baidu.com";
});
</script>

想让它"躲着鼠标跑",把跳转换成随机定位就行:

ele_n.addEventListener("mouseover", function () {
ele_n.style.left = Math.random() * window.innerWidth + "px";
ele_n.style.top = Math.random() * window.innerHeight + "px";
});

Math.random() 返回 0~1 的小数,乘上窗口宽高就得到随机坐标。这也是我第一次直观感受到:JS 真的能改变页面。


五、踩坑记录(这一周最值钱的部分)

说实话,这一周有一半时间不是在学新知识,而是在跟自己的手滑作斗争。整理一张表,提醒自己:

错误写法现象正确写法
ele.addEventListeneer(…) 控制台报 not a function,事件不生效 addEventListener
ele.innerHTNL = … 页面毫无反应,也不报错 innerHTML
content="width=f, …" 电脑正常,手机端缩放错乱 width=device-width
在 <body> 里直接写 // 注释 注释被当成文字渲染到页面上 用 <!– –> 或写进 <script>
for (i in arr) i 变成隐式全局变量 for (let i in arr)
innerText == 0 判断 字符串和数字比较,容易出错 Number(innerText) === 0
<title>Doucument</title> 标签页标题不显示 Document
<img src="D:/…"> 换台电脑图片全挂 改用相对路径

血泪经验: 前端出错时第一件事永远是打开 F12 看控制台。90% 的"没反应",控制台里都写着原因——方法名拼错、元素没取到、变量未定义。学会看报错,比多敲十遍代码有用。


六、一周总结与下周计划

本周收获

  • HTML:掌握了文档结构、文本标签、图片与路径、表格、表单、视频标签,能独立写出结构完整的页面;
  • CSS:理解了三种引入方式和三种选择器,搞懂了盒子模型,能用 flex 做一维布局、用 grid 做九宫格;
  • JavaScript:掌握了变量、运算符、函数、分支、循环,能用 DOM 取元素、改内容、绑事件,会用定时器;
  • 实战:独立完成朋友圈九宫格、倒计时、"不愿意"按钮三个小案例。

下周计划

  • 补 CSS 进阶:定位(position)、伪类、媒体查询与响应式;
  • 把九宫格案例改成响应式,手机和电脑都能正常显示;
  • 学 DOM 事件进阶(事件冒泡、事件委托);
  • 尝试做一个完整的小页面,把这一周的东西全用上。
  • 最后

    这一周最大的感受是:前端不是背出来的,是敲出来的。 看十遍教程,不如自己把 addEventListener 拼错一次——错一次,这辈子都记住了。代码跑起来的那一刻,才是真的学会了。 如果这篇笔记对你有帮助,欢迎点赞收藏;也在学前端的朋友可以评论区交流,一起进步 🚀


    本文为个人学习记录,转载请注明出处。

    赞(0)
    未经允许不得转载:171主机测评 » 【HTML+CSS+JS】前端入门第一周:从标签到九宫格,我把踩过的坑全记下来了
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址