布局

150 阅读2分钟

布局分类

  1. 固定宽度布局,一般宽度为960/1000/1024px
  2. 不固定宽度布局,主要靠文档流的原理来布局
  3. 响应式布局,PC上固定宽度,手机上不固定宽度,也是一种混合布局

布局的两种思路

  1. 从大到小,先定下大局,在完善每个部分的小布局
  2. 从小到大,先完成小布局然后在组合成大布局

float布局

子元素上加float:left和width
在父元素上加.clearfix()
IE6/7存在双倍margin bug 解决办法有两个
1.将错就错吧margin减半
2.加一个dispaly:inline-block

flex布局

container 容器(包裹住项目)
items 项目(容器里面的内容)

.container{
    display:flex;<!--父级元素类似div(块级元素)-->
}
.container{
    display:inline-flex;<!--父级元素类似span(内联元素)-->
}

flex-direction

控制items流动方向 (主轴XY方向)
常用属性:默认row | row-reverse | column | column-reverse;

items

flex-wrap

常用属性:默认nowrap | wrap | wrap-reverse;

flex-wrap

justify-content

主轴对齐方式 常用属性:默认flex-start | flex-end | center | space-between | space-around | space-evenly;

align-items

次轴对齐 常用属性:默认flex-start(向上) | flex-end(向下) | center | stretch(两边撑) | baseline;

align-content

多行内容(基本不用,了解一下就行) 常用属性:默认flex-start(向上) | flex-end(向下) | center | stretch(两边撑) | baseline;

flex item 属性

order

.item:first-child{
    order:100;<!--第1个child放到最后-->
}
.item:nth-child(2){
    order:-1;<!--第2个child放到第一个-->
}
.item:last-child{
    order:1;<!--如果没有负数最后1个child排序为1-->
}

flex-grow

长胖 默认0 谁的数值大谁占得空间的多一些

.item:first-child{
    flex-grow:1;<!--第1个child给一份-->
}
.item:nth-child(2){
    flex-grow:2;<!--第2个child给两份-->
}

flex-shrink

变瘦 空间不够用的时候谁的数值大谁缩的多一些

.item:first-child{
    flex-shrink:1;<!--第1个child给一份-->
}
.item:nth-child(2){
    flex-shrink:2;<!--第2个child多缩一份-->
}

align-self

某一个元素可以特立独行 常用属性:默认flex-start(向上) | flex-end(向下) | center | stretch(两边撑) | baseline;

grid简单语法

二维布局用grid,一维布局用flex

.conteainer{
    display:grid | inline-grid;<!--}引入-->
}
.container{
    grid-template-columns:40px 50px auto 50px 40px;<!--设置多个行宽-->
    grid-template-rows:25% 100px auto;<!--设置多个行高-->
}

.a{
    grid-row-start:1;<!--设置a的高度从第1根线开始-->
    grid-rows-end:4;<!--设置a的高度从第4根线结束-->
    grid-column-start:1;<!--设置a的宽度从第1根开始-->
    grid-column-end:6;<!--设置a的宽度从第6根结束-->
}
.a{
    grid-template-columns:1fr 2fr 1fr ;<!--设置多个行宽-->
    grid-template-rows:1fr 1fr 1fr;<!--设置多个行高-->
    min-height :400px;
    grid-gap:12px;格子中间的空隙距离
}

areas属性

懒,就不写了,直接上图

areas