核心概念:盒模型 与 Flexbox
在开始之前,需要理解两个关键的 CSS 概念:

(图片来源网络,侵删)
- 盒模型:在 CSS 中,每一个元素都可以看作一个盒子,这个盒子由 、
内边距、边框和外边距组成,理解盒模型是进行精确布局的基础。 - Flexbox (弹性盒布局):这是一种一维的布局方法,非常适合在容器中排列子元素,通过设置
display: flex;,我们可以轻松地控制子元素的排列方向、对齐方式、大小分配等,是实现现代布局最强大的工具之一。
完整的网页模板代码
下面是一个包含 HTML 和 CSS 的完整模板,您可以直接复制这些代码到一个 .html 文件中,在浏览器中打开即可看到效果。
index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">Div 布局模板</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 1. 页眉: 通常包含网站的标题和 Logo -->
<header class="main-header">
<h1>我的网站</h1>
</header>
<!-- 2. 导航栏: 包含网站的主要链接 -->
<nav class="main-nav">
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">服务</a></li>
<li><a href="#">博客</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
<!-- 3. 主体内容区: 使用 Flexbox 布局,包含侧边栏和主内容 -->
<div class="main-container">
<!-- 侧边栏 -->
<aside class="sidebar">
<h3>侧边栏</h3>
<p>这里是一些额外的链接或信息。</p>
<ul>
<li><a href="#">链接 1</a></li>
<li><a href="#">链接 2</a></li>
<li><a href="#">链接 3</a></li>
</ul>
</aside>
<!-- 主内容区 -->
<main class="content">
<article>
<h2>主文章标题</h2>
<p>这里是主要内容区域,你可以在这里放置文章、产品信息、图片等任何核心内容,这个区域通常是页面上最重要的部分,占据最多的空间。</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</article>
<article>
<h2>另一篇文章</h2>
<p>这是另一篇示例文章,展示了如何在主内容区放置多个独立的文章块。</p>
</article>
</main>
</div>
<!-- 4. 页脚: 包含版权信息、联系方式等 -->
<footer class="main-footer">
<p>© 2025 我的网站. 保留所有权利.</p>
</footer>
</body>
</html>
style.css
/* 全局样式和重置 */
* {
box-sizing: border-box; /* 让 padding 和 border 不会撑大元素 */
margin: 0;
padding: 0;
}
body {
font-family: Arial, sans-serif;
line-height: 1.6;
background-color: #f4f4f4;
color: #333;
}
/* 通用容器样式 */
.container {
width: 80%;
margin: 0 auto; /* 水平居中 */
padding: 20px;
}
/* --- 页眉 --- */
.main-header {
background-color: #333;
color: #fff;
text-align: center;
padding: 1rem;
margin-bottom: 20px;
}
/* --- 导航栏 --- */
.main-nav {
background-color: #444;
padding: 0.5rem 0;
}
.main-nav ul {
list-style-type: none; /* 移除列表前的点 */
display: flex; /* 使用 Flexbox 布局 */
justify-content: center; /* 水平居中 */
}
.main-nav ul li {
margin: 0 15px; /* 给列表项之间添加间距 */
}
.main-nav a {
color: #fff;
text-decoration: none; /* 移除下划线 */
font-weight: bold;
}
.main-nav a:hover {
text-decoration: underline;
}
/* --- 主体内容区 (Flexbox 布局的核心) --- */
.main-container {
display: flex; /* 将 .main-container 变成一个 flex 容器 */
gap: 20px; /* 子元素之间的间距 */
}
/* --- 侧边栏 --- */
.sidebar {
flex: 1; /* 占用 1 份空间 */
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
/* --- 主内容区 --- */
.content {
flex: 3; /* 占用 3 份空间,是侧边栏的 3 倍宽 */
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
/* --- 页脚 --- */
.main-footer {
background-color: #333;
color: #fff;
text-align: center;
padding: 1rem;
margin-top: 20px;
}
/* 响应式设计:在小屏幕上,布局变为单列 */
@media (max-width: 768px) {
.main-container {
flex-direction: column; /* 将子元素从水平排列改为垂直排列 */
}
.sidebar, .content {
flex: 1; /* 侧边栏和主内容区宽度相同 */
}
}
代码结构详解
HTML 结构
-
<header class="main-header">:<header>标签语义化地定义了页面的头部区域。- 通常包含网站的 Logo、主标题等。
-
<nav class="main-nav">:<nav>标签用于定义导航链接的区域。- 内部的
<ul>(无序列表) 是组织导航链接的最佳实践,因为它具有清晰的语义结构。
-
<div class="main-container">:
(图片来源网络,侵删)- 这是一个容器,它包裹了页面的核心布局部分(侧边栏和主内容)。
- 使用
<div>是因为它本身没有特定的语义,纯粹用于布局和分组。
-
<aside class="sidebar">:<aside>标签语义化地定义了侧边栏,其内容与页面的主要内容相关但可以独立存在(如链接、广告、作者信息等)。
-
<main class="content">:<main>标签定义了页面的主要内容,一个页面中只能有一个<main>元素。- 这里的
<article>标签用于表示一篇独立的文章或内容块。
-
`:
<footer>标签语义化地定义了页脚,通常包含版权信息、联系方式、相关链接等。
CSS 样式
-
*` { box-sizing: border-box; }`**:
(图片来源网络,侵删)- 非常重要的设置! 它告诉浏览器,当你设置一个元素的
width和height时,padding和border应该被包含在内,这使得布局计算变得非常直观。
- 非常重要的设置! 它告诉浏览器,当你设置一个元素的
-
.main-container { display: flex; }:- 这是整个布局的核心,它将
.main-container变成一个 Flex 容器,其直接子元素(.sidebar和.content)会自动成为 Flex 项目,并按照 Flex 规则进行排列。
- 这是整个布局的核心,它将
-
.sidebar { flex: 1; }和.content { flex: 3; }:flex属性是 Flexbox 的缩写,它定义了 Flex 项目如何分配容器的可用空间。flex: 1意味着.sidebar占用可用空间的 1 份。flex: 3意味着.content占用可用空间的 3 份。- 区的宽度是侧边栏的 3 倍,这是一种非常灵活和高效的布局方式。
-
gap: 20px;:- 这是 Flexbox 的一个属性,用于在 Flex 项目之间创建一个固定的间隙,比使用
margin更简单。
- 这是 Flexbox 的一个属性,用于在 Flex 项目之间创建一个固定的间隙,比使用
-
@media (max-width: 768px):- 这是响应式设计的关键,当浏览器窗口宽度小于 768 像素(在平板或手机上)时,这个代码块会生效。
flex-direction: column;将 Flex 容器的方向从水平(row,默认值)改为垂直(column),这样侧边栏就会跑到主内容的下面,形成单列布局,更适合小屏幕浏览。
如何使用这个模板
- 创建一个文件夹,
my-website。 - 在该文件夹中创建两个文件:
index.html和style.css。 - 将上面的代码分别复制粘贴到对应的文件中。
- 用浏览器打开
index.html文件,你就能看到一个完整的、带有响应式设计的布局模板了。 - 你可以基于此模板,修改内容、颜色、字体等,来构建你自己的网站。
