大家好,我是糖糖~最近我跟着 b 站 pink 老师做了学成在线的案例练习,收获满满,今天就来和大家分享一下我的学习过程与心得,一起开启技术学习新旅程!
一.案例准备工作
index.html:!符号+Tab键生成模板,link+Taba键添加外链样式;
body里随机写入内容用于测试引入是否成功
xml
<!DOCTYPE html>
<html lang="en">
<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>
<body>
123
</body>
</html>
样式文件去除内外边距,代码如下
css
* {
margin: 0;
padding: 0;
}
通过浏览器预览网页再F12按键,若看到以下清除内外边距的内容,说明引入成功

二.确定版心(页面宽度)
每个版心都要水平居中,可以定义版心公共类;
样式文件添加:
css
.w{
width: 1200px;
margin: auto;
}

三.分块实现
接下来一行一行的实现,先写第一行的每一列,做完以后以此类推,在做第二行、第三行;
3.1头部制作
3.1.1第一行盒子
1.量头部内容高度和上下外边框高度;
2.在index.html文件的body里加入头部盒子代码,并引入之前的公共类.w;
css
<div class="header w">
</div>
3.在style.css文件加入高度和外边距属性;
css
.header{
height: 42px;
background-color: pink;
/* 注意此地方会层叠.w 里面的margin,故要写左右的auto */
margin: 30px auto;
}
3.1.2第一行第一列(logo部分)
index.html的logo部分:
xml
<!-- logo部分 -->
<div class="logo">
<img src="images/logo.png" alt="">
</div>
style.css的logo样式部分:
css
.logo {
width: 198px;
height: 42px;
background-color: purple;
}

3.1.3第一行第二列(导航栏部分)
实际开发中,我们不会直接用链接a而是用li包含链接(li+a)的做法。
原因:
1.li+a语义更清晰,一看这就是有条理的列表型内容。
2.如果直接用a,搜索引擎容易辨别为有堆砌关键词嫌疑从而影响网站排名
导航栏代码:
xml
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">课程</a></li>
<li><a href="#">职业规划</a></li>
</ul>
样式代码:
1.去掉li的小圆点
css
li{
list-style: none;
}
2.注意当导航栏加浮动时,logo也要加上浮动
css
.nav{
float: left;
margin-left: 60px;
}
3.链接去掉下划线
css
a {
text-decoration: none;
}
4.让导航栏里的内容横向排列,因为li是块状元素需要一行显示,加浮动
css
.nav ul li {
float: left;
}
5.链接样式:转为行内块元素才能调整高度,设置内边距、行高、字符大小、颜色
css
.nav ul li a {
display: block;
height: 42px;
padding: 0 10px;
line-height: 42px;
font-size: 18px;
color: #050505;
}
注意:
这个nav导航栏可以不加宽度,将来可以加其余文字;
因为导航栏里面文字不够多,所以最好给链接a左右内边距padding撑开盒子,而不是指定宽度。
6.鼠标经过链接的样式代码
css
.nav ul li a {
display: block;
height: 42px;
padding: 0 10px;
line-height: 42px;
font-size: 18px;
color: #050505;
}
效果图

3.1.4第一行第三列(search搜索模块)
1.结构分析
一个search大盒子里面包括两个表单=input文本框+button按钮
xml
<!-- 搜索模块 -->
<div class="search">
<input type="text" value="输入关键词">
<button></button>
</div>
2.样式代码实现
搜索框部分
style.css
css
/* search搜索模块 */
.search {
float: left;
width: 412px;
height: 42px;
background-color: skyblue;
margin-left: 70px;
}
.search input {
width: 345px;
height: 40px;
border: 1px solid #00a4ff;
border-right: 0;
color: #bfbfbf;
font-size: 14px;
padding-left: 15px;
}
注意: 加上左内边距后,盒子会被撑大,在宽度减去左内边距360-15=345
按钮部分
css
.search button {
float: left;
width: 50px;
height: 42px;
background: url(images/btn.png);
/* 按钮button默认有个边框需要我们手动去掉 */
border: 0;
}
注意: 去掉按钮默认边框; 使按钮在搜索框右边则加上浮动,此时搜索框也要加上浮动。
效果图

3.1.5第一行第四列(用户user模块制作)
1.用一个盒子装用户头像和用户名
xml
<!-- 用户模块 -->
<div class="user">
<img src="images/user.png" alt="">
qq-lilei
</div>
2.样式:右浮动、行高、右外边距、字体大小、颜色
css
/* 用户模块 */
.user {
float: right;
line-height: 42px;
margin-right: 30px;
font-style: 14px;
color: #666;
}
##背景色 1.设置整个页面背景色
css
body {
background-color: #f3f5f7;
}
2.去掉头部辅助的背景色
头部模块效果图

3.2 banner制作
思路
大盒子banner里包含版心.w,版心里有左右两个子盒子。
左边盒子用ul>li>a span,大于符号用>
右边盒子用一个标题h4+ul>li*3+一个a链接
其中li里面有h4和p
代码实现
xml
<!-- banner部分start -->
<div class="banner">
<!-- 版心 左子盒子-->
<div class="w">
<div class="subnav">
<ul>
<li><a href="#">前端开发<span>></span></a></li>
<li><a href="#">后端开发<span>></span></a></li>
<li><a href="#">移动开发<span>></span></a></li>
<li><a href="#">人工智能<span>></span></a></li>
<li><a href="#">商业预测<span>></span></a></li>
<li><a href="#">云计算&大数据<span>></span></a></li>
<li><a href="#">运维&从测试<span>></span></a></li>
<li><a href="#">UI设计<span>></span></a></li>
<li><a href="#">产品<span>></span></a></li>
</ul>
</div>
<!--我的课程表 右子盒子 -->
<div class="course">
<h2>我的课程表</h2>
<div class="bd">
<ul>
<li>
<h4>继续学习 程序语言设计</h4>
<p>正在学习-使用对象</p>
</li>
<li>
<h4>继续学习 程序语言设计</h4>
<p>正在学习-使用对象</p>
</li>
<li>
<h4>继续学习 程序语言设计</h4>
<p>正在学习-使用对象</p>
</li>
</ul>
<a href="#" class="more">全部课程</a>
</div>
</div>
</div>
</div>
<!-- banner部分end -->
样式代码
css
/* banner区域 */
.banner {
height: 421px;
background-color: #1c036c;
}
.banner .w {
height: 421px;
background: url(images/banner2.png) no-repeat top center;
}
.subnav {
float: left;
width: 190px;
height: 421px;
background-color: rgba(0, 0, 0, 0.3);
}
.subnav ul li {
height: 45px;
line-height: 45px;
padding: 0px 20px;
}
.subnav ul li a {
font-style: 14px;
color: #fff;
}
.subnav ul li a span {
float: right;
padding-right: 20px;
}
.subnav ul li a:hover {
color: #00a4ff;
}
.course {
float: right;
width: 230px;
height: 300px;
background-color: #fff;
/* 浮动的盒子不会有外边距合并的问题 */
margin-top: 50px;
}
.course h2 {
height: 48px;
background-color: #9bceea;
text-align: center;
line-height: 48px;
font-size: 18px;
color: #fff;
}
.bd{
padding: 0 20px;
}
.bd ul li{
padding: 15px 0;
border-bottom: 1px solid #ccc;
}
.bd ul li h4{
font-size: 16px;
color: #4e4e4e;
}
.bd ul li p {
font-size: 12px;
color: #a5a5a5;
}
.bd .more{
display:block;
height: 38px;
border: 1px solid #00a4ff;
text-align: center;
line-height: 38px;
color:#00a4ff;
font: size 16px;
font-weight: 700;
}
banner模块效果图

3.3精品推荐小模块
思路
大盒子水平居中goods精品,注意此处有个盒子阴影。
大盒子里面有三个小盒子,一号盒子是标题h3左侧浮动,二号盒子里面放链接左侧浮动,goods-item距离可以控制连接的左右边距(注意行内元素只给左右内外边距),三号盒子右浮动mod修改
代码实现
xml
<!--3. 精品推荐模块开始 -->
<div class="goods w">
<h3>精品推荐</h3>
<ul>
<li><a href="#">jQuery</a></li>
<li><a href="#">Spark</a></li>
<li><a href="#">MySQL</a></li>
<li><a href="#">JavaWeb</a></li>
<li><a href="#">MyAQL</a></li>
<li><a href="#">JavaWeb</a></li>
</ul>
<a href="#"class="mod">修改兴趣</a>
</div>
<!--3. 精品推荐模块结束-->
样式代码
css
/* 精品推荐模块 */
.goods{
height: 60px;
background-color: #fff;
margin-top: 10px;
box-shadow: 0 2px 3px 3px rgba(0, 0, 0, 0.1);
/* 行高会继承 */
line-height: 60px;
}
.goods h3{
float: left;
margin-left: 30px;
font-size: 16px;
color: #00a4ff;
}
.goods ul{
float: left;
margin-left: 30px;
}
.goods ul li{
float: left;
}
.goods ul li a{
padding: 0 30px;
font-size: 16px;
color: #050505;
border-left: 1px solid #ccc;
}
.mod{
float:right;
margin-right:30px ;
font-size: 14px;
color: #00a4ff;
}
精品推荐小模块效果图

3.4精品推荐大模块
思路
1号盒子为最大盒子,box版心水平居中;
2号盒子为上面部分,box-hd--里面左侧标题h3左浮动,右侧链接a右浮动;
3号盒子为底下部分,box-bd--里面是无序列表,有10小li组成;
小li外边距的问题,这里有个小技巧:给box-hd宽度为1215就可以一行装开5个li
另外,Ctrl+g 输入1,到第一行,给body加一个高度,便于滑动,后面再删掉
具体注意事项:
把li的父亲ul修改的足够宽,一行能装开5个盒子就不会换行了 
设置好一个盒子以后,再删掉其他li,复制粘贴第一个li,再修改内容和图片

代码实现
结构代码
xml
<!-- 4.box核心内容其余开始 -->
<div class="box w">
<div class="box-hd">
<h3>精品推荐</h3>
<a href="#">查看全部</a>
</div>
<div class="box-bd">
<ul>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
<li>
<img src="images/pic.png" alt="">
<h4>Think PHP 5.0 博客系统实战项目演练</h4>
<div class="info"><span>高级</span> · 1125人在学</div>
</li>
</ul>
</div>
</div>
<!-- 4.box核心内容其余结束-->
样式代码
css
/* 精品推荐大模块 */
/* box-hd部分 */
.box{
margin-top: 30px;
}
.box-hd{
height: 45px;
}
.box-hd h3{
float: left;
font-size: 20px;
color:#494949
}
.box-hd a{
float:right;
font-size: 12px;
color:#a5a5a5;
margin-top: 10px;
margin-right: 30px;
}
/* box-bd */
.box-bd a{
float: right;
font-size:12px;
color: #a5a5a5;
margin-top: 10px;
margin-right: 30px;
}
/* 把li的父亲ul修改的足够宽,一行能装开5个盒子就不会换行了 */
.box-bd{
width: 1215px;
}
.box-bd ul li{
float:left;
width: 228px;
height: 270px;
background-color: #fff;
margin-right: 15px;
margin-bottom: 15px;
}
.box-bd ul li img{
width: 100%;
}
.box-bd ul li h4{
margin: 20px 20px 20px 25px;
font-size: 14px;
color: #050505;
font-weight: 400;
}
.box-bd .info{
margin: 0 20px 0 25px;
font-size: 12px;
color:#999
}
.box-bd .info span{
color:#ff7c2d;
}
效果图(未修改成不同内容版)

3.5底部模块
思路
1号盒子是通栏大盒子,底部footer给高度,底色是白色
2号盒子版心水平居中
3号盒子版权copyright左对齐
4号盒子链接links右对齐
所遇问题
为便于观察,先用粉色背景,由于浮动不占空间,粉色大盒子不在预想位置,如下图,此时需在li的父亲ul去浮动
去浮动代码(清除浮动之双伪元素清除)
样式代码添加
css
.clearfix:before,
.clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
zoom: 1;
}
在结构代码的ul加上clearfix的类名
ini
<ul class="clearfix ">
去浮动以后,效果图如下 
用外上边距会出现塌陷,如图所示
要用内边距
css
.footer .w{
/* 不要用外边距 */
/* margin-top: 35px; */
padding-top: 35px;
}

代码实现
结构代码
xml
<!-- 5.footer底部模块开始 -->
<div class="footer">
<div class="w">
<div class="copyright">
<img src="images/logo.png" alt="">
<p>学成在线致力于普及中国最好的教育它与中国一流大学和机构合作提供在线课程。<br>
© 2017年XTCG Inc.保留所有权力。-沪ICP备15025210号</p>
<a href="#" class="app">下载APP</a>
</div>
<div class="links">
<dl>
<dt>关于学成网</dt>
<dd><a href="#">关于</a></dd>
<dd><a href="#">管理团队</a></dd>
<dd><a href="#">工作机会</a></dd>
<dd><a href="#">客户服务</a></dd>
<dd><a href="#">帮助</a></dd>
</dl>
<dl>
<dt>新手指南</dt>
<dd><a href="#">如何注册</a></dd>
<dd><a href="#">如何选课</a></dd>
<dd><a href="#">如何拿到毕业证</a></dd>
<dd><a href="#">学分是什么</a></dd>
<dd><a href="#">考试未通过怎么办</a></dd>
</dl>
<dl>
<dt>合作伙伴</dt>
<dd><a href="#">合作机构</a></dd>
<dd><a href="#">合作导师</a></dd>
</dl>
</div>
</div>
</div>
<!-- 5.footer底部模块结束 -->
样式代码
css
/* .footer模块 */
.footer{
height: 415px;
background-color: #fff;
}
.footer .w{
/* 不要用外边距 */
/* margin-top: 35px; */
padding-top: 35px;
}
.copyright{
float: left;
}
.copyright p{
font-size: 12px;
color:#666;
margin: 20px 0 ;
}
.copyright .app{
display:block;
width: 118px;
height: 33px;
border: 1px solid #00a4ff;
text-align: center;
line-height: 33px;
color:#00a4ff;
font-size: 16px;
}
.links{
float:right;
}
.links dl{
float: left;
margin-left: 100px;
}
.links dl dt{
font-size: 16px;
color:#333;
}
.links dl dd a {
font-size: 12px;
color: #333;
}
底部效果图

4.总结
为方便大家查看相关代码,我已将本次学成在线案例练习的代码上传至 GitHub 仓库,链接:[github.com/TANG1110/fr...] 。
从摸索代码到看到模块效果,每一步都充满挑战与惊喜。小伙伴们,学习之路虽有坎坷,但坚持就有收获 !希望大家多多关注我,并点赞收藏这篇文章,给予我更多支持与鼓励,我们一起在技术海洋里并肩前行,共同成长~