CSS中BFC、水平居中、垂直居中方法总结

BFC

块格式化上下文(block formatting context),是web页面的可视化渲染出来的一部分。形成了BFC就形成了一个独立的区域,区域里面的元素不会影响到外边。

形成BFC的方法:

  1. 浮动元素:float不是none的元素。
  2. 绝对定位的元素:postion的值为absolute或fixed。
  3. 内联块元素:display:inline-block
  4. overflow的值不是visible的块元素
  5. display的值为flow-root的时候。(CSS3中新增加的)

1、2、3、4都可以形成BFC来解决一些问题但是需要加上自己的特性。所以为了单纯的触发bfc所以加入了flow-root。

形成BFC之后用来干什么:

  1. 爸爸管儿子,让爸爸能够包裹住儿子(爸爸抱抱)

    解决float高度塌陷问题

    <!DOCTYPE html>
    <html>
    
    <head>
        <!-- <link href="./normalize.css" rel="stylesheet" />
        <link rel="stylesheet" href="./appleHeader/iconfont.css"> -->
        <style>
            #f{
                /* overflow:hidden; */
                /* position:absolute; */
                display: flow-root;
                border:1px solid green;
            }
            #z{
                width:100px;
                height:100px;
                border:1px solid blue;
                float:left;
            }
        </style>
    </head>
    
    <body>
        <div id="f">
            <div id="z"></div>
        </div>
    </body>
    
    </html>
    

    解决父子间margin合并问题

    <!DOCTYPE html>
    <html>
    
    <head>
        <!-- <link href="./normalize.css" rel="stylesheet" />
        <link rel="stylesheet" href="./appleHeader/iconfont.css"> -->
        <style>
            #f{
                background-color:yellow;
                /* border:1px solid green; */
                /* padding:1px; */
                /* display:flow-root; */
                overflow: hidden;
            }
    
        </style>
    </head>
    
    <body>
        <div id="f">
            <h1>hello world!</h1>
        </div>
    </body>
    
    </html>
    
  2. 兄弟之间划清界限(亲兄弟明算账)

    float块状元素重叠,行内元素不重叠。

    <!DOCTYPE html>
    <html>
    
    <head>
    
        <style>
            img{
                float:left;
            }
            #f div{
                display:flow-root;
            }
        </style>
    </head>
    
    <body>
        <div id="f">
            <img src="./820f0866837299dd6df922b302e2129b.jpg" />
            <div>123456</div>
        </div>
    </body>
    
    </html>
    
水平、垂直居中的方法
  1. 水平居中

    1. 让块状元素、行内块状元素中的行内元素或行内块状元素水平居中(父元素上加)

      text-align:center

    2. 块状元素水平居中(子元素上加)

      margin-leftmargin-right都为auto

    3. position配合margin

      position:absolute;
      left:50%;
      margin-left:-自身宽度的一半
      
    4. position配合transform:translatex

      position:absolute;
      left:50%;
      transform:translatex(-50%);
      
    5. 弹性盒子

      display:flex;
      justify-content:center;
      
  2. 垂直居中

    1. 单行文本垂直居中

      line-height=height

    2. 图片垂直居中

      1. 父元素line-height=height;
      2. 子元素设置vertical-align:middle;
      
    3. 多行文本垂直居中

      1. 父元素line-height=height;
      2. 子元素display:inline-block
      3. 子元素的line-height:normal;
      4. vertical-align:middle;
      
    4. table-cell方式

      display:table-cell;
      vertical-align:middle;
      
      <!DOCTYPE html>
      <html>
      
      <head>
      
          <style>
              #f{
                  /* 1. 将div的显示方式改为表格的单元格 */
                  display:table-cell;
                  /* 2. 只要是表格的单元格就可以直接使用vertical-align */
                  vertical-align: middle;
                  width:500px;
                  height:500px;
                  border:1px solid green;
              }
              
          </style>
      </head>
      
      <body>
          <div id="f">
              <img src="./820f0866837299dd6df922b302e2129b.jpg" style="width:100px;" />
          </div>
      </body>
      
      </html>
      
    5. position配合margin

      1. position:absolute;
      2. top:50%;
      3. margin-top:-自身高度的一半
      
    6. position配合transform:translatey

      1. position:absolute;
      2. top:50%;
      3. transform:translatey(-50%);
      
    7. 弹性盒子

      1. display:flex;
      2. align-items:center;或align-content:center(flex-wrap:wrap;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值