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

Float

时间:2023-04-05 17:52:46 HTML5

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

TextWrapTextWrapTextWrapTextWrapTextWrappingTextWrappingTextWrappingTextWrapping

float的特点很多新手在元素上设置float属性,会表现出以下特点:Wrapping块格式化上下文破坏文档流无边距合并wrapping性wrapping包括wrapping和自适应两个特征。包是指浮动元素。如果子元素的宽度足够小,浮动元素的宽度就是子元素的宽度,如下图:.float{float:left;}这是浮动元素的子元素

自适应是指如果浮动元素的父元素有设定的宽度,而浮动元素的子元素的宽度超过了父元素,则浮动元素的宽度最终会表示为父元素的宽度,如下:.father{width:100px;}.float{float:left;}ThisisSub-elementsoffloatingelements

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

总结浮动设计的初衷不是布局,而是文本环绕效果浮动的特点:环绕,块状格式化上下文,破坏性,无边距合并浮动机制:浮动锚点的思想和floating引用float实现自适应布局