0
点赞
收藏
分享

微信扫一扫

CSS----flex布局

林肯公园_97cc 2022-01-07 阅读 86

1. flex 是什么?

flex 是 Flexible Box 的缩写,就是弹性盒子布局.

2. 为什么我们需要 flex?

解决元素居中问题自动弹性伸缩以及适配不同大小的屏幕和移动端

3、如何设置flex布局

与grid类似,flex也分为块级元素和行内元素两种,分别为display:flex(块级元素)与display:inline-flex(行内元素)。

     我们先来举个例子看看flex有何作用,首先,我们先来看未设置flex布局时的样子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<STyle>
    .container{
        border: 10px solid black;
        height: 500px;
        width: 1000px;


    }
    .container div{
        width: 500px;

    }
     .item1{
      background-color: pink;
     
   }
   .item-2{
       background-color: purple;
    
   }
   .item-3{
       background-color: red;
   }
   .item-4{
       background-color: rosybrown;
    
   }
   .item-5{
       background-color: salmon;
    
   }
   .item-6{
       background-color: slateblue;
   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

效果如图: 

 当设置flex后为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .container{
        border: 10px solid black;
        height: 500px;
        width: 1000px;
        display: flex;



        align-content: stretch; 
    }
    .container div{
        width: 500px;

    }
     .item1{
      background-color: pink;

     
   }
   .item-2{
       background-color: purple;
    
   }
   .item-3{
       background-color: red;
   }
   .item-4{
       background-color: rosybrown;
    
   }
   .item-5{
       background-color: salmon;
    
   }
   .item-6{
       background-color: slateblue;
   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

在设置了flex布局6个div沿着主轴方向排列(沿着主轴方向排列一般为flex的默认方式)

4、容器属性

4.1排列方向:flex-direction

row

横向从左到右排列(左对齐)。

row-reverse

对齐方式与row相反。

column

纵向从上往下排列(顶对齐)。

column-reverse

对齐方式与column相反。

接下来我们一一举例来说明这几种属性:

4.1.1、row

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .container{
        border: 10px solid black;
        height: 500px;
        width: 100%;
        display: flex;
        flex-direction: row;
    }

    .container div{
       width: 500px;
    }
     .item1{
      background-color: pink;
      /* 允许项目进行收缩 */
     
   }
   .item-2{
       background-color: purple;

    
   }
   .item-3{
       background-color: red;
   }
   .item-4{
       background-color: rosybrown;
    
   }
   .item-5{
       background-color: salmon;
    
   }
   .item-6{
       background-color: slateblue;
   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

 在主轴是row时就是默认方向和不设置时几乎一致。

4.1.2、row-reverse

.container{
        border: 10px solid black;
        height: 500px;
        width: 100%;
        display: flex;
        flex-direction: row-reverse;
    }

    

 当把主轴设为row-reverse时,可以看到排列的方向是和row默认值相反的。

4.1.3、column


    .container{
        border: 10px solid black;
        height: 500px;
        width: 1000px;
        display: flex;
        flex-direction: column;
    }

 在将主轴设为column后,主轴的排序顺序从左右排列的方式变为了上下。

4.1.4、column-reverse

.container{
        border: 10px solid black;
        height: 500px;
        width: 1000px;
        display: flex;
        flex-direction: column-reverse;
    }

 将主轴设为column-reverse后,和row-reverse与row一样,它也变成了和column相反的排列方向。

4.2、换行属性:flex-wrap

nowrap

flex容器为单行。(默认值)

wrap

flex容器为多行。该情况下flex子项溢出的部分会自动换行

wrap-reverse

反转 wrap 排列

接下来我们一一举例来说明这几种属性:

4.2.1、nowrap

首先,我们继续输入6个div,使它们的总宽大于容器宽度,来看它在nowrap也就是默认情况下,是什么样子的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<STyle>
    .container{
        border: 10px solid black;
        height: 500px;
        width: 1000px;
        display: flex;
        flex-wrap: nowrap;
    }

    .container div{
       width: 800px;
       height: 500px;
    }
     .item1{
      background-color: pink;
     
   }
   .item-2{
       background-color: purple;

    
   }
   .item-3{
       background-color: red;
   }
   .item-4{
       background-color: rosybrown;
    
   }
   .item-5{
       background-color: salmon;
    
   }
   .item-6{
       background-color: slateblue;
   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

 可以看到整个容器的大小其实没有变化,但她它自动的压缩了每个div的宽度,使得每个div都可以在容器里,而不会溢出。

 4.2.2、wrap

当我们设置rap进行换行时,来看看会是什么样子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<STyle>
    .container{
        border: 10px solid black;
        height: 600px;
        width: 500px;
        display: flex;
        flex-wrap: wrap;
    }

    .container div{
       width: 100px;
       height: 300px;
    }
     .item1{
      background-color: pink;
     
   }
   .item-2{
       background-color: purple;

    
   }
   .item-3{
       background-color: red;
   }
   .item-4{
       background-color: rosybrown;
    
   }
   .item-5{
       background-color: salmon;
    
   }
   .item-6{
       background-color: slateblue;
   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

 当设置为warp时,如果div的宽度大于容器时,会将多余的部分换行放下。

4.2.3、wrap-reverse

当设置为wrap-reverse后,将会变成反方向换行:

.container{
        border: 10px solid black;
        height: 600px;
        width: 500px;
        display: flex;
        flex-wrap: wrap-reverse;
    }

 4.3、项目在容器中的主轴对其方式:justify-content

flex-start

弹性盒子元素将向行起始位置对齐。

flex-end  

弹性盒子元素将向行结束位置对齐。

center  

弹性盒子元素将向行中间位置对齐。

space-between 

弹性盒子元素会平均地分布在行里。

space-around弹性盒子元素会平均地分布在行里,两端保留子元素与子元素之间间距大小的一半。
space-evenly 均匀排列每个元素每个元素之间的间隔相等

4.3.1、flex-start

flex-start为默认属性,所以在此就不过多的举例说明了。

4.3.2、flex-end

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<STyle>
    .container{
        border: 10px solid black;
        height: 600px;
        width: 800px;
        display: flex;
        justify-content: flex-end;
    }

    .container div{
       width: 100px;
       height: 300px;
    }
     .item1{
      background-color: pink;
     
   }
   .item-2{
       background-color: purple;

    
   }
   .item-3{
       background-color: red;
   }
   .item-4{
       background-color: rosybrown;
    
   }
   .item-5{
       background-color: salmon;
    
   }
   .item-6{
       background-color: slateblue;
   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

 4.3.3、center

.container{
        border: 10px solid black;
        height: 600px;
        width: 800px;
        display: flex;
        justify-content: center;
    }

 4.3.4、space-between

.container{
        border: 10px solid black;
        height: 600px;
        width: 800px;
        display: flex;
        justify-content: space-between;
    }

 4.3.5、space-around

.container{
        border: 10px solid black;
        height: 600px;
        width: 800px;
        display: flex;
        justify-content: space-around;
    }

 4.3.6、space-evenly

 .container{
        border: 10px solid black;
        height: 600px;
        width: 800px;
        display: flex;
        justify-content: space-evenly;
    }

4.4、项目在容器中的交叉轴对齐方式:align-content与align-items (只适用单行项目)

flex-start

弹性盒子元素将向行起始位置对齐。

flex-end  

弹性盒子元素将向行结束位置对齐。

center  

弹性盒子元素将向行中间位置对齐。

space-between 

弹性盒子元素会平均地分布在行里。

space-around弹性盒子元素会平均地分布在行里,两端保留子元素与子元素之间间距大小的一半。
space-evenly 均匀排列每个元素每个元素之间的间隔相等

两者之间的区别:align-content使用多行或是单行进行对齐,而align-items 只适用单行项目。
交叉轴对齐方式效果与在justify-content上的排列方式差不多。我们继续举几个例子说明:

4.4.1align-content:flexend

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<STyle>
    .container{
        border: 10px solid black;
        height: 600px;
        width: 1200px;
        display: flex;
        flex-wrap: wrap;
        align-content: flex-end;
    

    }

    .container div{
       width: 400px;
    }
     .item1{
      background-color: pink;

     
   }
   .item-2{
       background-color: purple;

    
   }
   .item-3{
       background-color: red;

   }
   .item-4{
       background-color: rosybrown;

   }
   .item-5{
       background-color: salmon;

   }
   .item-6{
       background-color: slateblue;

   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

 在使用了align-content:flexend之后,6个div的排序方向全为了下方,和justify-content:flexend一样,只不过变为交叉轴在移动,主轴无任何变化。其他的对齐方式以及align-items与justify-content都几乎一致,只不过变为了交叉轴对齐方式,所以就不过多举例。

5、项目属性

5.1、flex-shrink

5.1.1、flex-shrink的作用

设而置或检索弹性盒的收缩比率。根据弹性盒子元素所设置的收缩因子作为比率来收缩空间。

5.1.2、如何设置

我们继续举个例子来看:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<STyle>
    .container{
        border: 10px solid black;
        height: 600px;
        width: 1200px;
        display: flex;
    

    }

    .container div{
       width: 400px;
       height: 200px;
    }
     .item1{
      background-color: pink;
      flex-shrink: 0;

     
   }
   .item-2{
       background-color: purple;

    
   }
   .item-3{
       background-color: red;

   }
   .item-4{
       background-color: rosybrown;

   }
   .item-5{
       background-color: salmon;

   }
   .item-6{
       background-color: slateblue;

   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

 可以看到我在第一个div处设置了flex-shrink后,第一个div并没有出现被压缩的情况出现,就是原本设置的400px,这就是flex-shrink的作用。当然也需要注意,flex-shrink属性的值只有0或1,0代表禁止压缩,1代表可以被压缩也就是默认值。

5.2、align-self:

5.2.1align-self的值

auto值为元素的父元素的'align-items'值,如果其没有父元素,则计算值为'stretch'。
flex-start放置在容器顶部
flex-end放置在容器底部
center居中放置
baseline如弹性盒子元素的行内轴与侧轴为同一条,则该值与'flex-start'等效。
stretch与容器的基线对齐

接下来我们来一一举例说明: 

5.2.2、align-self:auto

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<STyle>
    .container{
        border: 10px solid black;
        height: 600px;
        width: 1200px;
        display: flex;
    

    }

    .container div{
       width: 400px;
    }
     .item1{
      background-color: pink;

     
   }
   .item-2{
       background-color: purple;
       align-self: auto;
   }
    
   .item-3{
       background-color: red;

   }
   .item-4{
       background-color: rosybrown;

   }
   .item-5{
       background-color: salmon;

   }
   .item-6{
       background-color: slateblue;

   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

5.2.2、align-self:flex-start

.item-2{
       background-color: purple;
       align-self: flex-start;
   }

 5.2.3、align-self:flex-end

.item-2{
       background-color: purple;
       align-self: flex-end;
   }

  5.2.4、align-self:center

.item-2{
       background-color: purple;
       align-self: center;
   }

 5.2.5、allign-self:baseline

.item-2{
       background-color: purple;
       align-self: baseline;
   }

5.2.6、allign-self:stretch

.item-2{
       background-color: purple;
       align-self: baseline;
   }

 

5.3、order

5.3.1如何使用order

我们先使用默认布局来看默认状态下的布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<STyle>
    .container{
        border: 10px solid black;
        height: 600px;
        width: 1200px;
        display: flex;
    

    }

    .container div{
       width: 400px;
       height: 200px;
    }
     .item1{
      background-color: pink;

     
   }
   .item-2{
       background-color: purple;

    
   }
   .item-3{
       background-color: red;

   }
   .item-4{
       background-color: rosybrown;

   }
   .item-5{
       background-color: salmon;

   }
   .item-6{
       background-color: slateblue;

   }
</STyle>
<body>
    <div class="container">
        <div class="item1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
        <div class="item-4">4</div>
        <div class="item-5">5</div>
        <div class="item-6">6</div>
    </div>
</body>
</html>

接下来我们来看看设置了order后的布局:

 .item1{
      background-color: pink;
      order: 3;

     
   }
   .item-2{
       background-color: purple;
       order: 2;
   }
    
   .item-3{
       background-color: red;
       order: 1;

 

在设置了order后会发现div的顺序变了。order的数值越大在排序中越靠后,因为order属性的默认值为0,而order的排序是按照数值从小拍排列,所以当我将第一个div的order值设为3时,它成为order值最大的div,所以它排列在了最后。

举报

相关推荐

CSS - flex布局

CSS布局(1)-Flex布局

css---flex布局

CSS Flex布局示例

CSS-flex布局

css flex 上下结构布局

0 条评论