浮动和BFC的学习整理转述
前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!
文档流的概念:html 中 block 块元素默认是单独占据一行的,从上到下排列,也就是我们说的文档流。
脱离文档流的概念:A 元素定义了 float 属性之后,就会"浮"起来,原来占据的空间由后面的 B 元素占据。
如果浮动起来的 A 元素和 B 元素发生重叠,浮动起来的 A 元素就会覆盖 B 元素。
浮动元素具有内联元素的特性,不在单独占据一行,相邻的浮动元素,最前面的具有 left 属性值的排在最左边,最前面的具有 right 属性值的排在最右边。
当多个浮动元素一排容不下时,就换行。
浮动会带来各种布局问题,主要是父容器塌陷(子元素在父元素外面,影响后面的布局),也就有各种解决方案,利用clear属性清除浮动或者使父容器形成 BFC。
利用 clear:both 清除浮动
在浮动元素后面在创建一个空的非浮动的 div(inline元素不可以),并赋予属性 clear:both;
实际应用中我们更多采用 :after 伪元素加在父容器上来清除浮动,定义一个 clearfix 的 class,然后给它添加一个 :after 伪元素,它会在父容器的内容最后面在添加一个看不见的块元素,我们给它定义 clear:both;
/* 清除浮动 */
.clearfix:after {
content: '';
display: block;
height: 0;
clear: both;
font-size: 0;
visibility: hidden;
}
.clearfix {
/*触发hasLayout,这又涉及到IE浏览器hack的知识*/
zoom: 1;
}
BFC 学习
父容器形成 BFC 可以解决父容器内部子元素浮动引起的塌陷问题。
BFC 元素特性就是不论内部怎样,都不会影响外部布局。
如何触发BFC?
- float 值为 left\right
- overflow 值为 auto | scroll | hidden
- display 值为 table-cell | table-captain | inline-block
- position 值为 absolute 或 fixed
我们可以给父容器添加这些属性形成 BFC,达到“清”浮动(包含浮动)。
div 设置 float 属性之后会产生 inline-block 特性,不会占据一整行了。
position:absolute 会使父容器脱离文档流,虽然打成了目的,但父容器的位置问题又来了。
overflow:auto | scroll 有时候会出现滚动条。
overflow:hidden 需要确定不会出现溢出裁剪,很多企业不让用 overflow,我们需灵活掌握。
最后,Nicolas Gallagher 大师提供了一种更简便的方法,用的是 display:table。
.clearfix:before, /*:before处理margin上下重叠*/
.clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
zoom: 1;
}
这里的 :before 它是来处理 margin 上下重叠的;
margin 重叠
上下两个 div,上面的赋予 margin-bottom:20px,下面的赋予 margin-top:10px,那么两个div之间的间距是多少呢?
两个 div 之间的间距是 20px,因为发生了 margin 重叠,两个值那个大,间距就是哪个。
上面说的是上下两个 div,那么一个 div 在另一个 div 中呢?情况也是一样的,会发生重叠,只是变成了 top-top,bottom-bottom 重叠。
两个相邻的元素,嵌套的元素,只要它们之间没有阻挡,就会发生 margin 重叠。
margin重叠解决方法:
上下两个 div,这种情况一般不会用到,你看效果图的时候,一般都只会给其中一个 div 赋予 margin 的,都没有颜色,你也看不出来谁是谁,上面的列子我只是说存在这个情况。
内外嵌套的 div,很多时候会见到:
- 我们可以在它们之间加个阻碍,父元素或者子元素加个透明边框 border:1px solid transparent; 视情况可以具体到上边框还是下边框
- 父元素或者子元素加个 padding:1px;视情况可以具体到上 padding 还是下 padding
- 让父元素和子元素不在同一个 BFC,视情况给它们哪个触发 BFC
浮动和BFC的学习整理转述的更多相关文章
- background属性的学习整理转述
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! background我们一般用到的的属性有: background-attachment:背景(图片)是否 ...
- line-height与图片底部间隙的学习整理转述
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 看大牛张鑫旭的视屏可能会理解的更深一些,点击这里: line-height,两行文字的基线之间的距离: 基 ...
- z-index的学习整理转述
前言:这是笔者第一次写博客,主要是学习之后自己的理解.如果有错误或者疑问的地方,请大家指正,我会持续更新! z-index属性描述元素的堆叠顺序(层级),意思是A元素可以覆盖B元素,但是B元素并没有消 ...
- js数组学习整理
原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...
- TweenMax学习整理--特有属性
TweenMax学习整理--特有属性 构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓 ...
- HttpClient学习整理
HttpClient简介HttpClient 功能介绍 1. 读取网页(HTTP/HTTPS)内容 2.使用POST方式提交数据(httpClient3) 3. 处理页面重定向 ...
- html/css 盒子布局 Margin 、Padding 、border 以及 清除浮动的知识 (学习HTML过程中的小记录)
html/css 盒子布局 Margin .Padding .border 以及 清除浮动的知识 (学习HTML过程中的小记录) 作者:王可利(Star·星星) width 是"宽 ...
- !!对python列表学习整理列表及数组详细介绍
1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...
- Java设计模式(学习整理)---命令模式
设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...
随机推荐
- JAVA实现双向链表的增删功能
JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...
- [译文] SQL JOIN,你想知道的应该都有
介绍 这是一篇阐述SQL JOINs的文章. 背景 我是个不喜欢抽象的人,一图胜千言.我在网上查找了所有的关于SQL JOIN的解释,但是没有找到一篇能用图像形象描述的. 有些是有图片的但是他们没有覆 ...
- 兄弟连学Python-Mysql的操作应用
1.创建数据库 格式: create database if not exists 数据库名 default charset utf8; 注意: 1.数据库是唯一的 2.if not exists先判 ...
- 设计模式 --> (12)装饰模式
装饰模式 时常会遇到这样一种情况,我已经设计好了一个接口,并且也有几个实现类,但是这时我发现我设计的时候疏忽了,忘记了一些功能,或者后来需求变动要求加入一 些功能,最简单的做法就是修改接口,添加函数, ...
- JVM活学活用——优化springboot
介绍 在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢? 1. 方便微服务部署. 2. 方便项目启动,不需要下载Tomcat或者 ...
- C语言--嵌套循环
一.PTA实验作业 题目1 水果价格 1.本题PTA提交列表 2.设计思路 第一步:定义变量number,表示输入的编号 第二步:定义变量i,用来记录编号数目 第三步:输出菜单:[1] apple [ ...
- appcompat v21: 让 Android 5.0 前的设备支持 Material Design
1. 十大Material Design开源项目 2. appcompat v21: 让 Android 5.0 前的设备支持 Material Design 主题 AppCompat已经支持最新的调 ...
- C实现单链表
typedef int DataType; typedef struct ListNode { DataType data; struct ListNode* next; }ListNode; //初 ...
- JVM笔记7-内存分配与回收策略
1.对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配.当Eden区中没有足够空间分配时,虚拟机将发起一次Minor GC.虚拟机提供了-XX:PrintGCDetails 这个收集器 ...
- 从PRISM开始学WPF(四)Prism-Module?
从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...