浮动定位-BFC-边距合并

问答

1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响?

  • 浮动元素的特征:
    • 文字环绕浮动元素。
    • 脱离文档流、不占位置。
    • 任何定义为float的元素都会自动被设置为一个块状元素显示,相当于被定义display:block;声明。这样就可以为浮动元素定义width和height属性,即使是内联显示元素也可以。
    • 当我们没有指定浮动元素宽度时,浮动元素会自动收缩到能够包含内容的宽度。
    • 当两个或两个以上的相邻元素都被定义为浮动显示时,如果存在足够的空间容纳它们,浮动元素之间可以并列显示,它们的上边线是在同一水平线上。如果没有足够空间那么后面的浮动元素将会下移到能够容纳它的地方这个向下移动的元素有可能产生一个单独的浮动。
  • 浮动元素的影响:
    • 普通元素:普通元素将会占据其原来的位置,后面的浮动元素会浮在普通元素之上。
    • 文字:文字会环绕浮动元素显示。
    • 对其它浮动元素:从左到右,从上到下排列。
    • 当元素没有设置宽度值,而设置了浮动属性,元素的宽度随内容的宽度的变化而变化。
    • 当一个包含框中的元素全设置了浮动时,该包含框会出现“高度塌陷”现象。
    • 浮动的元素会脱离普通流,因此文档流中的块框会无视浮动的元素,但是文本不会。
    • inline元素设置浮动,会改变inline的display使得它像个block-level。

2.清除浮动指什么? 如何清除浮动?

  • 清除浮动:当一个容器里的内容浮动时,容器的高度不能自动伸长以适应内容的高度,会使得内容溢出到容器外面而影响布局。清除浮动就是指消除浮动所带来的这种影响。
  • 如何清楚浮动:
    • 方法一:添加新的元素 、应用 clear:both;
      <pre>
      HTML:
      <div class="outer">
      <div class="div1">1</div>
      <div class="div2">2</div>
      <div class="div3">3</div>
      <div class="clear"></div>
      </div>
      CSS:
      .clear{clear:both; height: 0; line-height: 0; font-size: 0}
      </pre>

    • 方法二:父级div定义 overflow: auto / hidden
      <pre>
      HTML:
      <div class="outer over-flow"> //这里添加了一个class
      <div class="div1">1</div>
      <div class="div2">2</div>
      <div class="div3">3</div>
      </div>
      CSS:
      .over-flow{
      overflow: auto;
      zoom: 1; //zoom: 1; 是在处理兼容性问题
      }
      </pre>

    • 方法三:伪元素法;
      <pre>
      HTML:
      <div class="outer">
      <div class="div1">1</div>
      <div class="div2">2</div>
      <div class="div3">3</div>
      </div>
      CSS:
      .outer{
      zoom: 1;
      } //兼容ie
      .outer::after {
      content:'';
      display:block;
      width: 0;
      height: 0;
      clear:both;
      }
      </pre>

3.有几种定位方式,分别是如何实现定位的,参考点是什么,使用场景是什么?

  • static: 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
  • inherit: 规定应该从父元素继承 position 属性的值。
  • relative: 生成相对定位的元素,相对于其正常位置进行定位。
    如果我想让一个元素在他本来的位置做一些调整(位移),我们可以将该元素定位设置为relative,同时指定相对位移(利用top,bottom,left,right)。
    有一点需要注意的是,相对定位的元素仍然在文档流中,仍然占据着他本来占据的位置空间。
  • absolute: 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
    如果你想在一个文档(Document)中将一个元素放至指定位置,你可以使用absolute来定位。
    如果没有定位父元素,位置是相对于body来进行的。
    绝对定位会使元素脱离文档流中,结果就是该元素原本占据的空间被其它元素所填充。
  • fixed: 生成绝对定位的元素,相对于浏览器窗口进行定位。
    利用fixed定位,我们很容易让一个div定位在窗口任意方位。
  • 注意:如果同时定义了left和right值,且width和height有值,那么left生效,right无效,同样,同时定义了top和bottom,top生效。

4.z-index 有什么作用? 如何使用?

  • 概念:
    1.在 CSS 2.1中, 所有的盒模型元素都处于三维坐标系中。 除了我们常用的横坐标和纵坐标, 盒模型元素还可以沿着“z轴”层叠摆放, 当他们相互覆盖时, z轴顺序就变得十分重要。
    2.这意味着其实CSS允许你在现有的渲染引擎上层叠的摆放盒模型元素。 所有的层都可以用一个整数(z轴顺序)来表明当前层在z轴的位置。 数字越大, 元素越接近观察者。Z轴顺序用CSS的z-index属性来指定。
  • z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。
  • Z-index 仅能在定位元素上奏效(position属性值为 relative 或 absolute 或 fixed的对象)!
  • 相同z-index谁上谁下
    1.如果两个元素都没有定位发生位置重合现象或者两个都已定位元素且z-index相同发生位置重合现象,那么按文档流顺序,后面的覆盖前面的。
    2.如果两个元素都没有设置z-index,使用默认值,一个定位一个没有定位,那么定位元素覆盖未定位元素
  • 父子关系处理
    1.如果父元素z-index有效,那么子元素无论是否设置z-index都和父元素一致,会在父元素上方
    2.如果父元素z-index失效(未定位或者使用默认值),那么定位子元素的z-index设置生效
  • Z-index默认值为auto,则不建立层叠上下文。设置为0则会建立层叠上下文。
  • 使用:未使用Z-index的情况 , 使用后

5.position:relative和负margin都可以使元素位置发生偏移?二者有什么区别

  • 使用position:relative将元素偏移后,其他的元素的位置则不会受该元素的影响发生位置改变来弥补它偏离后剩下的空间。
  • 使用负margin使位置偏离后,其它元素将会弥补它偏离后的空间。

6. BFC 是什么?如何生成 BFC?BFC 有什么作用?

  • 概念
    Formatting context(格式化上下文) 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。最常见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC)。
    CSS2.1 中只有 BFC 和 IFC, CSS3 中还增加了 GFC 和 FFC。
  • 如何生成BFC
    1.根元素(整个页面就是一个大的BFC)
    2.float属性不为none
    3.position为absolute或fixed
    4.display为inline-block, table-cell, table-caption, flex, inline-flex
    5.overflow不为visible
  • BFC的作用
    1、防止margin重叠:根据BFC布局规则,同一个BFC中的相邻块级元素垂直方向的margin会重叠,故要解决margin重叠问题,只需要让两个块级元素处于不同的BFC就ok了。
    实例
    2、左右两栏布局: BFC布局规则第4条规定:BFC的区域不会与float box重叠。
    实例
    3、清理内部浮动:如果父元素不浮动,而子元素都浮动的话,那么父元素就无法自动撑开。解决这个问题可以让父类元素形成BFC,因为根据BFC布局规则第6条得知,BFC计算高度时会把其内部浮动子元素的高度也计算在内。
    实例
    4、内层div的上下margin并不会撑开外层div,反而会使得外层div距离顶部和底部的距离增加。可以使外层div形成BFC来解决嵌套元素边距叠加的问题。
    实例

7.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?

  • 概念:
    外边距合并是CSS中一个特殊的概念。当两个外边距相邻时,它们会合并为较大的那一个。 包括相邻元素的上下边距,父子元素的上下边距,甚至是同一元素的上下边距。
    父子外边距合并范例

  • 外边距合并场景:
    1.毗邻的两个兄弟元素之间的外边距会塌陷;
    2.如果块级父元素中,不存在上边框、上内边距、内联元素、清除浮动这四条属性(也可以说,当上边框宽度及上内边距距离为0时),那么此时这个块级父元素和其第一个子元素就会发生上外边距合并现象,换句话说,此时这个父元素对外展现出来的外边距将直接变成这个父元素和其第一个子元素的margin-top的较大者。
    3.类似的,若块级父元素的margin-bottom与它的最后一个子元素的margin-bottom 之间没有父元素的border、padding、inline content、height、min-height、max-height分隔时,就会发生 下外边距合并 现象。
    4.如果存在一个空的块级元素,其border、padding、inline content、height、min-height、max-height都不存在。那么此时它的上下边距中间将没有任何阻隔,此时它的上下外边距将会合并。

  • 合并规则:
    1.两个margin都是正值的时候,取两者的最大值;
    2.当 margin 都是负值的时候,取的是其中绝对值较大的,然后,从0位置,负向位移;
    3.当有正有负的时候,先取出负 margin 中绝对值中最大的,然后,和正 margin 值中最大的 margin 相加。
    4.所有毗邻的margin要一起参与运算,不能分步进行。

  • 解决方案:
    1、给父元素添加padding或border。
    2、让其中一个元素生成BFC。
    3、被非空内容、padding、border 或 clear 分隔开。
    4、margin在垂直方向上不毗邻。

代码

1.实现如下alert效果,效果范例121

2.实现如下表单效果, 效果范例111

3.实现如下模态框效果, 效果范例119

4.实现如下导航栏效果,效果范例129

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容