HTML + CSS 强化教程(把页面做得更漂亮)
前面几篇我们一直在学 JavaScript——它负责”逻辑”。但一个网页能不能让人眼前一亮,主要看 HTML(结构) 和 CSS(外观)。这一篇把这两块系统讲透,学完你就能做出结构清晰、排版好看的页面。
一、HTML 强化:让结构”语义化”
什么是语义化标签?
HTML 有很多标签,不只是 <div> 和 <span>。用意思明确的标签来描述内容,就叫语义化。好处:代码好读、SEO(搜索引擎)更友好、无障碍设备(屏幕阅读器)能更好工作。
常见语义化标签:
<!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> <header> <!-- 页头:logo、导航 --> <h1>网站标题</h1> <nav> <!-- 导航 --> <a href="/">首页</a> <a href="/about">关于</a> </nav> </header>
<main> <!-- 主体内容 --> <article> <!-- 一篇文章/独立内容块 --> <h2>文章标题</h2> <p>文章内容...</p> </article>
<section> <!-- 一个内容分区 --> <h2>其他推荐</h2> </section> </main>
<footer> <!-- 页脚 --> <p>© 2026 我的网站</p> </footer></body></html>标题层级要正确
h1 一个页面通常只有一个(给页面主标题),下面用 h2、h3 逐级细分,不要跳级(h1 直接到 h3 是不好的习惯)。
表单强化:input 的 type 类型
input 有很多类型,浏览器会自带不同的交互:
<form> <input type="text" placeholder="用户名"> <!-- 单行文本 --> <input type="email" placeholder="邮箱"> <!-- 邮箱,浏览器会校验格式 --> <input type="password" placeholder="密码"> <!-- 密码,显示为圆点 --> <input type="number" min="0" max="100"> <!-- 数字,有上下箭头 --> <input type="date"> <!-- 日期选择器 --> <input type="checkbox"> 记住我 <!-- 复选框 --> <input type="radio" name="gender"> 男 <!-- 单选 --> <textarea placeholder="多行文本"></textarea> <!-- 多行文本 --> <select> <option>北京</option> <option>上海</option> </select> <button type="submit">提交</button></form>图片和链接的好习惯
<!-- 图片:alt 是图片无法显示时的替代文字,也是 SEO 的一部分 --><img src="photo.jpg" alt="一张风景照" width="400">
<!-- 链接:加 target="_blank" 在新标签页打开 --><a href="https://example.com" target="_blank" rel="noopener">外部链接</a>二、CSS 强化:选择器与优先级
常用选择器
/* 标签选择器 */p { color: black; }
/* 类选择器:最常用 */.card { background: white; }
/* id 选择器:一个页面唯一 */#header { height: 60px; }
/* 后代选择器:.card 里的 p */.card p { font-size: 14px; }
/* 子元素选择器:.menu 的直接子元素 li */.menu > li { display: inline; }
/* 伪类:鼠标悬停 */.btn:hover { background: blue; }
/* 伪类:第一个子元素 */li:first-child { font-weight: bold; }
/* 属性选择器:type 为 email 的 input */input[type="email"] { border: 1px solid gray; }优先级(层叠规则)
同一个元素被多个规则命中时,按优先级:
!important > 内联样式 > id > 类/伪类 > 标签 > 通配符
/* 优先级从低到高 */* { color: gray; } /* 通配符,最低 */p { color: blue; } /* 标签 */.text { color: green; } /* 类 */#main-text { color: red; } /* id,最高(不含 !important) */新手最容易踩的坑:写了新样式但”没生效”——很可能是优先级不够,或者选择器写错了。用浏览器 F12 检查元素,右边会显示哪些规则生效、哪些被划掉。
三、盒模型:理解每个元素都是”盒子”
CSS 里每个元素都是一个盒子,从外到内四层:
- margin(外边距):盒子与盒子之间的距离
- border(边框):盒子的边
- padding(内边距):内容与边框之间的空隙
- content(内容):文字、图片等
.box { width: 200px; padding: 20px; /* 四边内边距 */ border: 2px solid black; margin: 10px; /* 四边外边距 */}注意: 默认情况下,width: 200px 只算内容宽度,实际盒子是 200 + 202 + 22 = 244px。要改这种计算方式,用:
.box { box-sizing: border-box; /* width 包含 padding 和 border */}强烈建议全局设置:
* { box-sizing: border-box;}这样 width: 200px 就是盒子总宽度 200px,计算省心多了。
简写记忆: padding: 10px 20px 是”上下 左右”;padding: 10px 20px 30px 40px 是”上 右 下 左”(顺时针)。
四、Flexbox:一维布局神器
Flexbox(弹性盒) 是现在最常用的布局方式,专门解决”一排元素怎么摆”。
基本用法
.container { display: flex; /* 开启 flex */ justify-content: center; /* 主轴(水平)对齐 */ align-items: center; /* 交叉轴(垂直)对齐 */ gap: 10px; /* 元素间距 */}justify-content 的常用值(水平方向)
.container { display: flex; justify-content: flex-start; /* 靠左(默认) */ /* flex-end 靠右 */ /* center 居中 */ /* space-between 两端对齐,中间等距 */ /* space-around 每个元素两侧等距 */ /* space-evenly 完全等距 */}align-items 的常用值(垂直方向)
.container { display: flex; align-items: stretch; /* 拉伸填满(默认) */ /* flex-start 顶部对齐 */ /* center 垂直居中 */ /* flex-end 底部对齐 */}flex 方向
.container { display: flex; flex-direction: row; /* 水平排列(默认) */ /* column 垂直排列 */ /* row-reverse 水平反向 */}子元素的 flex 属性:分配剩余空间
.item { flex: 1; /* 占满剩余空间(多个 1 就平均分) */}.sidebar { flex: 1; } /* 占 1 份 */.main { flex: 3; } /* 占 3 份,主内容区更宽 */实战:导航栏(最常见的 flex 应用)
<style> .navbar { display: flex; justify-content: space-between; /* logo 靠左,菜单靠右 */ align-items: center; padding: 10px 20px; background: #333; color: white; } .menu { display: flex; gap: 20px; list-style: none; }</style>
<nav class="navbar"> <div class="logo">我的网站</div> <ul class="menu"> <li>首页</li> <li>关于</li> <li>联系</li> </ul></nav>五、CSS Grid:二维布局
Grid(网格)适合同时控制行和列的复杂布局(比如卡片墙、后台管理面板)。
.container { display: grid; grid-template-columns: 1fr 1fr 1fr; /* 三列,等宽 */ gap: 20px; /* 间距 */}1fr表示”一份”,1fr 1fr 1fr就是三等分- 也可以用固定值:
200px 1fr(第一列 200px,剩下给第二列) - 用
repeat(3, 1fr)等价于1fr 1fr 1fr
实战:商品卡片网格
<style> .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } .card { border: 1px solid #ddd; border-radius: 10px; padding: 20px; text-align: center; }</style>
<div class="grid"> <div class="card">商品 1<br>¥10</div> <div class="card">商品 2<br>¥20</div> <div class="card">商品 3<br>¥30</div> <div class="card">商品 4<br>¥40</div> <div class="card">商品 5<br>¥50</div> <div class="card">商品 6<br>¥60</div></div>选择建议: 一排的布局(导航、按钮组)用 Flex;多行多列的网格(卡片墙)用 Grid。
六、响应式设计:适配手机和电脑
现在很多人用手机看网页。响应式设计就是让页面在不同屏幕宽度下自动调整。
关键一行:viewport
<meta name="viewport" content="width=device-width, initial-scale=1.0">没有这行,手机浏览器会把页面按桌面宽度缩小显示,字小得没法看。每个页面都必须加。
媒体查询:按屏幕宽度应用不同样式
/* 默认(电脑)样式 */.grid { display: grid; grid-template-columns: repeat(3, 1fr);}
/* 屏幕宽度小于 768px(手机/平板竖屏)时 */@media (max-width: 768px) { .grid { grid-template-columns: 1fr; /* 变成一列 */ }}流式布局技巧
- 宽度用百分比或
max-width而不是写死像素:
.container { max-width: 1200px; /* 最大 1200px */ margin: 0 auto; /* 居中 */}- 图片
max-width: 100%防止溢出
img { max-width: 100%; height: auto;}七、让页面好看:样式小技巧合集
字体与颜色
body { font-family: system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif; color: #333; line-height: 1.6; /* 行高,正文推荐 1.5-1.8 */}
h1 { font-size: 32px; font-weight: 700; }p { font-size: 16px; }配色建议: 新手别自己瞎配色,用现成方案:
- 文字用深灰(#333)而不是纯黑
- 背景用白或浅灰(#f5f5f5)
- 主色一个就够,其他都用同色系深浅
圆角、阴影、边框
.card { border-radius: 12px; /* 圆角 */ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); /* 阴影:水平 垂直 模糊 颜色 */ border: none;}过渡与动画
.btn { background: #4a90d9; color: white; padding: 10px 20px; border-radius: 8px; transition: all 0.3s; /* 变化过程 0.3 秒 */}
.btn:hover { background: #357abd; /* 悬停变深,过渡让变化更顺滑 */ transform: translateY(-2px); /* 微微上移 */}简单动画(永远在动):
@keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); }}
.hot { animation: pulse 2s infinite;}八、完整案例:一张好看的”个人信息卡片”
把上面的知识全用上,做一张精致的卡片:
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>个人信息卡片</title> <style> * { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: system-ui, "PingFang SC", "Microsoft YaHei", sans-serif; background: #f0f2f5; display: flex; justify-content: center; align-items: center; min-height: 100vh; }
.card { width: 320px; background: white; border-radius: 16px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1); overflow: hidden; /* 圆角裁掉头像溢出 */ transition: transform 0.3s; }
.card:hover { transform: translateY(-4px); }
.avatar { width: 100%; height: 160px; background: linear-gradient(135deg, #667eea, #764ba2); /* 渐变背景代替图片 */ }
.info { padding: 24px; text-align: center; }
.name { font-size: 22px; font-weight: 700; }
.title { color: #888; font-size: 14px; margin: 8px 0 16px; }
.tags { display: flex; justify-content: center; gap: 8px; }
.tag { background: #eef1ff; color: #5a6acf; padding: 4px 12px; border-radius: 20px; font-size: 13px; }
.btn { margin-top: 20px; width: 100%; padding: 10px; border: none; border-radius: 8px; background: #667eea; color: white; font-size: 16px; cursor: pointer; transition: background 0.3s; }
.btn:hover { background: #5566d8; } </style></head><body> <div class="card"> <div class="avatar"></div> <div class="info"> <div class="name">小明</div> <div class="title">前端开发学习者</div> <div class="tags"> <span class="tag">JavaScript</span> <span class="tag">HTML</span> <span class="tag">CSS</span> </div> <button class="btn">关注我</button> </div> </div></body></html>打开看效果:居中卡片、渐变头像、圆角标签、悬停上浮的按钮——这些都是真实网站常用的视觉元素。
九、总结
这一篇我们强化了:
- 语义化 HTML:header、nav、main、article、footer,结构清晰
- CSS 选择器与优先级:知道样式为什么不生效
- 盒模型:margin、padding、border、content,配合 border-box
- Flexbox:一排元素的布局(导航栏)
- CSS Grid:多行多列的网格布局(卡片墙)
- 响应式设计:viewport + 媒体查询,适配手机
- 美化技巧:字体、配色、圆角、阴影、过渡动画
- 完整案例:个人信息卡片
下一篇进入框架:Vue 和 React。有了 HTML/CSS/JS 的地基,框架会好懂很多。