Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

    • CSS绘制三角形
    • CSS排版上下文
      • CSS伪类
      • CSS伪元素
      • CSS实现列表元素分割线
      • CSS使用skew
      • CSS让物体居中
      • CSS绘制太极图
      • CSS使用实体替代预留符号
      • 动态修改after或before的content
      • CSS旋转border
      • CSS绘制空心五角星
      • CSS时钟
      • CSS图片手风琴伸缩效果
      • CSS的选择器
      • CSS波浪border
      • CSS内切圆角
      • CSS文字环绕
      • CSS outline使用详解
      • CSS使用transform缩放scale不生效
      • CSS使用linear-gradient或生成虚线
      • CSS 图片srcset属性
      • CSS object-fit属性详解
      • CSS 使用filter对颜色就行处理
      • CSS选择器的优先级
      • css与scss文件引入问题
      • CSS实现圆角梯形
      • 使用filter实现聚光灯效果
      • 利用backface-visibility hidden实现3d翻转双面card
      • 正方体3d旋转
      • 修改浏览器自动填充的背景颜色
      • CSS修改选中文字颜色
      • CSS实现打字机效果
      • marquee文字弹跳
      • logo文字图片倒影
      • 纯CSS实现popup弹窗
      • ie兼容inline-block
      • 浏览器默认样式
      • CSS效果-文字
      • CSS效果-按钮
      • css3 transition属性对linear-gradient渐变色无效
      • 不同预处理器下的样式穿透
      • 属性顺序
      • CSS重绘与回流
      • img标签与before和after
      • CSS实现文本两端对齐
      • CSS filter的contrast属性和blur属性奇特的结合
      • CSS不常用属性记录
      • CSS sprite雪碧图制作与使用
    • JavaScript

    • 工具

    • Vue

    • antdv踩坑记录

    • Vue3

    • 前端
    • CSS
    kros
    2020-11-18

    CSS排版上下文

    BFC块排版上下文

    BFC是一个独立的容器,容器内的子元素不会影响容器外的元素,同理容器外也不会影响容器内元素

    # 规则

    1. 内部的Box会在垂直方向,一个接一个地放置。
    2. Box垂直方向的距离由margin决定。同属一个BFC的相邻块级盒子的垂直margin会发生合并(Collapse)
    3. 每个元素盒子的左外边缘(即Margin box的左边)和包含块的左边缘(即Border box的左边)相接触(对于从右往左的排版则相反,是右边接触)。即使存在浮动也是如此。
    4. BFC的区域不会与float box重叠。
    5. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
    6. 计算BFC的高度时,浮动元素也参与计算

    # 形成方式

    • 根元素,即html标签元素(有些浏览器下是body标签元素)
    • float属性不为none
    • position为absolute或fixed
    • display为inline-block, table-cell, table-caption, flex, inline-flex
    • overflow不为visible 注意:display: block不是块排版

    # 例子1 子元素形成BFC

    <div class="content">
      <div class="left">left</div>
      <div class="right">rightrightrightright</div>
    </div>
    
    1
    2
    3
    4

    默认情况div为block会依次排列。

    图1. 默认情况,left不加float

    给left元素加上float: left后随即形成BFC,content元素高度塌陷,高度由right元素撑起

    图2. left加float

    给right元素加上overflow: hidden;

    图3. right加overflow

    如果将right元素加上float: right;,content所有元素都是float,高度塌陷为0。

    图4. right加float

    代码详情见示例1

    # 例子2 父元素BFS

    <div class="content">
      <div class="left">left</div>
      <div class="right">rightrightrightright</div>
    </div>
    <div class="other">other</div>
    
    1
    2
    3
    4
    5

    给left元素加上float: left后随即形成BFC,content元素高度塌陷,高度由right元素撑起,但同时也影响力other元素的内容。

    图5. left加float脱离文档流,影响父级

    给content元素加上任一BFC标志形成BFC,随即content就不会影响other元素

    图5. content设置BFC,不影响容器外部元素

    代码详情见示例2

    IFC内联排版上下文

    # 规则

    1. 内部的Boxes会在水平方向,一个接一个地放置。
    2. 这些Boxes垂直方向的起点从包含块盒子的顶部开始。
    3. 摆放这些Boxes的时候,它们在水平方向上的外边距、边框、内边距所占用的空间都会被考虑在内。
    4. 在垂直方向上,这些框可能会以不同形式来对齐(vertical-align):它们可能会使用底部或顶部对齐,也可能通过其内部的文本基线(baseline)对齐。
    5. 能把在一行上的框都完全包含进去的一个矩形区域,被称为该行的行框(line box)。行框的宽度是由包含块(containing box)和存在的浮动来决定。
    6. IFC中的line box一般左右边都贴紧其包含块,但是会因为float元素的存在发生变化。float元素会位于IFC与与line box之间,使得line box宽度缩短。
    7. IFC中的line box高度由CSS行高计算规则来确定,同个IFC下的多个line box高度可能会不同(比如一行包含了较高的图片,而另一行只有文本)。
    8. 当inline-level boxes的总宽度少于包含它们的line box时,其水平渲染规则由‘text-align’属性来确定,如果取值为‘justify’,那么浏览器会对inline-boxes(注意不是inline-table 和 inline-block boxes)中的文字和空格做出拉伸。
    9. 当一个inline box超过line box的宽度时,它会被分割成多个boxes,这些boxes被分布在多个line box里。如果一个inline box不能被分割(比如只包含单个字符,或word-breaking机制被禁用,或该行内框受white-space属性值为nowrap或pre的影响),那么这个inline box将溢出这个line box。

    # 形成

    块级元素包含内联元素即可形成IFC,通常来讲就是div包含文本(em、span等)

    # 示例

    只要是带block的标签包含inline就可以形成IFC,不是绝对的div或p标签。 block可以通过text-align设置所有内联元素的左右对齐方式,内联元素也可以通过vertical-align设置在内联块中的上下对齐方式。

    <span>
      Several 
      <em>emphasized words</em> 
      appear
      <span>in this</span>  
      <p>sentence, dear.</p> 
    </span>
    
    1
    2
    3
    4
    5
    6
    7
    span {
      display: block;
      width: 200px;
      height: 300px;
      background: #999999;
      text-align: center;
    }
    p {  
      vertical-align: bottom;
      display: inline-block;
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    在线测试

    Grid布局

    阮一峰-Grid布局

    Flex布局

    菜鸟教程-Flex布局

    #CSS
    上次更新: 2025/09/05, 8:09:00
    CSS绘制三角形
    CSS伪类

    ← CSS绘制三角形 CSS伪类→

    最近更新
    01
    Find the next perfect square
    09-05
    02
    Regex validate PIN code
    09-05
    03
    Find the odd int
    09-05
    更多文章>
    Theme by Vdoing | Copyright © 2020-2025 kros king
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev