前言

Web前端开发是一个快速发展的领域,掌握HTML、CSS和JavaScript这三大核心技术是成为优秀前端工程师的基础。本文将系统梳理这三个技术栈的核心知识点,并结合常见的面试题进行深入解析,帮助读者快速复习和巩固知识。


一、HTML 核心知识点

1. HTML5 语义化标签

HTML5引入了许多语义化标签,这些标签不仅让代码更具可读性,还对SEO(搜索引擎优化)和无障碍访问(Accessibility)有重要意义。

常用语义化标签:

  • <header>:定义文档或节的页眉。
  • <nav>:定义导航链接。
  • <main>:定义页面的主要内容。
  • <article>:定义独立的内容区域。
  • <section>:定义文档中的节。
  • <aside>:定义侧边栏内容。
  • <footer>:定义文档或节的页脚。

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>语义化标签示例</title>
</head>
<body>
    <header>
        <h1>网站标题</h1>
        <nav>
            <ul>
                <li><a href="#">首页</a></li>
                <li><a href="#">关于我们</a></li>
            </ul>
        </nav>
    </header>
    <main>
        <article>
            <h2>文章标题</h2>
            <p>这是一篇关于语义化标签的文章。</p>
        </article>
        <aside>
            <p>侧边栏内容</p>
        </aside>
    </main>
    <footer>
        <p>&copy; 2023 网站名称</p>
    </footer>
</body>
</html>

2. 表单元素与验证

HTML5增强了表单功能,新增了多种输入类型和验证属性。

常用输入类型:

  • email:邮箱输入框。
  • url:URL输入框。
  • number:数字输入框。
  • date:日期选择器。
  • range:滑动条。

常用验证属性:

  • required:字段必填。
  • pattern:正则表达式验证。
  • min 和 max:数值范围限制。
  • minlength 和 maxlength:字符长度限制。

示例:

<form>
    <label for="email">邮箱:</label>
    <input type="email" id="email" name="email" required>
    <br>
    <label for="age">年龄(18-99):</label>
    <input type="number" id="age" name="age" min="18" max="99" required>
    <br>
    <label for="password">密码(至少8位):</label>
    <input type="password" id="password" name="password" minlength="8" required>
    <br>
    <button type="submit">提交</button>
</form>

3. 多媒体标签

HTML5支持原生的音频和视频播放,无需依赖第三方插件。

常用标签:

  • <audio>:音频播放。
  • <video>:视频播放。

示例:

<!-- 音频播放 -->
<audio controls>
    <source src="audio.mp3" type="audio/mpeg">
    您的浏览器不支持音频播放。
</audio>

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

二、CSS 核心知识点

1. 盒模型

CSS盒模型是布局的基础,每个元素都被视为一个矩形盒子,包含内容(content)、内边距(padding)、边框(border)和外边距(margin)。

盒模型的两种模式:

  • content-box:默认模式,宽度和高度只包含内容。
  • border-box:宽度和高度包含内容、内边距和边框。

示例:

/* 设置盒模型为 border-box */
* {
    box-sizing: border-box;
}

.box {
    width: 200px;
    height: 100px;
    padding: 20px;
    border: 5px solid black;
    margin: 10px;
    background-color: lightblue;
}

2. Flexbox 布局

Flexbox 是一种现代的布局方式,适合处理一维布局(行或列)。

常用属性:

  • display: flex:定义 Flex 容器。
  • justify-content:主轴对齐方式。
  • align-items:交叉轴对齐方式。
  • flex-direction:主轴方向。
  • flex-wrap:是否换行。

示例:

.container {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-direction: row;
    flex-wrap: wrap;
    height: 200px;
    background-color: #f0f0f0;
}

.item {
    width: 100px;
    height: 50px;
    background-color: lightcoral;
    margin: 5px;
}
<div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
</div>

3. Grid 布局

Grid 是一种二维布局方式,适合处理复杂的页面布局。

常用属性:

  • display: grid:定义 Grid 容器。
  • grid-template-columns:定义列模板。
  • grid-template-rows:定义行模板。
  • gap:定义网格间距。

示例:

.grid-container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: 100px 100px;
    gap: 10px;
    background-color: #e0e0e0;
    padding: 10px;
}

.grid-item {
    background-color: lightgreen;
    display: flex;
    justify-content: center;
    align-items: center;
}
<div class="grid-container">
    <div class="grid-item">1</div>
    <div class="grid-item">2</div>
    <div class="grid-item">3</div>
    <div class="grid-item">4</div>
    <div class="grid-item">5</div>
    <div class="grid-item">6</div>
</div>

4. 响应式设计

响应式设计通过媒体查询(Media Queries)和相对单位(如 rem、vw、vh)实现。

示例:

/* 默认样式 */
body {
    font-size: 16px;
}

/* 平板设备 */
@media (max-width: 768px) {
    body {
        font-size: 14px;
    }
}

/* 手机设备 */
@media (max-width: 480px) {
    body {
        font-size: 12px;
    }
}

三、JavaScript 核心知识点

1. 数据类型与类型转换

JavaScript 有 8 种数据类型:

  • 基本类型:String、Number、Boolean、Null、Undefined、Symbol、BigInt。
  • 引用类型:Object。

类型转换:

  • 显式转换:Number()、String()、Boolean()。
  • 隐式转换:运算符操作时自动转换。

示例:

// 显式转换
let str = "123";
let num = Number(str); // 123

let num2 = 456;
let str2 = String(num2); // "456"

// 隐式转换
let result = "5" + 1; // "51"
let result2 = "5" - 1; // 4

2. 作用域与闭包

作用域:

  • 全局作用域:在任何地方都可以访问。
  • 函数作用域:只在函数内部可以访问。
  • 块级作用域(ES6):使用 let 和 const 定义的变量。

闭包: 闭包是指函数可以访问其外部作用域的变量。

示例:

// 闭包示例
function outer() {
    let count = 0;
    return function inner() {
        count++;
        return count;
    };
}

const counter = outer();
console.log(counter()); // 1
console.log(counter()); // 2

3. 异步编程

JavaScript 是单线程语言,异步编程通过回调函数、Promise 和 async/await 实现。

Promise 示例:

const fetchData = () => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("数据加载完成");
        }, 2000);
    });
};

fetchData().then((data) => {
    console.log(data);
});

async/await 示例:

const fetchData = () => {
    return new Promise((resolve) => {
        setTimeout(() => resolve("数据加载完成"), 2000);
    });
};

async function getData() {
    const data = await fetchData();
    console.log(data);
}

getData();

4. ES6+ 新特性

  • 箭头函数: const add = (a, b) => a + b;
  • 解构赋值: const { name, age } = person;
  • 模板字符串: `Hello, ${name}`
  • 模块化: import 和 export。
  • 类: class 关键字。

示例:

// 箭头函数
const multiply = (a, b) => a * b;

// 解构赋值
const person = { name: "Alice", age: 25 };
const { name, age } = person;

// 模板字符串
const greeting = `Hello, ${name}`;

// 模块化
// math.js
export const add = (a, b) => a + b;

// main.js
import { add } from './math.js';
console.log(add(2, 3)); // 5

// 类
class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
    sayHello() {
        console.log(`Hello, my name is ${this.name}`);
    }
}
const alice = new Person("Alice", 25);
alice.sayHello();

四、常见面试题解析

1. HTML 面试题

Q: 什么是语义化标签?为什么使用它们?

  • A: 语义化标签如 <header>、<nav> 等,能够清晰地描述内容的结构,提升代码可读性,利于SEO和无障碍访问。

Q: HTML5 新增了哪些表单输入类型?

  • A: email、url、number、date、range 等。

2. CSS 面试题

Q: 什么是盒模型?如何切换盒模型?

  • A: 盒模型包含内容、内边距、边框和外边距。通过 box-sizing: border-box 可以切换为包含内边距和边框的盒模型。

Q: Flexbox 和 Grid 的区别是什么?

  • A: Flexbox 是一维布局,适合处理行或列;Grid 是二维布局,适合处理复杂的页面结构。

3. JavaScript 面试题

Q: 什么是闭包?闭包的优缺点是什么?

  • A: 闭包是函数可以访问其外部作用域的变量。优点是能封装私有变量,缺点是可能导致内存泄漏。

Q: Promise 和 async/await 的区别是什么?

  • A: Promise 是基于回调的异步处理方式,而 async/await 是基于 Promise 的语法糖,使异步代码更像同步代码,更易读。

五、总结

本文详细梳理了 HTML、CSS 和 JavaScript 的核心知识点,并结合常见面试题进行了解析。希望这些内容能帮助你更好地复习和掌握前端开发的基础知识。在实际开发中,多动手实践,结合项目经验,才能更深入地理解和运用这些技术。祝你面试顺利!