CSS伸缩盒模型

元素设置为伸缩容器(开启flex布局)(父容器写样式)

/* 父容器开启flex布局,只有直接子元素是伸缩项目(应该是受影响的意思) */
/* 子元素成为伸缩项目会变成块元素(不管以前是块,行内块,行内) */
div {
	/* 将该元素变成伸缩容器(开启flex布局) */
	display: flex;
	display: inline-flex;/* 不常用,不用记 */

	/* 调整主轴方向,水平从左到右,默认 */
	flex-direction: row;
	/* 调整主轴方向,水平从右到左 */
	flex-direction: row-reverse;
	/* 调整主轴方向,水平从上到下 */
	flex-direction: column;
	/* 调整主轴方向,水平从下到上 */
	flex-direction: column-reverse;
	/* 不换行(默认) */
	flex-wrap: nowrap;
	/* 换行(换行后如果上下有空余空间,元素上下会有间距) */
	flex-wrap: wrap;
	/* 反向换行(按照侧轴反转换行) */
	flex-wrap: wrap-reverse;
}

**改变了主轴方向,侧轴也随之改变**

主轴对齐方式(父容器写样式)

div {
	/* 主轴开始的位置(默认从左到右,这里是靠左) */
	justify-content: start;
	/* 主轴结束的位置(默认从左到右,这里是靠右) */
	justify-content: flex-end;
	/* 主轴中间的位置(默认从左到右,这里是中间) */
	justify-content: center;
	/* 项目均匀分布在一行中,项目之间距离是项目与边缘的2倍 */
	justify-content: first space-around;
	/* 项目均匀分布在一行中,项目之间距离相等,项目与边缘没有距离 */
	justify-content: space-between;
	/* 项目均匀分布在一行中,项目之间距离和项目与边缘距离相等 */
	justify-content: space-evenly;
}

侧轴对齐方式(只有一行情况)(父容器写样式)

div {
	/* 侧轴对齐方式,侧轴的起始位置 */
	align-items: flex-start;
	/* 侧轴对齐方式,侧轴的结束位置 */
	align-items: flex-end;
	/* 侧轴对齐方式,侧轴的中间位置 */
	align-items: center;
	/* 侧轴对齐方式,根据文字基线对齐(文字下边缘在一条水平线上) */
	align-items: baseline;
	/* 侧轴对齐方式,元素没有高度时充满整个父容器,有高度时不生效(默认) */
	align-items: stretch;
}

侧轴对齐方式(多行情况)(父容器写样式)

div {
	/* 侧轴对齐方式,侧轴起始位置 */
	align-content: flex-start;
	/* 侧轴对齐方式,侧轴结束位置 */
	align-content: flex-end;
	/* 侧轴对齐方式,侧轴中间位置 */
	align-content: center;
	/* 侧轴对齐方式,项目之间距离是项目与边缘的2倍 */
	align-content: space-around;
	/* 侧轴对齐方式,项目之间距离相等,项目与边缘没有距离 */
	align-content: space-between;
	/* 侧轴对齐方式,项目之间距离相等 */
	align-content: space-evenly;
	/* 侧轴对齐方式,元素没有高度时充满整个父容器(默认) */
	align-content: stretch;
}

元素水平垂直居中(.father:父容器,.child:子容器)

.father {
	display: flex;
	/* 方案一 */
	justify-content: center;
	align-items: center;
}
.child {
	/* 方案二 */
	margin: auto;
}

项目在主轴的基准长度

div {
	width: 200px;
	height: 200px;
	/* 设置伸缩项目在主轴上的基准长度 */
	/* 如果主轴是横向的,原来的宽失效 */
	/* 如果主轴是纵向的,原来的高失效 */
	/* 默认auto,就是原来的数值 */
	flex-basis: 300px;
}

主轴拉伸

.child {
	/* 默认是0,就算主轴有剩余空间也不拉伸 */
    /* 如果所以伸缩项目值都是1,等分剩余空间 */
	/* 如果三个伸缩项目值为1,2,3,分别分到1/6、2/6、3/6的剩余空间 */
	/* 如果有换行,按新行拉伸 */
	flex-grow: 1;
}

主轴压缩

.child {
	/* 默认值是1,等比例缩小 */
	/* 如果三个伸缩项目宽为200、300、200,值为1,2,3,则 */
	/* 计算分母:(200 * 1) + (300 * 2) + (200 * 3) = 1400 */
	/* 计算比例: */
	/* 项目一:(200 * 1) / 1400 = 比例值1 */
	/* 项目二:(300 * 2) / 1400 = 比例值2 */
	/* 项目三:(200 * 3) / 1400 = 比例值3 */
	/* 最终收缩大小: */
	/* 项目一收缩:比例值1 * 200 */
	/* 项目二收缩:比例值2 * 300 */
	/* 项目三收缩:比例值3 * 200 */
	flex-shrink: 1;
}

flex复合属性

.child {
	/* 可以拉伸 可以压缩 不设置基准长度,可简写:flex: auto; */
	flex: 1 1 auto;
}

排序和单独对齐

.child {
	/* 页面按照这个值往主轴方向排序,数值越小越靠前(默认0) */
	order: -1;
}
.child {
	/* 侧轴单独对齐(了解即可) */
	align-self: center;
}

**当父元素没有高度时子元素水平垂直居中:**

.father {
	/* 先计算父元素的高度 */
	/* 100vh:整个页面高度 */
	/* 70px:上方导航条的高度 */
	height: calc(100vh - 70px);
}
.child {
	/* 子元素使用margin: auto;实现水平垂直居中 */
	/* margin: auto;必须父元素有高度 */
	margin: auto;
}

上一篇
下一篇