css table 固定列_CSS(1)- 布局

本文详细介绍了CSS布局的各种方法,包括左右布局、三栏布局(圣杯/双飞翼)、水平和垂直居中、等高布局以及粘连布局。通过实例演示了float、Flex、Grid等技术的使用,同时也分析了各种布局方式的优缺点和兼容性问题。
摘要由CSDN通过智能技术生成

CSS 布局

  1. 左右布局(两列自适应)
  2. 左中右布局(三栏布局)
  3. 水平居中
  4. 垂直居中
  5. 等高布局
  6. 粘连布局

1 - 左右布局(两列自适应)

一列由内容撑开,另一列撑满剩余宽度

1.1 float + overflow:hidden

如果是普通的布局,浮动 + 元素 margin 就可以实现,但是如果是自适应撑满的两列布局,用 float + overflow:hidden 可以实现。

此方法通过 overflow 触发 BFC,而 BFC 不会重叠浮动元素。由于设置 overflow: hidden 并不会触发 IE-6 的 haslayout 属性,所以需要设置 zoom: 1 来兼容 IE-6。代码:

  <div class="parent" style="background-color: lightgrey;">
      <div class="left" style="background-color: lightblue;">
          <p>left</p>
      </div>
      <div class="right"  style="background-color: lightgreen;">
          <p>right</p>
          <p>right</p>
      </div>        
  </div>
  .parent {
    overflow: hidden;
    zoom: 1;
  }
  .left {
    float: left;
    margin-right: 20px;
  }
  .right {
    overflow: hidden;
    zoom: 1;
  }
注意:如果侧边栏在右边,注意渲染顺序。

1.2 Flex 布局

弹性布局,很简单就能实现:
  .parent {
    
    display:flex;
  }  
  .right {
    
    margin-left:20px; 
    flex:1;
  }

1.3 Grid 布局

Grid 二维布局系统
  .parent {
    
    display:grid;
    grid-template-columns:auto 1fr;
    grid-gap:20px
  } 

2 - 三栏布局(圣杯/双飞翼)

利用 Flex 和 Grid 可以迅速进行三栏布局,和上面两列布局类似
这里我们重点讨论一下 中间自适应,两侧固定的圣杯布局和双飞翼布局

2.1 圣杯布局

介绍

比较特殊的三栏布局,同样也是两边固定宽度,中间自适应,唯一区别是 DOM 结构必须是先写中间的部分以确保中间列可以优先加载。
    <article class="container">
      <div class="center">
        <h2>圣杯布局</h2>
      </div>
      <div class="left"></div>
      <div class="right"></div>
    </article>
    .container {
      padding-left: 220px;//为左右栏腾出空间
      padding-right: 220px;
    }
    .left {
      float: left;
      width: 200px;
      height: 400px;
      background: red;
      margin-left: -100%;
      position: relative;
      left: -220px;
    }
    .center {
      float: left;
      width: 100%;
      height: 500px;
      background: yellow;
    }
    .right {
      float: left;
      width: 200px;
      height: 400px;
      background: blue;
      margin-left: -200px;
      position: relative;
      right: -220px;
    }

原理

  1. 三列都设置为左浮动,使得三列保持在一行
  2. 设置中间列宽度为 100% (自适应的关键),这时候左右会自动流动到下一行
  3. 设置 margin-left 为负值,使得左右两列回到中间列一行
  4. 设置大容器的 padding,为左右两列留出空间
  5. 通过 position: relative 调整左右两列

缺陷

  • centermin-width 不能小于 leftwidth
  • 三列中任何一列高度边长,其他两列不会自动填充

2.2 双飞翼布局

介绍

优化了圣杯布局,解决圣杯布局错乱问题,实现内容与布局分离,而且没有高度适应问题
      <article class="container">
          <div class="center">
              <div class="inner">双飞翼布局</div>
          </div>
          <div class="left"></div>
          <div class="right"></div>
      </article>
      .container {
          min-width: 600px;//确保中间内容可以显示出来,两倍left宽+right宽
      }
      .left {
          float: left;
          width: 200px;
          height: 400px;
          background: red;
          margin-left: -100%;
      }
      .center {
          float: left;
          width: 100%;
          height: 500px;
          background: yellow;
      }
      .center .inner {
          margin: 0 200px; //新增部分
      }
      .right {
          float: left;
          width: 200px;
          height: 400px;
          background: blue;
          margin-left: -200px;
      }

原理

  1. 三列都设置为左浮动,使得三列保持在一行
  2. 设置中间列宽度为 100% (自适应的关键),这时候左右会自动流动到下一行
  3. 设置 margin-left 为负值,使得左右两列回到中间列一行
  4. center 新增 inner 子容器,样式 margin: 0 200px;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值