我在项目的实践中遇到了这样的一个问题

<div class="main">
        <p>aaaa</p>
        <p>bbbb</p>
</div>
* {
  padding: 0;
  margin:0;
}
p {
  padding-left: 30px;
}
.main {
	background: green;

}

上面的效果是这样的

我想让父元素div 里面的两个p元素通过float到同一行

我添加了这样一句话

.main p {
            float:left;
        }

我理所应当 异想天开的以为会是这样的结果

结果是这个样子的

为了更好的说明这个问题,也是我刚在疑惑的地方 我又将页面父div下面增加了一个div

<div class="main">
        <p>aaaa</p>
        <p>bbbb</p>
    </div>
    <div>cccc</div>

也就是我总体的想实现是这样的一个布局

结果我通过上面的那一点css 是这样的一个效果

我在实际遇到这个问题是在上面那个父div并没有设置背景色 我通过审查元素看到那个div的高度变成0了  我也不是很明白为什么下面的div会挤上去 应为两个div是块级元素,不会向上浮动的

原来float会造成一个塌陷的问题 当我们没有为父元素设置高度的时候 ,并且父元素只包含浮动元素的时候 就会产生塌陷这种问题 父元素无法通过布局的方式获得高度,所以高度为0

2016 8 13 关于布局的一些学习  参考   浏览器工作原理

在进行布局的时候,浏览器采用一种dirty位系统,如果某个呈现器(需要渲染布局的元素)发生了更改,将其自身或者子代标记为dirty,则需要布局,在进行布局的时候,元素会确认自己宽度和高度

布局模式:

(1)父呈现器确认自己的宽度

(2)父呈现器依次处理子呈现器

  2.1 放置子呈现器(设置x y 坐标)

   2.2 如果有必要,调用子呈现器的布局

(3)父呈现器根据子呈现器的累加高度以及边距和补白的高度来设置自身高度,此值也可供父呈现器的父呈现器使用

(4)将dirty设置为false

解决方案:清除浮动:

2016 6 23

为了防止内容流过浮动元素 比如你不希望一个元素的左边是浮动元素 就可以通过clear:left来实现

1)加一个空的div

<div style="clear:both;"></div>

2016 8 22 clear的工作原理  在

2)可以为父元素设置overflow:hidden; zoom :1

这样的情况下父元素就会自动扩展来包含他里面的浮动元素了,并且下面的div也自动的到下面去了(之所以这样的设置是因为让父元素表现的更像一个容器生成了一个BFC,会扩展 包裹性) zoom属性是按比例缩放的  zoom:1 按原始比例缩放  父元素就会包裹子元素   IE下触发了Layout

3)还有一种方法是在需要清除浮动元素之后通过css伪类:after添加一个不可见的内容 在它的上面clear:both 

2016.3.17  刚看到大漠老师翻译的一篇文章   把伪类的清除浮动的方案优化下  成如下的形式

.main::after,.main::before {
  content:'';
  display:table;
  clear:both;
}

 

这就是我解决浮动这个问题的学习过程 拿来分享

2016 5 19 在面试中被问到BFC,在学习的过程中发现BFC中有一条规则就是在计算BFC的高度的时候,浮动元素也会被计算在内 这就说明了在包含浮动元素的父元素中设置overflow:hidden 生成BFC去包裹浮动元素的原理

2016 6 23  更新一些关于float的一些原理的东西  CSS权威指南  css脱离文档流 知乎上的回答  关于CSS中浮动元素脱离普通流问题

浮动是一种脱离文档流,对之后或者之前的盒子中的content flow产生影响的一个属性(区别于定位  例如position absolute 也是脱离文档流 但是它不会对之后之前的盒子产生影响)

首先浮动元素会生成一个块级框 即使它本身是一个行内元素

规则:

1) 浮动元素的左右外边界不能超出其包含块的左右内边界

2)浮动元素的左(或右)外边界必须是源文档中之前出现的左浮动的(或右浮动)元素的右(或左)边界,除非后出现的浮动元素的顶端在先出现浮动元素的底端下面(防止浮动元素之间的覆盖)

3)左浮动元素的右外边界不会在其右边右浮动元素的左外边界的右边 右浮动元素的左外边界不会在其左边左浮动元素的右外边界的左边

4)一个浮动元素的顶端不能比其父元素的内顶端更高   浮动元素的顶端不能比之前所有的浮动元素的顶端或块级元素更高

上面的例子中三个元素均为浮动元素 由于规则3的作用 第二个元素不能跟第一个元素占据同一行(包含块宽度的限制)  我们看到第三个元素的顶端跟第二个元素的顶端一样

5)如果源文档中一个浮动元素之前出现了另一个元素 浮动元素的顶端不能比包含该元素所生成框的任何行框的顶端更高

6) 左浮动元素必须向左尽可能的远 右浮动元素必须向右尽可能的远 位置越高 就会向左或者向右尽可能的远

上面是浮动的一些规则 下面说一下行为

(1)当父元素是定高的时候 里面的浮动元素的高度超出了父元素的高度 

上面的例子中浮动元素的高度就超出了父元素的高度 之前的规则只进行了浮动元素的上 左右与包含块的边界的限制 在权威指南上说浮动会延伸,也就是在超出高度的浮动元素的包含块上也设置浮动 让它去包裹父元素  其实这是一种生成BFC的模式 BFC在计算高度的时候会包含浮动元素的高度 所以父元素会扩展

关于BFC的: BFC神奇背后的原理  请移步这位园友的blog 看了很多遍

(2)负外边距 

通过设置浮动元素的负外边界可以实现浮动元素的外边界超出包含块外边界的情况(不要采取这种模式) 无法得知浏览器的预期行为

(3)浮动元素与正常内容流重叠的情况

行内框与一个浮动元素重叠的时候,其边框 背景 和内容都在该浮动元素之上显示

块框与一个浮动元素重叠时候 其边框和背景在该浮动之下显示 内容在浮动元素之上显示

奇怪的float的更多相关文章

  1. Shadertoy 教程 Part 5 - 运用SDF绘制出更多的2D图形

    Note: This series blog was translated from Nathan Vaughn's Shaders Language Tutorial and has been au ...

  2. js实现省市区联动

    先来看看效果图吧,嘻嘻~~~~~~~~~~~~~~~~~~~· 代码在下面: 示例一: html: <!DOCTYPE html> <html> <head> &l ...

  3. CSS Float浮动所带来的奇怪现象

    先抛个例子出来 运行下面的例子后,可以看到输出内容如下. <!DOCTYPE html> <html lang="en"> <head> < ...

  4. float浮点数的二进制存储方式及转换

    int和float都是4字节32位表示形式.为什么float的范围大于int? float精度为6-7位.1.66*10^10的数字结果并不是166 0000 0000 指数越大,误差越大. 这些问题 ...

  5. float和double的精度

    作者: jillzhang 联系方式:jillzhang@126.com 原网址:http://blog.csdn.net/wuna66320/article/details/1691734 1 范围 ...

  6. Java浮点数float,bigdecimal和double精确计算的精度误差问题总结

    (转)Java浮点数float,bigdecimal和double精确计算的精度误差问题总结 1.float整数计算误差 案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结 ...

  7. css知多少(8)——float上篇

    1. 引言 对于我们所有的web前端开发人员,float是或者曾经一度是你最熟悉的陌生人——你离不开它,却整天承受着它所带给你的各种痛苦,你以为它很简单就那么一点知识,但却驾驭不了它各种奇怪的现象. ...

  8. CSS浮动属性Float介绍

    #cnblogs_post_body h6 {font-size: 16px;font-weight: bold;} 什么是CSS Float? float 是 css 的定位属性.在传统的印刷布局中 ...

  9. decimal,float和double的区别

    http://www.cnblogs.com/yellowapplemylove/archive/2011/08/23/2150316.html 一直很奇怪C#的预定义数据类型中为什么加了一个deci ...

随机推荐

  1. MFC窗口和控件大小等比例变化

    第一步:OnInitDialog里保存对话框及其所有子窗体的Rect区域 CRect rect; GetWindowRect(&rect); listRect.AddTail(rect);// ...

  2. CI 框架去掉url 中index.php的方法

    1 修改 apache 的 httpd.conf 文件 #LoadModule rewrite_module modules/mod_rewrite.so 去掉前面的# 2 找到 你程序目录下的 .h ...

  3. 跟随标准与Webkit源码探究DOM -- 获取元素之getElementsByName

    按照name属性获取多元素 -- getElementsByName 标准 DOM 1 定义在HTMLDocument Interface 中,原型NodeList getElementsByName ...

  4. Android 自定义Drawable

    1.使用BitmapShader实现图片圆角 public class CornerDrawable extends Drawable { private Paint mPaint; private ...

  5. 云极知客开放平台接口调用方法(C#)

    云极知客为企业提供基于SAAS的智能问答服务.支持企业个性化知识库的快速导入,借助语义模型的理解和分析,使企业客户立即就拥有本行业的24小时客服小专家.其SAAS模式实现零成本投入下的实时客服数据的可 ...

  6. 编译升级php之路(5.5.7 到 5.5.37)

    为在一台旧服务器上能使用slim,共经历了: 1.安装composer(需要高版本php,原来是5.5.7) 2.升级php版本到5.5.37(编译出错,准备使用docker) 3.升级centos内 ...

  7. [转]VS2005/2008过期之后简单实用的升级方法

    网络上有不少key,但是用了之后没效果,发现了一个好方法可以解决.  把\vs\setup\下面的 setup.sdb文件用文本编辑器打开,然后改动其最后的一行([Product Key] 下面的一行 ...

  8. AppStore下载慢的真实原因

    今天有个朋友说他的app下载很慢,他说下载其他的不会,就他的会很慢很卡.我心想这东西苹果的我也没办法了呀,不过我心里也想我平时下载挺快的呀.于是就开始试试.搜索了几个app下载发现确实是有快有慢,并且 ...

  9. ruby -- 进阶学习(十三)解说ckeditor在production环境下如何完整显示

    将ROR项目从development环境改为production环境时,运行rake assets:precompile后, ckeditor的界面就无法完整显示?! @_@?? 出现 ActionC ...

  10. android 视频的缩略图 缓存机制和 异步加载缩略图

    在这次的工作开发项目中,涉及到一个视频缩略图的视频列表:这个在大家看来,制作视频缩略图就是两行代码就搞定的事.确实是这样的,百度一下,每个帖子都知道制作视频缩略图的方法,在这里确实也是一样的,但是我要 ...