简介:在块级元素 + float + position 的情况下,再加上一calc的css计算函数 基本也能解决所有布局问题了, 弹性布局是目前的主流方案
文章均为个人原创, 搬运请附上原文地址感谢, 原文来自MasterYi博客
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>弹性布局</title>
</head>
<style>
.box{
width: 350px;
margin: 10px;
height: 300px;
border: 2px solid;
padding: 10px;
display: flex;
flex-direction: row;
}
.box div{
height: 100px;
width: 100px;
border: 1px solid #ccc;
border-radius: 5px;
text-align: center;
font-size: 24px;
line-height: 100px;
}
</style>
<body>
<div class="box">
<div class="A">A</div>
<div class="B">B</div>
<div class="C">C</div>
<div class="D">D</div>
<div class="E">E</div>
</div>
</body>
</html>
属性 | 介绍 |
---|---|
display | 设置盒子为弹性盒子 (flex、inline-flex), 这两就是之前盒子的 block 和 inline-block 特点, 区别是前者变为弹性盒子会改变子元素特性 |
flex-direction | 决定主轴的方向 |
flex-wrap | 如何换行 |
justify-content | 主轴上的对齐方式 |
align-items | 交叉轴上对齐方式 |
align-content | 多根轴线的对齐方式,如果项目只有一根轴线,该属性不起作用 |
- flex-wrap: nowrap (不换行,也是默认值),图中可以看出本来是正方形的A-E元素被压成了长方形,因为不换行默认也不会去超出,而是会等分挤压元素的大小
>- flex-wrap: wrap ( 换行、第一行在上方 )
>- flex-wrap: wrap-reverse ( 换行、第一行在下方, 也就是代表是wrap的反向来 )
>
- justify-content: flex-start 起点方向对齐、默认值
>- justify-content: flex-end 终点方向对齐, 因为我的起点方向是左侧,可以看到终点对齐就会是右侧
>- justify-content: center 居中对齐
>- justify-content: space-between 两端对齐,左右元素两端靠边对齐,剩余空间会等分给项目之间的间隔,项目之间的间隔会保持一致
>- justify-content: space-around 项目两侧间隔相等,仔细看下面的DE可以看出,项目中间的间隔会等于两侧的间隔相加, 因为项目的左右间隔会保持一致,例如左右10px的间隔,那么项目之间的间隔就会有20px
>
- align-items: flex-start 交叉轴起点对齐
>- align-items: flex-end 交叉轴终点对齐
>- align-items: center 交叉轴的中点对齐
>- align-items: stretch 对齐方式为交叉轴起点, 但与flex-start不同的是如果项目未设置高度,或者高度为auto 高度会铺满容器 , 我这里B元素高度设置为了auto
>- align-items: baseline 项目的第一行文字的基线对齐
>
- align-content: flex-start 与交叉轴起点对齐
>- align-content: flex-end 与交叉轴的终点对齐
>- align-content: center 交叉轴的中点对齐
>- align-content: space-between 交叉轴两端对齐
>- align-content: stretch 轴线占满整个交叉轴
>- align-content: space-around 轴线两侧间隔相等
>
- 排序值,数字越小越靠前 (此处的靠前是指靠近主轴的起点)
- 正常而言应该是ABCDE, 但我此刻修改一下他们的order值
>
- 首先我们看一个项目,容器宽为350px,项目100px, 我将 B的flex-grow设置为1, 其余A和C默认0不放大,那么效果便会是所有剩余空间被B分掉
>- 第二个效果, 将项目的宽取消掉 设置 A( flex-grow: 1 ), B( flex-grow: 2 ), C( flex-grow: 1 )
- 代表我们将容器划分为了4份 B分了两份剩余空间, A一份剩余空间、C一份剩余空间
>
- 默认值为1, 定义缩小比例
- 在项目空间不足时的缩小比例, 值越大压缩的越狠, 为0时代表不压缩, 此处设置C为0,C就没被压缩,其他的元素等比压缩
>
- 定义多余空间分配前项目占据的主轴空间 (值为宽高同款设定)
- 此处所有项目主轴空间为100px, 但我单独设定C的flex-basis为200px, 效果就会如下
>
- 项目的对齐方式
- 项目唯一一个不是做分配的值, 该值代表单独设定项目的交叉轴对齐方式
- 此处我的容器高300px 默认对齐方式为 flex-start, 但我单独设定B为flex-end 就会呈现这种效果
>