一、浮动(float)

float简介

  • 取值:left,right,none,inherit,默认none(不浮动)
  • 可应用与所有元素
  • 没有继承性
  • 不在正常流中,但会影响布局。因为一个元素浮动时,其他内容会“环绕”该元素
  • 与之前提到的合并垂直外边距不同,浮动元素周围的外边距不会合并
  • 浮动非替换元素,必须为其声明width

两个概念

  • 包含块:浮动元素的包含块是其最近的块级祖先元素
  • 块级框:浮动元素会生成一个块级框,而不论其本身是什么。它会像块级元素一样摆放和表现(就如同div一样)

9条浮动规则

  1. 浮动元素的左(右)外边界不能超过其包含块的左(右)内边界。
  2. 浮动元素不会彼此覆盖。(定位则很容易导致元素相互覆盖)

    :一个元素向左浮动,而另一个浮动元素已经在那个位置,后放置的元素将挨着前一个浮动元素的右外边界放置。

    :如果上例中的浮动元素的顶端在所有之前浮动元素的底端下面,它可以一直浮动到父元素的左内边界
  3. 浮动元素不会相互重叠。

    :一个body,宽500px,它只有两个300px宽的图像。第一个图像浮动到左边,第二个图像浮动到右边。这是,第二个图像向下浮动,直到其顶端在第一个图像的底端之下。这样就避免了两个图像有100px重叠。
  4. 一个浮动元素的顶端不能比其父元素的内顶端更高(这可以防止浮动元素一直浮动到文档的顶端);如果一个浮动元素在两个合并外边距之间,放置这个浮动元素时就好像在两个元素之间有一个块级父元素。

    :有三个段落,中间的段落浮动。则浮动段落就会像有一个块级父元素一样(如div)浮动。这能防止浮动段落一直向上移动到三个段落共同的父级元素的顶端。
  5. 浮动元素的顶端不能比之前任何浮动元素或块级元素的顶端更高。
  6. 如果源文档中一个浮动元素之前出现另一个元素,浮动元素的顶端不能比包含该元素所生成框的任何行框的顶端更高。这进一步限制元素向上浮动,不允许元素浮动到包含该浮动元素之前内容的行的顶端之上,使浮动元素在其上下文内。

    :一个段落的正中间有一个浮动图像,这个图像顶端最高只能放在该图像所在的行框的顶端。
  7. 浮动元素不能超出其包含元素的边界(除非它太宽,本身都无法放下),如果没有足够空间,浮动元素会被挤到新的一行。

    :多个浮动元素出现在一个水平行上,远远超出其包含块的边界。实际上,如果浮动元素出现在另一个浮动元素的旁边,因此导致超出包含块,这时这个浮动元素会向下浮动到之前浮动元素下面的某一点,从下一行开始。
  8. 满足前7条的前提下,浮动元素尽可能高的放置。
  9. 满足前8条的前提下,左(右)浮动元素尽可能左(右)。

补充

前面介绍的规则有一些有意思的后果,这些结果源于两方面:一方面是规则中指出了一些要求,另一方面是规则中有些方面没有谈到。
  1. 浮动元素比其父元素高时的结果(常见)

    :一个小文档,只包含几个段落和h3元素,其中第一个段落包含一个浮动图像(有5px外边距)。这时图像如果偏大,会超出其父元素底端。这是因为浮动规则只规定了浮动元素和其父元素的左、右和上边界,而没有涉及下边界的规定。

    :CSS2.1规定“浮动元素会延伸,从而包含其所有后代浮动元素”。所以,上例中可以将父元素置为浮动元素,就可以把浮动图像包含在父元素内。

    :还是这个例子,考虑背景及其文档中之前出现的浮动元素的关系。由于浮动元素同时处于流内和流外,元素背景会滑到浮动图像的下面,但具体内容并不从其内容区左边界开始,避免被覆盖。
  2. 负外边距可能导致浮动元素移到其父元素的外面。

    这看上去与前面的9条规则矛盾,但其实并不矛盾。通过设置负外边距,元素可能看上去比其父元素更宽,同样的道理,浮动元素也可能超出其父元素。

    :假设div没有内边距、边框和外边距,其上内边界在100px处,div内部浮动图片的左外边距和上外边距都是-15px。为了得出浮动元素的上内边界位置,浏览器计算如下:100px+外边距(-15px)+内边距0=85px。因此,浮动图像的上内边界在85px处,比其父元素的上内边界高。但数学计算并没有违反规范。

    问题:是用负外边距时,如果浮动元素超出其父元素,文档如何显示?答案是不确定的,所以尽量避免使用。
  3. 浮动元素比其父元素更宽时,浮动元素也会超出其父元素的左右内边界。
  4. 浮动元素与正常流中的内容发生重叠会怎样?

    :如果一个浮动元素在内容流过的边上有负外边距,就会发生重叠。

    CSS2.1中有规定:

    (1)行内框与一个浮动元素重叠时,其边框、背景和内容都在该浮动元素“之上”显示;

    (2)块级框与一个浮动元素重叠时,其边框和背景在该浮动元素“之下”显示,而内容在浮动元素“之上”显示。

    注意:这里的“重叠”与源文档中的顺序无关。元素在浮动元素之前还是之后出现并不重要。不论怎么的顺序,都会有同样的行为。

二、清除clear

clear简介

  • 取值:left,right,both,none,inherit,默认none
  • 只应用于块级元素
  • 无继承性

    :h1{clear:none;)h3两边可以出现浮动元素

    :h1{clear:both;)h3两边不出现浮动元素

    :h1{clear:left;)h3左边不出现浮动元素

清除区域

CSS2.1引入清除区域,它是在元素上外边距之上增加的额为间隔,不允许任何浮动元素进入这个范围内。所以元素设置clear时,它的外边距不会改变,之所以会向下移动是这个清除区域造成的。

:如果我把一个40px浮动图像的下一个元素h3(上外边距15px)设置了clear为both的属性,那么清除区就有25px,结果是h3的上边框边界推到刚好越过浮动元素的下边界。如果h3上外边距为40px,则clear的值就不重要了。

注意:一般,无法知道一个元素周围多大范围内不允许有浮动元素。要确保清除元素(设置clear属性的元素)的顶端与浮动元素的底端之间有一定空间,可以为浮动元素本身设置一个下外边距。

浮动float和清除clear的更多相关文章

  1. css浮动(float)及清除浮动的几种实用方法

    CSS浮动是现在网页布局中使用最频繁的效果之一,而浮动可以帮我们解决很多问题,那么就让我们一起来看一看如何使用浮动. 一.css浮动(float) (1)html文档流 自窗体自上而下分成一行一行,并 ...

  2. CSS定位机制:浮动 float及清除浮动的常用方法

    CSS的定位机制 1.普通流(标准流) 默认状态,元素自动从左往右,从上往下排列 块元素的特征: 独占一行 可以设置宽高 如果不设置宽度,宽度默认为容器的100% 常见的块元素:div p h1-h6 ...

  3. css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?一起来$('.float')

    一.抛一块问题砖(display: block)先看现象: 分析HTML代码结构: <div class="outer">     <div class=&quo ...

  4. CSS浮动(float,clear)通俗讲解

    首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流.如下图: 可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为d ...

  5. 经验分享:CSS浮动(float,clear)通俗讲解

    很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...

  6. 经验分享:CSS浮动(float,clear)通俗讲解(转载)

    很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...

  7. 经验分享:CSS浮动(float,clear)通俗讲解 太棒了,清晰明了

    很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...

  8. 彻底理解浮动float CSS浮动详解 清除浮动的方法

    我们把网页的常用的布局格式分为以下三种: 1.标准流. 所谓的标准流就是,行内元素自己单独一行,而块级元素是上下显示的. 以前我们学习的都是标准流.   注意:标准流使我们网页布局中最稳定的一种结构 ...

  9. css清除浮动float的三种方法总结

    原文地址: http://my.oschina.net/leipeng/blog/221125 张大神的解析: http://www.zhangxinxu.com/wordpress/2010/01/ ...

随机推荐

  1. Python【无引号、单引号、双引号、三引号】

    无引号#数字和数学运算是标准化.有固定格式的>>> print(520) 520>>> print(1+1)2 单引号#文字却能够千变万化>>> ...

  2. 关于KMP中求next数组的思考【转】

    文章转自 http://www.tuicool.com/articles/yayeIbe.这是我看到关于求next数组,解释最好的一篇文章!!!!!!! KMP的next数组求法是很不容易搞清楚的一部 ...

  3. windows安装npm教程

    1.在使用之前,先类掌握3个东西,明白它们是用来干什么的: npm:  nodejs 下的包管理器. webpack: 它主要用途是通过CommonJS 的语法把所有浏览器端需要发布的静态资源作相应的 ...

  4. C3.js入门案例

    C3.js是基于D3.js开发的JavaScript库,它可以让开发者构建出可复用的图表,并且还提供了一系列图表上的交互行为.通过C3,只需要往generate函数中传入数据对象就可以轻松的绘制出图表 ...

  5. bus事件总线传值

    import Vue from 'vue'   var bus = new Vue()   export default bus 监听事件: // header组件 <template> ...

  6. Fescar锁和隔离级别的理解

    前几天夜里,我老大发我一篇文章说阿里的GTS开源了. 因为一直对分布式事务比较感兴趣,立马pull了代码,进行阅读.基本的原理,实现方案我就不一一细化了,详细见官方文档(写的很棒,点赞). 在fesc ...

  7. Java反射【一、概述】

    .net也使用过反射,不过用的比较浅显,用来记日志等.. Java基础课程学习已经过了一段时间了,接下来继续学习 本次学习包含以下内容 Java反射[一.概述] Java反射[二.Class类的使用] ...

  8. conda创建和使用python的虚拟环境

    https://uoa-eresearch.github.io/eresearch-cookbook/recipe/2014/11/20/conda/ 当我们使用服务器的时候,会存在多个用户,并且可能 ...

  9. 解决 Grep 的多次管道过滤问题

    解决 Grep 的多次管道过滤问题 这是个问题,解决了 tail -f crazy.log | grep --line-buffered Hello | grep Time 解决 Grep 的多次管道 ...

  10. Bootstrap常用的自带插件

    Bootstrap自带的那些常用插件. 模态框 模态框的HTML代码放置的位置 务必将模态框的HTML代码放在文档的最高层级内(也就是说,尽量作为 body 标签的直接子元素),以避免其他组件影响模态 ...