CSS定位规则之BFC 你竟然一直不知道的东西!!!!!

相关文档:

http://blog.sina.com.cn/s/blog_877284510101jo5d.html

http://www.cnblogs.com/dojo-lzz/p/3999013.html

http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html

BFC(Block
Formatting CoFSADntext)直译为“块级格式化范围”

1.是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。当涉及到可视化布局的时候,Block Formatting Context提供了一个环境,HTML元素在这个环境中按照一定规则进行布局。一个环境中的元素不会影响到其它环境中的布局。比如浮动元素会形成BFC,浮动元素内部子元素的主要受该浮动元素影响,两个浮动元素之间是互不影响的。这里有点类似一个BFC就是一个独立的行政单位的意思。也可以说BFC就是一个作用范围。可以把它理解成是一个独立的容器,并且这个容器的里box的布局,与这个容器外的毫不相干。

2.另一个通俗点的解释是:在普通流中的 Box(框) 属于一种 formatting context(格式化上下文) ,类型可以是 block ,或者是 inline ,但不能同时属于这两者。并且, Block boxes(块框) 在 block formatting context(块格式化上下文) 里格式化,
Inline boxes(块内框) 则在 inline formatting context(行内格式化上下文) 里格式化。任何被渲染的元素都属于一个 box ,并且不是 block ,就是 inline 。即使是未被任何元素包裹的文本,根据不同的情况,也会属于匿名的 block boxes 或者 inline boxes。所以上面的描述,即是把所有的元素划分到对应的 formatting context 里。

DEMO1:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<title>Examples</title>

<meta name="description" content="">

<meta name="keywords" content="">

<link href="" rel="stylesheet">

<style>

body {

width: 300px;

position: relative;

}

.aside {

width: 100px;

height: 150px;

float: right;

background: #f66;

}

.main {

height: 200px;

background: #fcc;

}

</style>

</head>

<body>

<div class="aside"></div>

<div class="main"></div>

</body>

</html>

显示效果如图:可以看到由于深红色快的浮动导致不占文档位置所以会浮动在粉红色块上

开启BFC:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<title>Examples</title>

<meta name="description" content="">

<meta name="keywords" content="">

<link href="" rel="stylesheet">

<style>

body {

width: 300px;

position: relative;

}

.aside {

width: 100px;

height: 150px;

float: right;

background: #f66;

}

.main {

height: 200px;

background: #fcc;

overflow: hidden;

}

</style>

</head>

<body>

<div class="aside"></div>

<div class="main"></div>

</body>

</html>

给其中非浮动的元素添加了overflow:hidden后看到效果如下图所示:

两个div不再堆叠在一起了

DEMO2

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<title>Examples</title>

<meta name="description" content="">

<meta name="keywords" content="">

<style>

.par {

border: 5px solid #fcc;

width: 300px;

}

.child {

border: 5px solid #f66;

width:100px;

height: 100px;

float: left;

}

</style>

</head>

<body>

<div class="par">

<div class="child"></div>

<div class="child"></div>

</div>

</body>

</html>

显示效果如图所示:由于子节点的浮动导致脱离了父节点文档,所以父节没有被撑开

开启BFC:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<title>Examples</title>

<meta name="description" content="">

<meta name="keywords" content="">

<style>

.par {

border: 5px solid #fcc;

width: 300px;

overflow: hidden;;

}

.child {

border: 5px solid #f66;

width:100px;

height: 100px;

float: left;

}

</style>

</head>

<body>

<div class="par">

<div class="child"></div>

<div class="child"></div>

</div>

</body>

</html>

效果如下图所示:给父节点添加了overflowhidden,这时候就可以被子节点撑开了

DEMO3:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<!--The viewport meta tag is used to improve the presentation and behavior of the samples

on iOS devices-->

<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>

<title></title>

<style>

html, body { height: 100%; width: 100%; margin: 0; padding: 0; }

.left{

background:pink;

float: left;

width:180px;

height:200px;

}

.center{

background:lightyellow;

overflow:hidden;

height:200px;

}

.right{

background: lightblue;

width:180px;

height:200px;

float:right;

}

</style>

</head>

<body>

<div class="container">

<div class="right">right</div>

<div class="left">left</div>

<div class="center">center</div>

</div>

</html>

显示效果如图:我们看到三个div成一行排列了,注意这里的cener并没有设置宽度是自动撑开的,很吊!

不过注意一点center必须再html标签的顺序上放在最后才能实现这个效果

DEMO4:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<!--The viewport meta tag is used to improve the presentation and behavior of the samples

on iOS devices-->

<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>

<title></title>

<style>

html, body { height: 100%; width: 100%; margin: 0; padding: 0; }

.main{border:2px blue solid;}

.left{

background:pink;

float: left;

width:180px;

height:200px;

}

</style>

</head>

<body>

<div class="main">

<div class="c">

<div class="left">right</div>

<div class="left">left</div>

</div>

<div class="c">

<div class="left">right</div>

<div class="left">left</div>

</div>

</div>

</html>

显示效果如图所示:虽然left div是分别放在两个c div里面的, 但是由于浮动导致子节点脱离文档流 而使子节点不占位 同时排成一行来布局

开启BFC:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<!--The viewport meta tag is used to improve the presentation and behavior of the samples

on iOS devices-->

<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>

<title></title>

<style>

html, body { height: 100%; width: 100%; margin: 0; padding: 0; }

.main{border:2px blue solid;}

.c{overflow: hidden;;}

.left{

background:pink;

float: left;

width:180px;

height:200px;

}

</style>

</head>

<body>

<div class="main">

<div class="c">

<div class="left">right</div>

<div class="left">left</div>

</div>

<div class="c">

<div class="left">right</div>

<div class="left">left</div>

</div>

</div>

</html>

显示效果如图所示:给c div添加了overflow:hidden的时候触发了BFC  所以原本浮动的子节点并没有超出C div来影响到c外的节点,所以变成了两行

最后总结:

可以看到本篇文章通篇都是在讲解如何使用overflow来触发BFC,其实除了overflow外还有其他的触发方法,只不过暂时还没遇到先不表,以上代码均通过IE7~[包括IE7]和谷歌的检测,可以放心使用

时间: 2024-12-07 06:20:32

CSS定位规则之BFC 你竟然一直不知道的东西!!!!!的相关文章

CSS 定位规则之 BFC

1. BFC(block formatting context,中文常译为块级格式化上下文)是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用.在进行盒子元素布局的时候, BFC 提供了一个环境, 在这个环境中按照一定规则进行布局不会影响到其它环境中的布局.比如浮动元素会形成 BFC,浮动元素内部子元素的主要受该浮动元素影响,两个浮动元素之间是互不影响的.也就是说,如果一个元素符合了成为 BFC 的条件,该元素内部元素的布局和定位就和外

CSS定位布局display/float/position属性之间的关系/区别和如何使用取值行为机制

float: left|right; 可以自动排列自动折行, 但需要clear来配合清除浮动;display: inline-block; 有些时候可以替代float实现相同的效果.position: absolute|relative; 要配合top,left等定位; position: absolute会导致元素脱离文档流,被定位的元素等于在文档中不占据任何位置,在另一个层呈现,可以设置z-index.PS的图层效果就是position: absolute. float也会导致元素脱离文档流

认识和理解css布局中的BFC

认识和理解css布局中的BFC BFC的定义 是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用. Block Formatting Context 的元素的特点 其子元素会一个接一个地放置.垂直方向上他们的起点是一个包含块的顶部,两个相邻的元素之间的垂直距离取决于 ‘margin’ 特性. 相邻的块级元素的垂直边距会折叠(collapse). 每一个元素左外边(margin)与包含块的左边相接触(对于从右到左的格式化,右外边接触右边)

CSS 定位和选择器

CSS 定位 CSS 定位 (Positioning) 属性允许你对元素进行定位. CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务. 一切皆为框 div.h1 或 p 元素常常被称为块级元素.这意味着这些元素显示为一块内容,即“块框”.与之相反,span 和 strong 等元素称为“行内元素”,这是因为它们的内容显示在行中,即“行内框”. 使用 display 属性改变生成的框的类型.这意味着

CSS命名规则规范整理

转载声明:原载:彬Go本文链接:http://blog.bingo929.com/css-coding-semantic-naming.html 在此,非常感谢该文章作者的分享,本文完全转载自上面链接,此处作为备份,方便查看使用. CSS命名规则规范整理 大家在写css的时候,经常会遇到关于命名的问题.页面上成百甚至上千的class或者id,我们就会越来越感到困扰. 所以,这样我们就很有必要整理自己的一套命名规范.这里我就说说我自己的命 大家在写css的时候,经常会遇到关于命名的问题.页面上成百

CSS学习------CSS定位(position)与浮动(float)

position属性:用来对元素进行定位 定位的意义: 定位允许你定义元素框相对于其正常位置应该出现的位置. 相对于父元素. 相对于另一个元素. 相对于浏览器窗口本身的位置. 定位分为:绝对定位和相对定位. 相对定位: 如果对一个元素进行相对定位,它将出现在它所在的位置上.然后,可以通过设置垂直或水平位置,让这个元素"相对于"它的起点进行移动. 在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间.因此,移动元素会导致它覆盖其它框. 示例: <html>   <

CSS定位 position

总体讲:一般使用的是父类用postion:relative属性,子类使用positive:absolute属性 常常使用position用于层的绝对定位,比如我们让一个层位于一个层内具体什么位置,为即可使用position:absolute和position:relative实现. 一.position语法与结构   -   TOP position语法:  position : static absolute relative position参数: static : 无特殊定位,对象遵循HT

CSS定位

一.属性定位(百度首页) 1.通过id定位:(#代表id) driver.find_element_by_css_selector("#kw").send_keys("selenium") 2.通过class定位:(.代表class) driver,find_element_by_css_selector(".s_ipt").send_keys("selenium") 3.通过标签定位:(不推荐) driver.find_el

CSS 定位 (Positioning) CSS 外边距合并 CSS 相对定位

CSS 定位 (Positioning) 属性允许你对元素进行定位. CSS 定位和浮动 CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务. 定位的基本思想很简单,它允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置.显然,这个功能非常强大,也很让人吃惊.要知道,用户代理对 CSS2 中定位的支持远胜于对其它方面的支持,对此不应感到奇怪. 另一方面