用法: display:flex 或 display:inline-flex 或 display:-webkit-flex
flex-diretion主要是用来调整主轴的方向的,默认是水平方向
justify-content属性定义了子项目在主轴上的对齐方式。(假设主轴为从左到右)
flex-wrap属性 默认情况下,子项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行
align-items 属性定义子项目在交叉轴上如何对齐。(假设交叉轴从上到下)
align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。只适用于多行的flex容器
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
flex-flow: ||
<html lang="en">
<head>
<meta charset="UTF-8">
<title>02-flex参数详解title>
<style>
*{
padding: 0;
margin: 0;
}
li {
list-style: none;
}
ul {
width: 600px;
height: 400px;
border: 1px solid #000;
margin: 50px auto;
/*
只要给盒子指定display: flex;这个盒子就成为了伸缩盒子(flex布局 弹性盒子)
就拥有了主轴和交叉轴的概念,默认主轴水平往右,交叉轴垂直往下,盒子在主轴方向从左往右进行排布
*/
display: flex;
/*
注意:主轴的方向是可以进行控制的,通过flex-direction 可以取四个值
flex-direction:主要是用来调整主轴的方向的,默认是水平方向
1.row:主轴方向为水平向右
2.column:主轴方向为竖直向下
3.row-reverse:主轴方向为水平向左
4.column-reverse:主轴方向是竖直向上
*/
flex-direction: row; /*主轴默认的排布方式*/
/*flex-direction: column;*/
/*flex-direction: row-reverse;*/
/*flex-direction: column-reverse;*/
/*
主轴方向对齐方式
justify-content主要用来设置主轴方向的对齐方式
1.flex-start: 弹性盒子元素将向起始位置对齐
2.flex-end: 弹性盒子元素将向结束位置对齐
3.center: 弹性盒子元素将向行中间位置对齐
4.space-around: 弹性盒子元素会平均地分布在行里
5.space-between:第一个贴左边,最后一个贴右边,其他盒子均分,保证每个盒子之间的空隙是相等的
*/
/*justify-content: flex-end;*/
justify-content: space-between;
/*
align-items:用于调整交叉轴的对其方式
1.flex-start:元素在交叉轴的起始位置对齐
2.flex-end:元素在交叉轴的结束位置对齐
3.center:元素在交叉轴上居中对齐
4.stretch:元素的高度会被拉伸到最大(不能给死高度)
*/
/*如果给子元素设置了高度的话,这个元素就看不出来效果,先把高度去掉试一波*/
/*align-items: stretch;*/
align-items: flex-start;
}
ul li{
width: 100px;
height: 100px;
border:1px solid #000;
background-color: red;
/*css3 盒模型 如果设置了border或者是padding自动内减*/
box-sizing: border-box;
}
style>
head>
<body>
<ul>
<li>li>
<li>li>
<li>li>
ul>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>03-flex换行问题title>
<style>
*{
padding: 0;
margin: 0;
}
li {
list-style: none;
}
ul {
width: 600px;
height: 400px;
border: 1px solid #000;
margin: 50px auto;
display: flex;
flex-direction: row;
/*
默认伸缩盒子不换行,在一行显示,如果子元素内容溢出,会压缩子元素的宽度
flex-wrap属性控制flex容器是单行或者多行,默认不换行
1.nowrap:不换行(默认),会压缩子盒子的宽度
2.wrap:当宽度不够的时候,会换行
*/
flex-wrap: wrap; /*默认是不换行的*/
justify-content: flex-start;
/*align-items: flex-start; 这个是控制单行的*/
/*
1.align-content用来设置多行的flex容器的排列方式
1.flex-start:各行向侧轴的起始位置堆叠
2.flex-end:各行向弹性盒容器的结束位置堆叠
3.center:各行向弹性盒容器的中间位置堆叠
4.space-between:各行在侧轴中平均分布
5.space-around:第一行贴上边,最后一个行贴下边,其他行在弹性盒容器中平均分布
6.stretch:拉伸,不设置高度的情况下
2.align-items和align-content的区别:
1.align-items调整的是交叉轴的对其方式,不换行一般用align-items
2.align-content:必须是多行才生效,如果单行,没有效果。换行了就用align-content
*/
/*一样的设置高度的话效果会看不出来*/
align-content: stretch;
}
ul li{
width: 100px;
height: 100px;
border:1px solid #000;
background-color: red;
box-sizing: border-box;
}
style>
head>
<body>
<ul>
<li>li>
<li>li>
<li>li>
<li>li>
<li>li>
<li>li>
<li>li>
<li>li>
<li>li>
ul>
body>
html>
order属性定义子项目的排列顺序。数值越小,排列越靠前,默认为0
flex-grow属性定义子项目的放大比例,默认为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个子项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍
flex-shrink属性定义了子项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。flex: none | [ <‘flex-grow’> <‘flex-shrink’>? || <‘flex-basis’> ]。该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch
<html lang="en">
<head>
<meta charset="UTF-8">
<title>04-flex布局给子元素设置样式属性title>
<style>
*{
padding: 0;
margin: 0;
}
li {
list-style: none;
}
ul {
width: 600px;
height: 400px;
border: 1px solid #000;
margin: 50px auto;
display: flex;
flex-direction: row;
justify-content: center;
/*align-content: stretch;*/
align-items: center;
}
ul li{
/*width: 100px;*/
height: 100px;
border:1px solid #000;
background-color: red;
box-sizing: border-box;
font-size: 28px;
line-height: 100px;
color:#fff;
text-align: center;
/*
需求1:我现在的话想让每个子元素的位置不一样 第一个在最上面 第二个保持不变 第三个的话在最下面
align-self也是用于设置在侧轴的位置,但是align-self给子元素设置,优先级比align-items的优先级高
需求2: 我现在想让包含内容为3的li显示在最前面,内容包含为1的li显示在最后面,可以使用order属性进行设置,order属性的值越小,则排在越前面
需求3: 可以不给li设置宽度,让他们进行平分 使用flex属性 flex属性是去除指定盒子属性宽度后 平分剩下的空间
*/
}
ul li:nth-child(1){
align-self: flex-start;
/*width: 100px;*/
flex-grow: 2;
order: 3;
}
ul li:nth-child(2){
/*align-self: flex-start;*/
/*flex: 1;*/
flex-grow: 1;
order: 2;
}
ul li:nth-child(3){
align-self: flex-end;
/*width: 100px;*/
flex-grow: 1;
order: 1; /*order属性定义子项目的排列顺序。数值越小,排列越靠前,默认为0*/
}
style>
head>
<body>
<ul>
<li>1li>
<li>2li>
<li>3li>
ul>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>05-六面神骰title>
<style>
*{
padding: 0;
margin: 0;
}
li {
list-style: none;
}
body{
background-color: hotpink;
}
ul {
width: 150px;
height: 150px;
background-color: #fff;
border-radius: 5%;
float: left;
margin:40px;
}
li {
width: 20px;
height: 20px;
border-radius: 50%;
background-color: #000;
}
ul:nth-child(1) {
display: flex;
justify-content: center;
align-items: center;
}
ul:nth-child(2) {
display: flex;
justify-content: space-around;
align-items: center;
}
ul:nth-child(3) {
display: flex;
justify-content: space-around;
align-items: center;
padding: 10px 0;
box-sizing: border-box;
}
ul:nth-child(3) li:nth-child(1){
align-self: flex-start;
}
ul:nth-child(3) li:nth-child(3){
align-self: flex-end;
}
ul:nth-child(4) {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
align-content: space-around;
}
ul:nth-child(4) li{
margin: 0 20px;
}
ul:nth-child(5) {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
align-content: space-around;
}
ul:nth-child(5) li{
margin: 0 20px;
}
ul:nth-child(5) li:nth-child(3){
margin: 0 50px;
}
ul:nth-child(6) {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
align-content: space-around;
}
ul:nth-child(6) li{
margin: 0 20px;
}
style>
head>
<body>
<ul><li>li>ul>
<ul><li>li><li>li>ul>
<ul><li>li><li>li><li>li>ul>
<ul><li>li><li>li><li>li><li>li>ul>
<ul><li>li><li>li><li>li><li>li><li>li>ul>
<ul><li>li><li>li><li>li><li>li><li>li><li>li>ul>
body>
html>