前端课程——浮动
定位是什么
所谓定位,简单来说就是通过CSS样式属性设定HTML页面元素在运行时显示的位置。
定位的基本思想很简单,它允许定义元素相对于父级元素、另一个指定元素或者当前浏览器窗口应该显示的位置。
CSS实现定位的效果主要通过浮动( float
)和定位( position
)两个样式属性实现。
文档流
- 文档流是HTML页面中元素在排列时所占用位置的一-种规则。理解好文档流的概念有助于学习CSS样式中的浮动和定位两块内容。
- 将HTML页面中的元素自,上向下分成一行一行,并在每行中按从左至右的挨次排放元素,即为文档流。
- 文档流是HTML页面的底层结构,HTML页面创建的元素默认都在文档流中。
注意:如果在一行中不能容纳所有的元素,则会换到下一-行,继续自左向右排列。有三种状况将使得元素离开文档流而存在,分别是浮动、绝对定位、固定定位。
浮动
float属性指定一个 元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。该属性具有以下几个值: .
- none:默认值,表示元素不浮动。
- left: 表示元素必须要浮动在其所在容器的左侧。
- right:表示元素必须要浮动在其所在容器的右侧。
设置为浮动后,该元素原来的位置会被下一个元素替代。当前元素设置浮动后,之影响当前元素后边的元素
所有元素都设置为浮动的话,块级元素排列顺序变为水平方向的排列,
块级元素的浮动
块级元素默认的宽度和高度
- 宽度是父级元素宽度的100%
- 高度是0或者所有后代元素高度之和
设置为浮动后
- 宽度默认是0或者所有后代元素宽度之和
- 高度默认是0或者所有后代元素高度之科
多个块级元素都设置为浮动后->垂直方向排列变为水平方向排列
如果占满父级元素宽度的100%后,会自动换行
内联元素
内联元素的默认宽度和高度
宽度是内容的宽度- width属性是无效的
高度是内容的高度- height 属性是无效的
内联元素设置为浮动后
- width 和height属性有效
- 多个内联元素依旧是水平排列
行内块级元素
行内块级元素设置为浮动后,元素之间的空白间隙被取消
浮动的特殊情况
父级与子级之间的浮动
为子级元素设置浮动不能超出父级元素的范围(与父级元素浮不浮动无关)
兄弟同时设置浮动
如果兄弟关系的两个元素,为下一个兄弟元素设置为浮动,下一个兄弟元素不会超过上一个兄弟元素的位置
文本与浮动的元素
文本内容与浮动的元素之间,文本内容不会被浮动的元素所覆盖,而是环绕在浮动元素的周围
清除浮动
clear属性设置元素是否显示在其之前元素的下方。该属性具有以下几个值:
- none:表示元素不会向下移动清除之前的浮动。
- left: 表示元素被向下移动用于清除之前的左浮动。
- right: 表元素被向下移动用于清除之前的右浮动。
- both: 元素被向下移动用于清除之前的左右浮动。
- clear属性的使用可以分别以下两种情况:
- 使用clear属性为非浮动元素清除浮动时,该元素将移动到之前浮动元素的下方。
- 使 用clear属性为浮动元素清除浮动时,该元素将移动到之前浮动元素的下方,并且会影响之后浮
动元素的布局。
伪类清除浮动
1 | #container::after { |
高度塌陷
发生的场景
- 存在父子级关系
- 父级没有设置高度
- 子级元素设置浮动
解决方案:
为父级设置高度(不推荐)
块级格式化上下文(BFC)
开启方式如下几种:
将元素设 置为浮动(元素的CSS样式属性float值不为none )
将元素 设置为绝对定位
将元素设 置为行内块级元素(元素的CSS样式属性display值为inline- -block )
overflow属 性值设置不为visible的块级元素(一般情况下,值为hidden )
多多少少会带有一些副作用
案例
京东垂直菜单
1 |
|
京东水平菜单
1 |
|