当前位置: 首页 > Web前端 > CSS

深入理解CSS前言的float

时间:2023-03-30 13:20:02 CSS

在CSS中,有流的概念。正常情况下,页面总是从左到右,从上到下布局,称为正常流。但是很多时候正常的流是无法实现的,所以我们需要一些破坏流的手段,从而实现一些特殊的布局,而本节中的主角漂浮就具有破坏流的特性。float设计的初衷很多新手总是喜欢用float来实现布局。比如一个三栏布局,左右固定,中间自适应,有些人会用float,一栏一栏的搭建起来。这样的布局极易崩溃,只要高度或宽度稍有变化,整个页面就会乱七八糟。所以浮动设计的初衷并不是为了布局。它的初衷是实现图文环绕效果,即图片向左浮动,文字环绕图片,如下图所示:.float{width:150px;float:left;}.content{width:400px;}

textwrappingtextwrappingtextwrappingtextwrappingtextwrappingtextwrappingtextwrapping

float特性设置了float属性的元素会表现出以下特性:envelopingblockformattingcontextdestroysdocumentflownomarginmergeenvelopingcontainmentwrapping和self的两个特性-引入适应性。包是指浮动元素。如果子元素的宽度足够小,浮动元素的宽度就是子元素的宽度,如下:.float{float:left;}这个是浮动元素的子元素

自适应是指如果浮动元素的父元素有设定的宽度,浮动元素的子元素的宽度超过了父元素,则该宽度.father{width:100px;}.float{float:left;}ThisisthechildoffloatelementElement

块格式化上下文设置浮动元素,其显示的最终值将显示为块或表格。具体转换如下:setvaluecalculationvalueinlineblockinline-blockblockinline-tabletabletable-rowblocktable-row-groupblocktable-columnblocktable-column-groupblocktable-cellblocktable-captionblocktable-header-groupblocktable-footer-groupblock因此,如果设置了float元素,则如下写是多余的:.float{float:left:display:block;}.float{浮动:左;垂直对齐:中间;/*不起作用*/}格式化上下文属于BFC的内容,这里不展开。破坏文档流这是float最本质的特性,所以设计float的初衷就是破坏文档流。设置浮动元素会导致父元素的高度塌陷。让我们看一个例子:.float{float:left;}

Textwrappingtextwrappingtextwrappingtextwrappingtextwrappingtextwrappingtextwrappingtextwrappingtextwrappingtextwrappingtextwrapping

可以看到父元素的高度为0,但这不是bug,而是自己浮动是这样设计的,所以只有当父元素的高度塌陷时,下面的元素才有机会浮起来。但是光靠这个是不能形成图片环绕的效果的,否则文字浮上来只会盖住图片。这里还隐藏了一个特点:linebox和floatingelements的non-overlapping是指linebox和floating元素不会重叠,所以下面的文字在浮动上去后不会盖住图片。即使我们为文本设置负边距也不起作用。floatset的元素没有margin合并,因为BFC的形成,没有margin合并。先来看看浮动机制:.float{float:right;}
TitleLink
在标准浏览器中,“标题”和“链接”会显示在同一行,“链接”会向右浮动。但是如果“标题”太长,一行都放不下,那么“链接”应该浮在第一行还是第二行呢?答案是第二行。要解释这个,首先要明白两个概念,一个是“浮动锚点”,一个是“浮动引用”:浮动锚点是浮动元素所在的“流”中的一个点。点本身不是浮动的,表现得像一个没有边距、填充或边框的空内联元素。浮动引用是指浮动元素与之对齐的实体。float元素的“浮动引用”是linebox,即float元素定位在当前“linebox”内,所以上面的例子“link”会显示在第二行。但也有一种情况,浮动元素前后没有内联元素,所以也就没有linebox。这时,“浮锚”在起作用。因为“浮动锚点”表现得像一个内联元素,有一个内联元素,自然就有一个线框,只不过这个框是看不见摸不着的。float实现流体布局前面文字换行的例子,稍加修改即可实现两列或多列的自适应布局。代码如下:.father{overflow:hidden;height:200px;}.float{浮动:左;宽度:100px;}.content{margin-left:120px;TextWrappingTextWrappingTextWrappingTextWrappingTextWrappingTextWrappingTextWrappingTextWrappingTextWrappingTextWrapping

总结浮动设计的初衷不是布局,而是文字环绕效果的特点float:wrapping,blockShaped格式化context,destructive,nomarginmergingfloatmechanism:浮动锚点和浮动引用float实现自适应布局的思想