HTML 负责搭建页面结构,CSS 负责样式设计,并且通过媒体查询实现了较好的响应式效果,能够适应不同屏幕尺寸下面就是写了一个详细的实例。
CSS 部分
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
*
是通配选择器,会选中页面上的所有元素。margin: 0;
将所有元素的外边距设置为 0。padding: 0;
将所有元素的内边距设置为 0。box-sizing: border-box;
改变元素宽度和高度的计算方式,使元素的宽度和高度包含内边距和边框,但不包含外边距。
body {
font-family: Arial, sans-serif;
line-height: 1.6;
}
font-family: Arial, sans-serif;
设置页面主体文字的字体为 Arial,如果 Arial 不可用,则使用系统默认的无衬线字体。line-height: 1.6;
设置行高为字体大小的 1.6 倍,让文字在垂直方向上有合适的间距。
header {
background-color: #333;
color: white;
padding: 1rem;
}
background-color: #333;
设置header
元素的背景颜色为深灰色。color: white;
设置header
内文字的颜色为白色。padding: 1rem;
给header
元素添加 1 个根元素字体大小的内边距。
nav {
display: flex;
justify-content: space-between;
align-items: center;
max-width: 1200px;
margin: 0 auto;
}
display: flex;
将nav
元素设置为弹性布局容器。justify-content: space-between;
在水平方向上,将子元素均匀分布,两端对齐。align-items: center;
在垂直方向上,将子元素居中对齐。max-width: 1200px;
设置nav
元素的最大宽度为 1200 像素。margin: 0 auto;
让nav
元素在水平方向上居中显示。
nav ul {
display: flex;
list-style: none;
}
display: flex;
将nav
内的无序列表设置为弹性布局容器。list-style: none;
去除无序列表的默认列表项标记。
nav ul li {
margin-left: 2rem;
}
margin-left: 2rem;
给nav
内无序列表的每个列表项添加 2 个根元素字体大小的左外边距。
nav a {
color: white;
text-decoration: none;
}
color: white;
设置nav
内链接文字的颜色为白色。text-decoration: none;
去除链接的下划线。
.portfolio {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
padding: 2rem;
max-width: 1200px;
margin: 0 auto;
}
display: grid;
将.portfolio
元素设置为网格布局容器。grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
定义网格列的布局,会根据容器宽度自动适应列数,每列最小宽度为 300 像素,最大宽度平均分配剩余空间。gap: 2rem;
设置网格项之间的间距为 2 个根元素字体大小。padding: 2rem;
给.portfolio
元素添加 2 个根元素字体大小的内边距。max-width: 1200px;
设置.portfolio
元素的最大宽度为 1200 像素。margin: 0 auto;
让.portfolio
元素在水平方向上居中显示。
.card {
background: #f4f4f4;
padding: 1rem;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
background: #f4f4f4;
设置.card
元素的背景颜色为浅灰色。padding: 1rem;
给.card
元素添加 1 个根元素字体大小的内边距。border-radius: 8px;
给.card
元素添加 8 像素的圆角。box-shadow: 0 2px 5px rgba(0,0,0,0.1);
给.card
元素添加一个轻微的阴影效果。
.card img {
width: 100%;
height: auto;
border-radius: 4px;
}
width: 100%;
设置.card
内图片的宽度为父元素宽度的 100%。height: auto;
让图片的高度根据宽度自动调整,保持图片的原始比例。border-radius: 4px;
给.card
内图片添加 4 像素的圆角。
.card h3 {
margin: 1rem 0;
}
margin: 1rem 0;
给.card
内的h3
标题添加上下 1 个根元素字体大小的外边距。
footer {
background: #333;
color: white;
text-align: center;
padding: 1rem;
position: fixed;
bottom: 0;
width: 100%;
}
background: #333;
设置footer
元素的背景颜色为深灰色。color: white;
设置footer
内文字的颜色为白色。text-align: center;
让footer
内的文字居中显示。padding: 1rem;
给footer
元素添加 1 个根元素字体大小的内边距。position: fixed;
将footer
元素固定在页面上。bottom: 0;
让footer
元素位于页面底部。width: 100%;
设置footer
元素的宽度为 100%。
/* 响应式设计 */
@media (max-width: 768px) {
nav {
flex-direction: column;
text-align: center;
}
nav ul {
margin-top: 1rem;
flex-direction: column;
}
nav ul li {
margin: 0.5rem 0;
}
.portfolio {
grid-template-columns: 1fr;
padding: 1rem;
}
}
@media (max-width: 768px)
是媒体查询,当屏幕宽度小于等于 768 像素时,应用以下样式。flex-direction: column;
将nav
元素和nav
内的无序列表的弹性布局方向改为垂直方向。text-align: center;
让nav
内的文字居中显示。margin-top: 1rem;
给nav
内的无序列表添加 1 个根元素字体大小的上外边距。margin: 0.5rem 0;
给nav
内无序列表的每个列表项添加上下 0.5 个根元素字体大小的外边距。grid-template-columns: 1fr;
将.portfolio
元素的网格布局改为单列。padding: 1rem;
给.portfolio
元素添加 1 个根元素字体大小的内边距。
HTML 部分
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
声明文档类型为 HTML5。<html lang="zh-CN">
定义 HTML 文档的根元素,并设置语言为中文(中国大陆)。
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>响应式作品集</title>
<link rel="stylesheet" href="style.css">
</head>
<meta charset="UTF-8">
设置文档的字符编码为 UTF-8。<meta name="viewport" content="width=device-width, initial-scale=1.0">
配置视口,让页面宽度与设备宽度相同,初始缩放比例为 1.0。<title>响应式作品集</title>
设置页面的标题为 “响应式作品集”。<link rel="stylesheet" href="style.css">
引入外部样式表style.css
。
<body>
<header>
<nav>
<h1>我的作品集</h1>
<ul>
<li><a href="#home">首页</a></li>
<li><a href="#works">作品</a></li>
<li><a href="#about">关于</a></li>
</ul>
</nav>
</header>
<header>
定义页面的页眉部分。<nav>
定义导航栏。<h1>我的作品集</h1>
显示网站标题。<ul>
定义无序列表。<li>
定义列表项。<a href="#home">首页</a>
定义链接,点击后跳转到页面内 ID 为home
的元素位置(这里代码中未给出home
元素)。
<main>
<section id="works" class="portfolio">
<div class="card">
<img src="https://via.placeholder.com/300" alt="作品1">
<h3>作品标题1</h3>
<p>作品描述内容</p>
</div>
<div class="card">
<img src="https://via.placeholder.com/300" alt="作品2">
<h3>作品标题2</h3>
<p>作品描述内容</p>
</div>
<div class="card">
<img src="https://via.placeholder.com/300" alt="作品3">
<h3>作品标题3</h3>
<p>作品描述内容</p>
</div>
</section>
</main>
<main>
定义页面的主要内容区域。<section id="works" class="portfolio">
定义一个章节,ID 为works
,类名为portfolio
。<div class="card">
定义一个卡片容器。<img src="https://via.placeholder.com/300" alt="作品1">
显示一张占位图片,alt
属性为图片的替代文本。<h3>作品标题1</h3>
显示作品标题。<p>作品描述内容</p>
显示作品描述。
<footer>
<p>© All rights reserved.</p>
</footer>
</body>
</html>
<footer>
定义页面的页脚部分。<p>© All rights reserved.</p>
显示版权信息,©
是版权符号的 HTML 实体。