本篇文章为 CSS 基础系列笔记第四篇,参考 黑马程序员pink老师前端入门教程
其他CSS基础相关文章:
CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表
CSS基础「二」复合选择器 / 元素显示模式 / 背景 / 三大特性
CSS基础「三」盒子模型/产品模块案例/圆角边框/盒子阴影/文字阴影
CSS基础「七」精灵图 \ 字体图标 \ 三角 \ 用户界面样式 \ 页面初始化
1. 浮动介绍
1.1 传统网页布局三种方式
网页布局的本质——用 CSS 来摆放盒子,把盒子摆放到相应位置。CSS 提供了三种传统布局方式(盒子的排列顺序)
- 普通流(标准流)
- 浮动
- 定位
标准流(普通流 / 文档流)
标准流是最基本的布局方式,就是标签按照规定好默认方式排列。我们前面学习的就是标准流,如下
- 块级元素会独占一行,从上向下顺序排列,如
<div>、<hr>、<p>
- 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行,如
<span>、<a>
1.2 浮动用法初体验
引入:如何让多个块级盒子(div)水平排列成一行?
- 按照之前知识,我们想到的是转为行内块元素
display: inline-block;
。但是,虽然转换为行内块元素可以实现一行显示,但是他们之间会有大的空白缝隙,很难控制。如下图所示
如同上述示例一样,有很多的布局效果,标准流没有办法完成。此时就可以利用浮动完成布局,因为浮动可以改变元素标签默认的排列方式
- 浮动最典型的应用:让多个块级元素一行内排列显示
- 网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动
上例中添加浮动即可实现多个块元素并列显示
1.3 浮动语法格式
float
属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘
语法格式
选择器 { float: 属性值; }
属性值 | 说明 |
---|---|
none | 不浮动,默认值 |
left | 元素浮动到其容器的左侧 |
right | 元素浮动在其容器的右侧 |
inherit | 元素继承其父级的 float 值 |
1.4 浮动特性
加了浮动之后的元素,会具有很多特性,需要掌握如下三个
- 浮动元素会脱离标准流(脱标)
- 浮动的元素会一行内显示并且元素顶部对齐
- 浮动的元素会具有行内块元素的特性
1、设置浮动的元素最重要的特性:
- 脱离标准普通流的控制(浮)移动到指定位置(动)
浮动的盒子不再保留原先的位置,此位置被其他标准流盒子所占有
。示例如下
2、如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列
浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子, 多出的盒子会另起一行对齐。示例如下
-
当前页面可以放下时
-
当前页面缩小放不下时
3、浮动元素具有行内块元素特性
任何元素都可以浮动,不管原来是什么模式的元素,添加浮动之后具有行内块元素相似的特性
行内元素添加浮动后,具有行内块元素特性,可以设置宽度和高度
1.5 浮动元素的使用
为了约束浮动元素位置, 我们网页布局一般采取的策略是:
- 先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置
下面是关于浮动元素搭配标准流元素的实例
- 如下图小米官网中手机产品布局:首先是一个大的标准流父盒居中显示,之后父盒中有左右两个浮动子盒,右侧浮动子盒又含有八个小的盒子
实现效果
实例代码
<head>
...
<style>
.box {
width: 1226px;
height: 615px;
background-color: tomato;
margin: 0 auto;
}
.left {
float: left;
width: 234px;
height: 615px;
background-color: skyblue;
}
.right {
float: left;
width: 992px;
height: 615px;
background-color: green;
}
/* >子代选择器,防止混淆 */
.right>div {
float: left;
width: 234px;
height: 300px;
background-color: tomato;
margin-left: 14px;
margin-bottom: 14px;
}
</style>
</head>
<body>
<div class="box">
<div class="left">左</div>
<div class="right">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
</div>
</div>
</body>
2. 常见网页布局
2.1 布局格式
常用模板样式如下
以第三张图为例,给出实现代码
<head>
...
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
.top {
/* 不给宽度,默认和页面一样宽 */
height: 50px;
background-color: gray;
}
.banner {
width: 980px;
height: 150px;
background-color: gray;
margin: 10px auto;
}
.box {
width: 980px;
height: 300px;
margin: 0 auto;
background-color: tomato;
}
.box li {
float: left;
width: 237px;
height: 300px;
background-color: gray;
margin-right: 10px;
}
.box .last {
margin-right: 0px;
}
/* 只要是通栏的盒子(和浏览器一样宽)不需要指定宽度 */
.footer {
height: 200px;
background-color: gray;
margin-top: 10px;
}
</style>
</head>
<body>
<div class="top">top</div>
<div class="banner">banner</div>
<div class="box">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li class="last">4</li>
</ul>
</div>
<div class="footer">footer</div>
</body>
- top 和 footer 为通栏,无须给出宽度,默认和页面一样宽
2.2 浮动布局注意点
1、浮动和标准流的父盒搭配使用
- 先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置
2、一个元素浮动,理论上其余的兄弟元素也要浮动
- 一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题
- 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流
3. 清除浮动
3.1 为什么需要清除浮动
由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子
如上图所示,如果将父盒中两个子盒设为浮动,则父盒高度为 0(只留下红色边框)。此时,如果再来一个标准流盒子,则会贴着高度为 0 的盒子(红色边框)向下排列
- 由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响
3.2 清除浮动
- 清除浮动的本质是清除浮动元素造成的影响
- 如果父盒子本身有高度,则不需要清除浮动
- 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了
语法格式
选择器{clear:属性值;}
属性值 | 说明 |
---|---|
left | 不允许左侧有浮动元素(清除左侧浮动的影响) |
right | 不允许右侧有浮动元素(清楚右侧浮动的影响) |
both | 同时清除左右两侧浮动的影响 |
- 实际工作中,几乎只用
clear:both;
- 清除浮动的策略是:闭合浮动
3.3 清除浮动的方法
- 额外标签法,也称为隔墙法,是 W3C 推荐的做法
- 父级添加 overflow 属性
- 父级添加 after 伪元素
- 父级添加双伪元素
1、第一种方法:额外标签法
额外标签法会在浮动元素末尾添加一个空的标签,例如<div>
、<br>
- 实例一
- 实例二
以上两种均可以产生如下效果
- 优点:通俗易懂,书写方便
- 缺点:添加许多无意义的标签,结构化较差
- 要求:所添加的空标签必须是块级元素
2、第二种方法:父级添加overflow
可以给父级添加 overflow 属性,将其属性值设置为 hidden
、 auto
或 scroll
- 实例
- 注意是给父元素添加代码
- 优点:代码简洁
- 缺点:无法显示溢出部分
3、第三种方法::after 伪元素法
:after
方式是额外标签法的升级版。需要添加下述代码:
.clearfix:after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix { /* IE6、7 专有,用于照顾低版本浏览器 */
*zoom: 1;
}
-
实例
-
优点:没有增加标签,结构更简单
-
缺点:照顾低版本浏览器
-
代表网站:百度、淘宝网、网易等
4、第四种方法:双伪元素清除浮动
需要添加下述代码:
.clearfix:before,.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
}
- 实例
欢迎阅读下篇文章 CSS基础「五」定位