css浮动(float)、高度塌陷问题

浮动的概念

块级元素在文档流无法在同一行显示,而将其转化为行内或者行内块元素后元素之间又会出现缝隙。为达到布局效果就要使用到浮动(float)。浮动框可以向左或者向右移动,直到它边缘碰到包含边框或者另一个浮动的边框为止。浮动会使元素脱离文档流(标准流),即在文档流中不再占有位置。

  1. 如图,当把框 1 向右浮动时,它脱离文档流并且向右移动,直到它的右边缘碰到包含框的右边缘。

css浮动(float)、高度塌陷问题_第1张图片

  1. 如图,当框 1 向左浮动时,它脱离文档流并且向左移动,直到它的左边缘碰到包含框的左边缘。因为它不再处于文档流中,所以不占据空间,实际上盖住了框 2,使框 2 从视图中消失。

css浮动(float)、高度塌陷问题_第2张图片

  1. 如图,如果包含框太窄,无法容纳水平排列的三个浮动元素,那么其他浮动块向下移动,直到有足够的空间。如果浮动元素的高度不够,那么当他们向下移动时可能被其他元素“卡住”。

css浮动(float)、高度塌陷问题_第3张图片

  1. 元素浮动时,它上下移动直到上边缘碰到前面元素(浮动元素或标准流元素)的下边缘为止,或者与前一个浮动元素的上边缘对齐;左右移动直到碰到其他元素的边缘或者包含元素的边缘为止。如图所示。

css浮动(float)、高度塌陷问题_第4张图片

浮动的特性

  • 浮动元素会脱离文档流(脱标)
  • 浮动元素会在一行内显示并且顶部对齐
  • 浮动元素会具有行内元素的特性
  • 浮动元素只会影响后面的标准流不会影响前面阿标准流
  • 任何显示模式的元素都可以设置浮动属性
  • 一个元素设置了浮动属性,理论上其余的兄弟元素也要浮动(防止影响兄弟元素出现布局问题)

兄弟元素没有同时设置浮动常会出现的问题有:

  1. 后面的元素被前面的浮动元素覆盖。
  2. 后面的浮动元素由于前面的兄弟元素没有浮动而没法显示在同一行。

清除浮动

高度塌陷问题

由于父级元素在很多情况下不方便直接给定高度(高度由内容撑开),里面的子元素脱离文档流后,内容的高度出现变化,影响父元素下面文档流盒子的位置

解决高度塌陷问题

解决高度塌陷问题即清除浮动本质是清除浮动元素对父元素高度的影响。如果父元素盒子本身有高度,则不需要清除浮动。方法是给父元素里面的子元素添加 clear 属性。

selector {
    clear:left;
}
/*清除该元素左边浮动元素对父元素的高度的影响*/
/*可以设定的值还有right、both*/

通常解决高度塌陷问题采用的策略是闭合浮动,即将浮动产生的影响只局限于父元素内部。

  1. 在浮动元素的下面添加一个空的块级标签并对其添加清除浮动样式
<div style="clear:both">
 

  1. 给父级元素添加 overflow:hidden\auto\scroll 属性,代码简洁但会出现无法显示溢出部分的问题。
  2. 给父级元素添加 after 伪元素。
.clearfix:after {
	content:"";
	display:block;
	clear:both;
	height:0;
	visibility:hidden;
}
.clearfix {   /*ie6、ie7专用*/
*zoom:1;
}
  1. 给父级元素添加双伪元素。
.clearfix:before,.clearfix:after {
	content:"";
	display:table;
}
.clearfix:after {
	clear:both;
}
.clearfix {   /*ie6、ie7专用*/
*zoom:1;
}

注意:清除浮动解决的是父元素的高度塌陷对其下面的元素的影响而不是清除里面的浮动元素对父元素里面的子元素(位于浮动元素后面的元素)的影响。平时应该注意这两种影响的区别并会区分他们。

扬尘 / 2020 / 7 / 8

5. 自我控制是最强者的本能。

你可能感兴趣的:(HTML+CSS)