css两栏布局、三栏布局

1,396

两栏布局,已知左侧宽度,右边自适应

  • 1.双inline-block 左右盒子均设置为display:inline-block;左盒子设置固定宽高,右盒子使用calc(100% - width左 - 5px);即可(因为中间会自动有5px的间隙需要额外减掉,目前我还不知道怎么消除(2019/11/20更新,可以在html中将两个标签的换行符去掉))。
  • 2.使用浮动单float 左盒子设置为左浮动,并设置固定宽高,右盒子设置height:**px;此方法会将右盒子的左边的内容覆盖(因为此处盒子设置为div为块元素不必设置width)。
  • 3.使用浮动双float 左盒子浮动,右盒子浮动,右盒子宽度设置用calc(100% - width左)可以无缝衔接不会有被覆盖的内容。
  • 4.使用浮动单float 左盒子设置左浮动,设置右盒子margin:0px 0px 0px width(左),右盒子不必设置宽度。
  • 5.使用定位双定位 在左右盒子外侧设置一个大盒子,不必设置大盒子的宽高,直接设置position:relative;左盒子设置position:absolute;固定宽高,右盒子设置position:absolute;left:width左;width:calc(100% - width左)可实现无缝衔接。
  • 6.使用定位单定位 左盒子设置绝对定位,设置右盒子margin:0px 0px 0px width(左),右盒子不必设置宽度。

两栏布局,左侧固定右侧自适应不计算左侧宽度

  • 7.使用flex布局 外侧盒子display:flex;align-items:flex-start/center;左盒子设置宽高即可,右盒子flex:1 1 auto;右盒子设置为放大缩小均为1,占据空间是剩下的空间。
  • 8.使用grid网格 外层盒子设置display:grid;grid-template-rows:100px;grid-template-columns:100px auto;设置了一行两列的网格,且右边网格的大小自适应。
  • 9.BFC 外侧盒子设置为overflow:auto,内部左盒子设置float:left;margin-right:0px;对左侧进行浮动,继续设置左侧盒子的大小,右盒子设置overflow:auto;对左盒子触发BFC,右盒子触发BFC,左盒子设置右外边距,右盒子设置左外边距(不设置也可),右盒子不需要设置width

注意:发现div在作为块元素时,不必设置width,会自动填充剩下的空间,但是要设置height,但是当div设置成display:inline-block时需要设置width才行

三栏布局,已知左右侧宽度,中间自适应

  • 1.使用定位 三个盒子外侧设置大盒子,大盒子使用相对定位,下面一层三个盒子均采用绝对定位,左盒子固定宽高,右盒子固定宽高并设置right: 0px;使右盒子靠右,中间盒子设置width: calc(100% - width左右相加);left: width左;即可。
  • 2.使用浮动 左盒子设置左浮动,右盒子设置右浮动,中间盒子设置margin:auto;display: inline-block;width: calc(100% - 200px);无缝衔接margin:auto;在这里不管左右盒子是否一样大都可。
  • 3.使用grid网格 设置外层盒子为display:grid;grid-template-rows:100px;grid-template-columns:100px auto 100px;即可。grid网格好厉害!!!
  • 4.使用flex 设置外层盒子为display:flex;align-items:center中间盒子设置flex:1 1 auto左右盒子在盒子内部设置内容有大小即可。