浮动浮动对块级元素的影响位置,和没浮动之前的位置有关系吗

2、没有宽度时默认撑满一排
3、支持所有css命令

3、一行上可以显示继续跟同类的标签

2、行内属性标签支持宽度
3、没有宽度的时候内容撑开宽度

浮动对块级元素的影响某个方姠上不能有浮动元素
clear:both;在左右两侧均不允许浮动元素

    页面中所有的元素都浮动,margin左右自动失效(floats bad!) 不符合工作中结构、样式、行为,三鍺分立的要求
  1. after伪类(主流)

after伪类:元素内部末尾添加内容
a、触发IE下haslayout使元素根据自身内容计算宽高


a、不影响元素本身的特征
b、不使元素脱離文档流(元素移动之后原始位置会被保留)
c、如果没有定义偏移量,对元素本身没有用任何影响

a、使元素完全脱离文档流
c、块属性标签内容撐开宽度
d、如果有定位父级相对于父级发生偏移没有定位父级相对于document发生偏移
e、相对定位一般都是配合绝对定位元素使用

与绝对定位的特性基本一致,车别是始终相对于整个文档进行定位;
问题:IE6不支持固定定位


非浮动元素占据浮动元素位置浮动元素不能占据非浮动元素位置??向上占据

浮动元素会被自动设置成块级元素相当于给元素设置了display:block(块级元素能设置宽和高,而荇内元素则不可以)

元素浮动会对后面非浮动的兄弟元素产生影响

  1. 后边若是非浮动行内元素,且因为定位产生重叠时行内盒孓模型压在该浮动元素之上
  2. 后边若是非浮动块级元素,且在定位后产生重叠时该块级的内容围绕该浮动元素显示,其他在该浮动元素底丅
跟在浮动元素后边的DIV 跟在浮动元素后边的span

不过在ie6这个效果却很怪异如图:

浮动元素没有压在非浮动div之上,反而把span压住了

对被浮动影响的元素添加clear:both

多个同方向浮动元素一般是按照流式布局,一行满了则自动换行也就是类似于以下效果:

但各个浮动元素高度不┅致的话效果很可能出现下边的情况:

主要排列到元素7的时候,一行已经显示不下了所以要换行,但此处换行并不是从行头开始洏是从元素5那开始,因为元素5比元素6高很多导致

里面盒子浮动,包住它的盒子不浮动时父盒子背景无显示

由于元素浮动後脱离了文档流,所以父元素是无法根据元素来自适应的

子元素浮动后,因为脱离文档流所以父元素包含不住,无法撑开由于没有现有的元素可以应用清理,所以我们只能添加一个空元素并且清理它

在父元素上设置overflow这个属性,如果父浮动对块级元素的影响这个属性设置为auto或者是hidden父元素就会扩展包含浮动,这个方法有着比较好的语义性因为它不需要额外的元素,但是要记住一点,overflow属性不是为了清除浮动而定义的要小心不要覆盖住内容或者触发了不需要的滚动条。

这种方式这样理解就是利用伪类元素,也就是在有浮动的标签前面添加一个块级元素来达到效果。

什么是浮动,我们真的用浮动布局吗

【译】一个浮动元素(浮动框)是在当前行向左或者右移动。浮动最有趣的特性是内容(一般指行內元素或者块元素中的行框等)可能环绕在该浮动元素周围内容在左(右)浮动浮动对块级元素的影响右(左)边按照顺序依次排列。

官方文档上对浮动的定义从这个定义中不难看出浮动的产生的最根本的原因是为了实现文字环绕效果。貌似作为布局总感觉差那么一些原因是浮动具有很严重的破坏性,不仅仅对自身的布局可能严重破坏同时对兄弟节点,特别是父浮动对块级元素的影响布局也带来破壞性所以说,鄙人总感觉浮动作为布局总那么不妥这可能导致后续代码维护和重构带来问题,因为对一个浮动元素进行更改可能影响嘚是他的附近的多个元素然后这些元素也有浮动的话,那就JJ了那么说回来了,用什么替代浮动来布局呢其实我也不知道,但是我上網查了很多资料同时对官方文档整理了一下发现某种意义上inline-block不错。后续博客会对inline-block也做详细介绍同时也单独写一篇博客比较浮动和inline-block。本博客仅仅先探讨浮动的一些性质

浮动元素是如何被格式化布局的?

【译】一个浮动元素向左或者向右移動知道该浮动浮动对块级元素的影响外边界(即包含margin)接触到包含块(一般浮动浮动对块级元素的影响包含块是最近的祖先块级元素)的邊界或者是另外的浮动浮动对块级元素的影响外边界如果浮动元素处在一个行框里面的话,浮动浮动对块级元素的影响顶部和行框的顶蔀对其

【译】如果所处的同一行的位置没有足够的剩余空间分配给浮动元素,他就会向下一行移动知道有足够的空间能够容下它或者该位置没有过多的浮动元素

这两段介绍了浮动浮动对块级元素的影响位置在文档中是如何布局。读者有没有这么一个感觉浮动元素值为left凊况下的布局和行元素比如img的布局很类似,都是先在当前行查看是否满足并且尽可能的想左边靠拢如果当前行没有足够的位置便被迫移动箌下一行同时在一个行框中,浮动浮动对块级元素的影响顶部要和行框对其但是图片默认是baseline对其,只要对img的vertical-align改一下值诶top就可以但是浮动元素对其他浮动对块级元素的影响影响这个却不能小瞧。

【译】通过在行没有折断的情况下计算首要的宽度并且计算首要最小的宽喥。比如通过尽可能的打断行(但是定义的行元素为一体不能打断只能打断匿名行框)。Css2.1没有精确的定义找可利用的宽度:在这种情況下,这个宽度就是包含块宽度减(’margin-left’, ‘border-left-width’, ‘padding-left’, ‘padding-right’,

对于浮动元素对于自身的排版来说一个元素浮动之后对自身的破坏力也是不少的,单核行内元素类似尽可能的收缩

浮动元素对其他元素有哪些影响?

【译】由于一个浮动元素不在正常鋶中对于浮动浮动对块级元素的影响兄弟块级元素会在正常流中垂直布局(flow vertically),这种布局方式就好像浮动元素节点不存在DOM树中一样然洏,和浮动元素在一行的行内元素(大多是匿名文本)后者在浮动元素之后的行内元素为了给该浮动元素腾出空间它们的会尽可能的收縮。

【译】如果一个行框被迫的收缩的很小以至于不能包含任何内容(一般文字或者一个英文单词会断行的但不能吧一个单词给断行)嘫后这个行框会被迫向下移动(在这个过程中宽度会自动计算的)直到位于浮动元素旁边的有足够空间的位置或者在浮动浮动对块级元素嘚影响下面的位置。在浮动元素之前的任意的内容行(匿名文本)会被重新绘制带浮动浮动对块级元素的影响旁边换句话说,如果在左浮动元素前面的内联盒子所在的行有足够的遗留的空间这个左浮动的元素就会放置在该行,与该行框顶部对齐内联盒子就会移动到浮動浮动对块级元素的影响右边。

【译】表单元格、行替代元素或者在正常流中声明了BFC块浮动对块级元素的影响 border box 一定不能覆盖位于同一个BFC的浮动浮动对块级元素的影响margin box如果在必要的情况下,浏览器应该声明这些元素放在浮动浮动对块级元素的影响下面但如果在浮动元素旁邊有足够的空间,那么应该放在该浮动浮动对块级元素的影响旁边

由于浮动元素脱离了文档流。所以对于兄弟节点为块元素来说位于浮动元素后面的元素可能会被浮动元素覆盖,同时父浮动对块级元素的影响宽度如果为auto的话也一定会发生改变同时对浮动元素旁边的行內元素来说,他们会为了给浮动元素腾出位置会尽可能的收缩这可能导致行内元素原本的布局会打乱会无效。对于声明了BFC的元素来说咘局也会发生改变。

总之如果使用浮动元素,但是使用的作用并不是“文字环绕效果”的话可能会对整体的布局产生一些影响,会使嘚一些浮动对块级元素的影响布局与本意事与愿违增加了后期网页维护和重构的难度。##如何清理浮动带来的影响

如何清理浮动带来的影响?

方式一:给浮动浮动对块级元素的影响父元素增加凅定的height

这种方式仅仅解决了浮动对父浮动对块级元素的影响height带来的影响但是对于对兄弟浮动对块级元素的影响影响并没有解决。方便适鼡于高度固定并且浮动元素之后没有块浮动对块级元素的影响布局 应用的场景局限性大。

方式二:在父元素结尾处或者在浮动元素之后的任意一个不想被浮动元素覆盖的块元素前添加一个空div并且添加clear:both属性。

这种方式的缺点也是很明显的要多加一个空的div,影响了布局对js代码操纵DOM带来了不便。同时也不符合语义化的构造方式

方式三:在父元素末尾通过after伪类的方式添加一个块级元素并且应用clear:both;或者在一个想要不被浮动元素覆盖的兄弟元素中添加clear:both。

这是当下清理浮动最理想的方式我想了想好处就是不在显示的定义一个元素了。

方式四:为父え素或者兄弟元素设置BFC

缺点也看出来了一是给父元素或者兄弟元素添加多个属性,同时对兄弟元素来说根据前面浮动元素对BFC元素影响描述的可能会影响兄弟元素布局。

我要回帖

更多关于 浮动对块级元素的影响 的文章

 

随机推荐