目录
1. 浮动
1.1 传统网页布局的三种方式
1.2 标准流(普通流/文档流)
1.3 为什么需要浮动?
1.4 什么是浮动?
1.5 浮动特性(重难点)
1.6 浮动元素经常和标准流父级搭配使用
2.常见网页布局
2.1 常见网页布局
2.2 浮动布局注意点
3.清除浮动
3.1 为什么需要清除浮动?
3.2 清除浮动本质
3.3 清除浮动
3.4 清除浮动方法
3.4.1 额外标签法
3.4.2 父级添加 overflow 属性
3.4.3 父级添加after伪元素
3.4.4 父级添加双伪元素清除浮动
3.5 清除浮动总结
4. 学成在线案例
4.1 案例准备工作
4.2 CSS 属性书写顺序(重点)
4.3 页面布局分析
4.4 确定版心
4.5 头部制作
4.7 精品推荐小模块
4.8 精品推荐大模块
4.9 底部模块
4.10 完整代码
1. 浮动
1.1 传统网页布局的三种方式
网页布局的本质——用 CSS 来摆放盒子。 把盒子摆放到相应位置。
CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序):
- 普通流(标准流)
- 浮动
- 定位
1.2 标准流(普通流/文档流)
所谓的标准流: 就是标签按照规定好默认方式排列。
1. 块级元素会独占一行,从上向下顺序排列。
- 常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
2. 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。
- 常用元素:span、a、i、em 等
以上都是标准流布局,我们前面学习的就是标准流, 标准流是最基本的布局方式 。
这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局自然就完成了。
注意: 实际开发中,一个页面基本都包含了这三种布局方式。
1.3 为什么需要浮动?
提问:我们用标准流能很方便的实现如下效果吗?
1. 如何让多个块级盒子(div)水平排列成一行?
比较难,虽然转换为行内块元素可以实现一行显示,但是他们之间会有大的空白缝隙,很难控制。
提问:我们用标准流能很方便的实现如下效果吗?
2. 如何实现两个盒子的左右对齐?
总结: 有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。 因为浮动可以改变元素标 签默认的排列方式。
浮动最典型的应用:可以让多个块级元素一行内排列显示。
网页布局第一准则: 多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。
1.4 什么是浮动?
float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
语法:
1.5 浮动特性(重难点)
1.加了浮动之后的元素,会具有很多特性,需要我们掌握的。
-
脱离常规文档流:浮动元素会从正常的文档流中“脱离”出来,这意味着它们不会占据原来所在的位置。周围的元素将会围绕浮动元素进行排列。
- 浮动的元素会一行内显示并且元素顶部对齐
- 浮动的元素会具有行内块元素的特性.
2. 如果多个盒子都设置了浮动,则它们会按照属性值 一行内显示并且顶端对齐排列 。
注意: 浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子, 多出的盒子会另起一行对齐。
3. 浮动元素会具有行内块元素特性。
任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后具有 行内块元素 相似的特性。
- 如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
- 浮动的盒子中间是没有缝隙的,是紧挨着一起的
- 行内元素同理
1.6 浮动元素经常和标准流父级搭配使用
为了约束浮动元素位置, 我们网页布局一般采取的策略是:
先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧。
网页布局第二准侧:
先设置盒子的大小, 之后设置盒子的位置。
案例:小米布局案例
需求:实现以下图片的盒子摆放效果
分析:
首先需要一个大盒子,然后一个大盒子里面有两个小盒子,另外一个小盒子还有8个盒子。
通过浮动调整位置。
代码:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}.box {height: 615px;width: 1210px;background-color: aquamarine;margin: 0 auto;}.box .left {float: left;width: 227px;height: 615px;background-color: blueviolet;}.box .right {float: left;width: 983px;height: 615px;background-color: brown;}.right li {float: left;list-style: none;width: 234px;height: 300px;background-color: rgb(88, 146, 196);margin-left: 10px;margin-bottom: 15px;}</style>
</head><body><div class="box"><div class="left"></div><div class="right"><ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li></ul></div></div>
</body></html>
2.常见网页布局
2.1 常见网页布局
三种常见的布局:
2.2 浮动布局注意点
1. 浮动和标准流的父盒子搭配。
先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置
2. 一个元素浮动了,理论上其余的兄弟元素也要浮动。
一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题。
重要:浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流。
3.清除浮动
3.1 为什么需要清除浮动?
由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子。
原因:由于浮动元素不再占用原文档流的位置,所以它会对后面的标准流元素排版产生影响
3.2 清除浮动本质
- 清除浮动的本质是清除浮动元素造成的影响
- 如果父盒子本身有高度,则不需要清除浮动
- 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了
3.3 清除浮动
语法:
我们实际工作中, 几乎只用 clear: both;
清除浮动的策略: 闭合浮动(只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子)。
3.4 清除浮动方法
- 1. 额外标签法也称为隔墙法,是 W3C 推荐的做法。
- 2. 父级添加 overflow 属性
- 3. 父级添加after伪元素
- 4. 父级添加双伪元素
3.4.1 额外标签法
额外标签法 也称为 隔墙法 ,是 W3C 推荐的做法。
额外标签法 会在浮动元素末尾添加一个空的标签。
例如 <div style=”clear:both”></div>,或者其他标签 (如<br />等)。
优点: 通俗易懂,书写方便
缺点: 添加许多无意义的标签,结构化较差
注意: 要求这个新的空标签必须是块级元素。
3.4.2 父级添加 overflow 属性
可以给父级添加 overflow 属性,将其属性值设置为 hidden、 auto 或 scroll 。
子不教,父之过,注意是给父元素添加代码。
优点:代码简洁
缺点:无法显示溢出的部分
3.4.3 父级添加after伪元素
:after 方式是额外标签法的升级版。也是给父元素添加。
.clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden;
}
.clearfix { /* IE6、7 专有 */ *zoom: 1;
}
优点:没有增加标签,结构更简单
缺点:照顾低版本浏览器
代表网站: 百度、淘宝网、网易等
3.4.4 父级添加双伪元素清除浮动
.clearfix:before,.clearfix:after {content:"";display:table;
}
.clearfix:after {clear:both;
}
.clearfix {*zoom:1;
}
优点:代码更简洁
缺点:照顾低版本浏览器
代表网站:小米、腾讯等
3.5 清除浮动总结
为什么需要清除浮动?
- ① 父级没高度。
- ② 子盒子浮动了。
- ③ 影响下面布局了,我们就应该清除浮动了。
4. 学成在线案例
4.1 案例准备工作
我们本次采取结构与样式相分离思想:
- 1. 创建 study 目录文件夹 (用于存放我们这个页面的相关内容)。
- 2. study 目录内新建 images 文件夹,用于保存图片。
- 3. 新建首页文件 index.html(以后我们的网站首页统一规定为 index.html )。
- 4. 新建 style.css 样式文件。我们本次采用外链样式表。
- 5. 将样式引入到我们的 HTML 页面文件中。
- 6. 样式表写入清除内外边距的样式,来检测样式表是否引入成功。
4.2 CSS 属性书写顺序(重点)
建议遵循以下顺序:
- 1. 布局定位属性:display / position / float / clear / visibility / overflow(建议 display 第一个写,毕竟关系到模式)
- 2. 自身属性:width / height / margin / padding / border / background
- 3. 文本属性:color / font / text-decoration / text-align / vertical-align / white- space / break-word
- 4. 其他属性(CSS3):content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient …
例子:
4.3 页面布局分析
为了提高网页制作的效率,布局时通常有以下的布局流程:
- 1. 必须确定页面的版心(可视区),我们测量可得知。
- 2. 分析页面中的行模块,以及每个行模块中的列模块。其实页面布局,就是一行行罗列而成的。
- 3. 制作 HTML 结构。我们还是遵循,先有结构,后有样式的原则。结构永远最重要。
- 4. 开始运用盒子模型的原理,通过 DIV+CSS 布局来控制网页的各个模块。
4.4 确定版心
这个页面的版心是 1200 像素,每个版心都要水平居中对齐,可以定义版心为公共类:
4.5 头部制作
- 1 号是版心盒子 header 1200 * 42 的盒子水平居中对齐,上下给一个 margin 值就可以
- 版心盒子里面包含 2 号盒子 logo
- 版心盒子里面包含 3 号盒子 nav 导航栏
- 版心盒子里面包含 4 号盒子 search 搜索框
- 版心盒子里面包含 5 号盒子 user 个人信息
- 注意:要求里面的 4 个盒子必须都是浮动
4.6 banner 制作
- 1 号盒子是通栏的大盒子 banner,不给宽度,给高度,给一个蓝色背景
- 2 号盒子是版心,要水平居中对齐
- 3 号盒子版心内,左对齐 subnav 侧导航栏
- 4 号盒子版心内,右对齐 course 课程
4.7 精品推荐小模块
- 大盒子水平居中 goods 精品,注意此处有个盒子阴影
- 1 号盒子是标题 H3 左侧浮动
- 2 号盒子里面放链接左侧浮动, goods-item 距离可以控制链接的左右外边距(注意行内元素只给左右内外边距)
- 3 号盒子右浮动 mod 修改
4.8 精品推荐大模块
- 1 号盒子为最大的盒子, box 版心水平居中对齐
- 2 号盒子为上面部分,box-hd -- 里面左侧标题 H3 左浮动,右侧链接 a 右浮动
- 3 号盒子为底下部分,box-bd -- 里面是无序列表,有 10 个小 li 组成
- 小 li 外边距的问题,这里有个小技巧:给 box-hd 宽度为 1215 就可以一行装开 5 个 li
复习点:我们用到清除浮动,因为 box-hd 里面的盒子个数不一定是多少,所以我们就不给高度了,但是里 面的盒子浮动会影响下面的布局,因此需要清除浮动。
4.9 底部模块
- 1 号盒子是通栏大盒子,底部 footer 给高度,底色是白色
- 2 号盒子版心水平居中
- 3 号盒子版权 copyright 左对齐
- 4 号盒子链接组 links 右对齐
4.10 完整代码
HTML代码:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="./style.css">
</head><body><!-- 头部区域开始啦 --><div class="w header"><!-- 版心盒子里面包含 2 号盒子 logo 版心盒子里面包含 3 号盒子 nav 导航栏 版心盒子里面包含 4 号盒子 search 搜索框 版心盒子里面包含 5 号盒子 user 个人信息 注意:要求里面的 4 个盒子必须都是浮动 --><!-- logo部分 --><div class="logo"><img src="../images/学成在线.png" alt=""></div><!-- 导航栏部分 --><div class="nav"><ul><li><a href="#">首页</a></li><li><a href="#">课程</a></li><li><a href="#">职业规划</a></li></ul></div><!-- 搜索框部分 --><div class="search"><input type="text" value="输入关键词"><button></button></div><!-- 用户模块 --><div class="user"><img src="../images/user.png" alt="">qq-leishui</div></div><!-- 头部区域开始啦 --><!-- banner区域开始啦 --><div class="banner"><div class="w"><!-- 1 号盒子是通栏的大盒子 banner,不给宽度,给高度,给一个蓝色背景 2 号盒子是版心,要水平居中对齐 3 号盒子版心内,左对齐 subnav 侧导航栏 4 号盒子版心内,右对齐 course 课程 --><!-- 左侧导航栏 --><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"><div class="top"><h2>我的课程表 </h2></div><div class="bottom"><ul><li><h4>继续学习 程序语言设计</h4><p>正在学习-使用对象</p></li><li><h4>继续学习 程序语言设计</h4><p>正在学习-使用对象</p></li><li><h4>继续学习 程序语言设计</h4><p>正在学习-使用对象</p></li><a href="#">全部课程</a></ul></div></div></div></div><!-- banner区域结束啦 --><!-- 精品推荐模块开始 --><div class="goods w"><!-- 大盒子水平居中 goods 精品,注意此处有个盒子阴影 1 号盒子是标题 H3 左侧浮动 2 号盒子里面放链接左侧浮动, goods-item 距离可以控制链接的左右外边距(注意行内元素只给左右内外边距) 3 号盒子右浮动 mod 修改 --><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="#">MySQL</a></li><li><a href="#">JavaWeb</a></li></ul><a href="#" class="mod">修改兴趣</a></div><!-- 精品推荐模块结束 --><!-- 精品推荐大模块开始 --><div class="box w"><!-- 1 号盒子为最大的盒子, box 版心水平居中对齐2 号盒子为上面部分,box-hd -- 里面左侧标题 H3 左浮动,右侧链接 a 右浮动3 号盒子为底下部分,box-bd -- 里面是无序列表,有 10 个小 li 组成小 li 外边距的问题,这里有个小技巧:给 box-hd 宽度为 1215 就可以一行装开 5 个 li --><div class="box-hd"><h4>精品推荐</h4><a>查看全部</a></div><div class="box-bd"><ul><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li><li><img src="../images/pic.png" alt=""><h4>Think PHP 5.0 博客系统实战项目演练 </h4><p><span>高级</span> • 1125人在学习</p></li></ul></div></div><!-- 精品推荐大模块结束 --><!-- 底栏模块开始 --><div class="footer"><!-- 1 号盒子是通栏大盒子,底部 footer 给高度,底色是白色2 号盒子版心水平居中3 号盒子版权 copyright 左对齐4 号盒子链接组 links 右对齐 --><div class="w"><div class="copyright"><img src="../images/学成在线.png" alt=""><p>学成在线致力于普及中国最好的教育它与中国一流大学和机构合作提供在线课程。<br>© 2017年XTCG Inc.保留所有权利。-沪ICP备15025210号</p><a href="#">下载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><dd><a href="#">工作机会</a></dd><dd><a href="#">客户服务</a></dd><dd><a href="#">帮助</a></dd></dl></div></div></div><!-- 底栏模块结束 -->
</body></html>
css代码:
* {margin: 0;padding: 0;
}/* 确定版心 */
.w {width: 1202px;margin: auto;
}a {text-decoration: none;
}li {list-style: none;
}body {background-color: #f3f5f7;height: 3000px;
}/* 头部大盒子 */
.header {height: 42px;margin: 30px auto;
}.logo {float: left;width: 196px;height: 42px;margin-right: 40px;
}.nav {float: left;}.nav ul li {float: left;
}.nav ul li a {display: block;margin: 0 30px;line-height: 42px;font-size: 18px;color: #050505;
}.nav ul li a:hover {border-bottom: 2px solid #00a4ff;color: #00a4ff;
}.search {float: left;margin: 0 30px;width: 413px;height: 42px;
}.search input {float: left;border: 2px solid #00a4ff;border-right: 0;padding-left: 20px;width: 341px;height: 38px;color: #bfbfbf;font-size: 14px;}.search button {float: left;/* 按钮button默认有个边框需要我们手动去掉 */border: 0;width: 50px;height: 41px;background: url(../images/search.png);
}.user {float: left;
}.banner {height: 422px;background-color: #1c036c;
}.banner .w {height: 422px;background: url(../images/banner.png) no-repeat top center;
}.subnav {float: left;width: 192px;height: 422px;background: rgba(0, 0, 0, 0.3);
}.subnav ul li {padding: 0 20px;height: 45px;line-height: 45px;text-align: center;
}.subnav ul li a span {float: right;
}.subnav ul li a {font-size: 14px;color: #d3d1d9;
}.subnav ul li a:hover {color: #00b4ff;
}.course {float: right;margin-top: 50px;height: 300px;width: 230px;background-color: #ffffff;
}.course .top {height: 50px;width: 230px;font-size: 18px;text-align: center;line-height: 50px;clear: #ffffff;background-color: #9bceea;
}.course .bottom {padding: 0 20px;
}.bottom ul li {height: 32px;padding: 16px 20px;border-bottom: 1px solid #bfbfbf;}.bottom ul li h4 {font-size: 14px;
}.bottom ul li p {font-size: 12px;color: #bfbfbf;
}.bottom ul a {display: block;height: 40px;border: 1px solid #00a4ff;margin-top: 5px;text-align: center;line-height: 40px;color: #00a4ff;font-size: 16px;font-weight: 700;}/* 精品推荐模块 */
.goods {height: 60px;background-color: #fff;margin-top: 10px;box-shadow: 0 2px 3px 3px rgba(0, 0, 0, 0.1);/* 行高会继承, 会继承给3个孩子 */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;
}.box {height: 597px;
}.box-hd {margin-top: 35px;height: 42px;
}.box-hd h4 {float: left;color: #838485;font-size: 20px;font-weight: 400;
}.box-hd a {float: right;margin: 10px 30px 0 0;font-size: 12px;color: #a5a5a5;
}.box-bd ul {width: 1225px;
}.box-bd ul li {float: left;width: 230px;height: 270px;margin: 0 15px 15px 0;background-color: #ffffff;
}.box-bd img {width: 100%;
}.box-bd h4 {padding: 0 20px 0 25px;margin-top: 25px;font-size: 14px;color: #050505;
}.box-bd p {padding: 0 20px 0 25px;margin-top: 25px;font-size: 12px;color: #b8b8b8;}.box-bd span {color: #ff7c2d;
}.footer {height: 330px;margin-top: 40px;
}.footer .w {height: 220px;
}.copyright {float: left;height: 150px;margin: 40px 0 20px 20px;
}.copyright p {font-size: 12px;color: #666666;margin: 20px 0 20px 0;
}.copyright a {height: 65px;color: #3597d4;border: 2px solid #3597d4;padding: 10px 30px;
}.links {margin-right: 30px;height: 130px;
}.links dl {float: right;margin: 35px 0 0 145px;
}.links dl dt {font-size: 16px;color: #333333;margin-bottom: 15px;
}.links dl dd a {font-size: 12px;color: #333333;}