CSS之bfc -- float布局

一、bfc布局

以下的代码加了子元素的上边距,为什么没有发生变化?

<div class="wrapper">

  <div class="content"></div>

</div>

* {

  padding: 0;

  margin: 0;

}

.wrapper{

  position: relative;

  margin-left:100px;

  margin-top:100px;

  width: 100px;

  height: 100px;

  background: black;

}

.content{

  margin-left:50px;

  margin-top: 100px; //子标签设置了上边距有100像素,结果没发生变化

  position: absolute;

  width:50px;

  height:50px;

  background: red;

}

结果如下

为什么呢?每个盒子有它自己的规则。 垂直方向的margin-top父子元素是结合到一起的,就是说会黏在一起,子动父也会跟着一起动。它有个名词叫margin塌陷。也可以理解为子元素上面是没有相对的位置,所以子没有参照物,没法动(图1)。只有当子元素margin-top大于父元素才会动,子动父也会跟着动(图2)

图(1)

图(2)

可以使用bfc改变盒子内部的默认的规则(重新渲染盒子的内部),触发bfc之后盒子会遵循另一套语法规则。那怎么触发bfc呢?如下:

1.position:absolute;2.display:inline-block;3.float:left/right;4.overflow:hidden;

在开发中,用其中一个会对其它元素造成影响,可以换另一个使用。针对需求使用属性

给它的父标签加overflow:hidden;把溢出的部分裁剪掉

看!!是不是可以了

二、盒子共用

  1.当有两个标签,只设置一个元素的右边距,会把另一个元素顶过去过去(图1)。这就叫盒子共用。区域不能共用

<span class="box">123</span>

<span class="pox">987</span>

* {

  padding: 0;

  margin: 0;

}

.box{

  background: red;

  margin-right: 50px;

}

.pox{

  background: bisque;

}

图(1)

当第二元素设置左边距时,距离会累加。

三、浮动

<div class="warpper">

  <div class="content">1</div>

  <div class="content">2</div>

</div>

.warpper{

  border:5px solid rgb(91, 122, 43);

  padding: 30px;

  height: 600px;

  width: 100px;

}

.content{

  float: left;

  margin-left: 10px;

  margin-bottom:40px;

  width:100px;

  height: 100px;

  background: firebrick;

}

运行:

  子标签元素会随着父级元素的宽度而有所调整,所以怎么增加子标签的样式,都不会超出父元素边框,除了包不住高度( 最后会解释怎么包住父元素)

子元素在浮动中,站队的边界是它父元素的边界

<div class="warpper">

  <div class="content">1</div>

  <div class="content">2</div>

  <div class="content">3</div>

  <div class="content">4</div>

  <div class="content">5</div>

  <div class="content">6</div>

  <div class="content">7</div>

</div>

* {

  padding: 0;

  margin: 0;

}

.warpper{

  border:5px solid rgb(91, 122, 43);

  padding-top: 30px;

  height: 300px;

  width: 400px;

}

.content{

  float: left;

  width:100px;

  height: 100px;

  background: firebrick;

}

只要缩小父级的宽度,子元素宽度也会跟着发生改变。

可以使用float实现下面的样式

2.浮动元素会产生浮动流。所有产生浮动流的元素,块级元素都看不到浮动他们。可以使用bfc触发。产生了bfc的元素和文本类属性以及文本类属性(inline)都能看到浮动元素,在子元素中触发bfc。加个:overflow: hidden;

<div class="box"></div>

<div class="demo"></div>

* {

  padding: 0;

  margin: 0;

}

.box{

  float: left;

  height: 100px;

  width: 100px;

  background:gold;

  opacity: 0.5;

}

.demo{

  height: 150px;

  width:150px;

  background: greenyellow;

}

   重要:使用浮动流时,当父级块标签想要包住子级标签时,父级不能明确设置宽高,当后端数据传得多时,会溢出边框。可以在后面加个p标签,清除浮动流,(不要深度刨析原理)。现在可以在父元素中添加多个方块,都不会溢出边框。仅此一种方法

<div class="wrapper">

<div class="box">1</div>

---------------- <!-- 理论上会在这产生浮动流 -->

<div class="box">2</div>

----------------

<div class="box">3</div>

----------------

<p></p>

</div>

* {

  padding: 0;

  margin: 0;

}

.wrapper{

  border: 4px solid red;

  background:gold;

}

.box{

  float: left;

  height: 100px;

  width: 100px;

}

p{

  border-top: 0px solid red;

  clear: both;

}

原文地址:https://www.cnblogs.com/combating/p/10804198.html

时间: 2024-08-30 06:00:06

CSS之bfc -- float布局的相关文章

css盒模型与bfc与布局与垂直水平居中与css设计模式等

一.css盒子与布局相关 盒子内部的布局 盒子之间的布局visual formatting 脱离正常流normal flow的盒子的布局 absolute布局上下文下的布局 float布局上下文下的布局 flow下的盒子的布局 BFC布局上下文下的布局 IFC布局上下文下的布局 FFC布局上下文下的布局 table布局上下文下的布局 css grid布局上下文下的布局 1.css盒模型 页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模型( box model ) 盒模型有4部分组成

转:CSS布局:Float布局过程与老生常谈的三栏布局

使用CSS布局网页,那是前端的基本功了,什么两栏布局,三栏布局,那也是前端面试的基本题了.一般来说,可以使用CSSposition属性进行布局,或者使用CSSfloat属性布局.前者适合布局首页,因为首页上的内容往往可以完全控制.后者适合布局模板,模板中填充的内容你没法控制——比如,在编辑wordpress模板时,你肯定没法考虑每篇博文的长度.这篇博文,就是总结一下怎样使用CSS中的float属性进行布局,其实网上有很多讨论这个话题的文章了,但我觉得都没说到点子上.那就来老生常谈一次吧,CSS之

css 多栏自适应布局

在页面重构中,我们经常会需要实现多栏布局,例如n栏固定宽度 + m栏自适应宽度的组合,绝对布局+padding+百分比宽度是容易想到的比较暴力的解决方法,但是作为未来的"工程师",我们应该需求一些优雅点的方法.先说说两栏布局,上例子: <div class='container' > <div class='div1' >1</div> <div class='div2' >2</div> </div> 如图,假如

转:利用HTML和CSS实现常见的布局

利用HTML和CSS实现常见的布局 单列布局 水平居中 水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的父容器是parent元素) 使用inline-block 和 text-align实现 .parent{text-align: center;} .child{display: inline-block;} 优点:兼容性好:不足:需要同时设置子元素和父元素 使用

浏览器的差距、ie6 ie7 ie8、符号、html css、BFC、

1.浏览器的差距 浏览器默认的字体是16px,谷歌的最小字体是12px,其他是10px 2.ie6.ie7.ie8. hack:就是针对不同的浏览器去不同的html,css样式,从而让各个浏览器能达到一致的渲染效果 html的hack:写在html的标签中 css的hack:写在css的样式中 3.符号 &it:< &ite; <= > > &gte; >= 4.html   hack的写法 (1).<!--[if  ite  ie8]>

css重点章节复习—布局-边框-边距-浮动 (部分)

css重点章节复习—布局-边框-边距-浮动 在第二个任务中,这一块的后面那条线真的弄了很久.起初也是在html里面写的代码.之后觉得这样不好,想到第一个页面中用到的border-bottom和border-top就觉得这里应该可以用border-left或者border-right 就使用了.但是出现一个问题就是不管我怎么调,整条线都是从上画到下,不能合顶部底部的两条线分开.还好记得书本里面有一处是将将垂直线和上下部分开的.查了一下,竟然是用paddding.就觉得很震惊.原来那些margin

【转载】CSS + DIV 实现局部布局

HTML CSS + DIV实现局部布局 1.本章教大家掌握2种布局方式: 1)顶部导航菜单布局,效果图: 2)购物版块布局,效果图: 2.技术目标:使用div + ul-li实现导航菜单布局    使用div + dl-dt-dd实现购物版块布局 3.一般的局部布局无非采用如下的技术:    1)div + ul(ol)-li:用于分类导航或菜单等场合    2)div + dl-dt-dd:用于图文混编场合    3)table-tr-td:用于图文布局或显示数据的场合    4)form

CSS两列自适应布局

两列布局,一边固定,一边自适应,很常见,可不见得都能写好,就像我. 在一通搜索后,总结了几种方法. 1.CSS3 Flex-Box 其实我最早知道的是这种方法,之前也记录过. 弹性方框模型 (Flexible Box Model)笔记 2.来自div+css自适应两列布局,一列定宽,一列自适应 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Doc

CSS: 解决Div float后,父Div无法高度自适应的问题

在用CSS+DIV的布局中,经常会发现,当一个DIV float之后,如果他的高度超过了其父DIV的高度时,其父DIV的高度并不会相应的进行调整.要解决这个问题(也叫做闭合(清除)浮动),我们有四种办法: 1. 额外标签法 这种方法就是向父容器的末尾再插入一个额外的标签,并令其清除浮动(clear)以撑大父容器.这种方法浏览器兼容性好,没有什么问题,缺点就是需要额外的(而且通常是无语义的)标签.我个人比较喜欢这种方法,因为它简单.实用.浏览器兼容性好,而且这种方法也是W3C推荐的方法 <div