css:flex布局

目录

flex布局

flex布局父项的常见属性

flex-direction设置主轴的方向

justify-content设置主轴上的子元素排列方式

flex-wrap设置子元素是否换行

align-items设置侧轴上的子元素排列方式(单行)

align-content设置侧轴上的子元素排列方式(多行)

flex-flow属性是flex-direction和flex-wrap属性的复合属性

子项flex布局


补一下之前没学的flex

flex布局

flex是flexible Box的缩写,表示弹性布局,用来为盒装模型提供最大的灵活度,任何一种容器都可以指定为flex布局

注意事项:

当我们为父盒子施加flex布局以后,子元素的float、clear和vertical-align属性都失效

伸缩布局=弹性布局=伸缩盒布局=弹性盒布局=flex布局

采用flex布局的元素,叫flex容器,简称容器

它的所有子元素为容器成员,这些容器成员也被称为flex项目,简称项目

flex布局父项的常见属性

flex-direction设置主轴的方向

我们的元素一般是按照主轴来排列的

主轴和侧轴,也被称为行和列、x轴和y轴

一般默认主轴是x轴方向,水平向右;侧轴方向是y轴方向,水平向下

|----------------|---------|
| 属性值 | 说明 |
| row | 默认值从左到右 |
| row-reverse | 从右到左 |
| column | 从上到下 |
| column-reverse | 从下到上 |

初始:

从右到左:

从上到下和从下到上

justify-content设置主轴上的子元素排列方式

这种方法可以达到居中对齐的效果

|---------------|-------------------------|
| 属性值 | 说明 |
| flex-start | 默认值,从头部开始,如果主轴是x轴,则从左到右 |
| flex-end | 从尾部排列 |
| center | 在主轴居中对齐(如果主轴是x轴则水平居中) |
| space-around | 平分剩余空间 |
| space-between | 两边贴边,剩余的项目平分剩余空间 |

css 复制代码
flex-direction:row;       
            justify-content: center;      
css 复制代码
flex-direction:row;       
            justify-content: space-between;   
css 复制代码
flex-direction:row;       
            justify-content: space-around;   

如果把主轴设置为y轴:

css 复制代码
flex-direction:column;       
            justify-content: space-around; 

解决盒子摆不开的问题:弹性布局会改变内部项目的大小和间距,来保证我们一定塞得下盒子

flex布局下,默认盒子是不换行的

如果想让盒子摆成两行:

flex-wrap设置子元素是否换行

|--------|---------|
| 属性值 | 说明 |
| nowrap | 默认值,不换行 |
| wrap | 换行 |

css 复制代码
justify-content: space-around;
            flex-wrap: wrap;

align-items设置侧轴上的子元素排列方式(单行)

|------------|-------------------------|
| 属性值 | 说明 |
| flex-start | 默认值,从头部开始,如果主轴是x轴,则从左到右 |
| flex-end | 从尾部排列 |
| center | 在主轴居中对齐(如果主轴是x轴则水平居中) |
| strech | 拉伸(默认值) |

上下左右都居中:

css 复制代码
 flex-direction: row;
            justify-content: space-around;
            flex-wrap: wrap;
            align-items: center;
css 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            display: flex;
            width: 800px;
            height: 300px;
            background-color: pink;
            flex-direction: row;
            justify-content: space-around;
            flex-wrap: wrap;
            align-items:stretch;
        }

        div span {
            width: 150px;
            /* height: 100px; */
            /* 子盒子不给高度,才能达到stretch的效果 */
            background-color: cadetblue;
        }
    </style>
</head>

<body>
    <!-- 补充:flex布局 -->
    <div><span>1</span><span>2</span><span>3</span><span>4</span><span>5</span></div>
</body>

</html>

如果改变主轴:

css 复制代码
flex-direction: column;
            justify-content: space-between;
            flex-wrap: wrap;
            align-items: center;

align-content设置侧轴上的子元素排列方式(多行)

设置子项在侧轴的排列方式,只适用多行,单行的时候没有效果

|---------------|-------------------------|
| 属性值 | 说明 |
| flex-start | 默认值,从头部开始,如果主轴是x轴,则从左到右 |
| flex-end | 从尾部排列 |
| center | 在主轴居中对齐(如果主轴是x轴则水平居中) |
| strech | 拉伸(默认值) |
| space-around | 子项在侧轴平分剩余空间 |
| space-between | 子项在侧轴先分布在两头,再平分剩余空间 |

css 复制代码
  flex-direction: row;
            justify-content: space-between;
            flex-wrap: wrap;
            align-items: center;
            align-content: space-between;

flex-flow属性是flex-direction和flex-wrap属性的复合属性

复合写法:

css 复制代码
flex-flow:column wrap

子项flex布局

flex属性定义子项目分配剩余看见,用flex表示占多少份数

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            display: flex;
            /* 给父盒子一个flex */
            width: 800px;
            height: 100px;
            background-color: pink;
            flex-flow: row wrap;
        }

        div span:nth-child(1) {
            width: 150px;
            height: 100px;
            background-color: cadetblue;
        }

        div span:nth-child(2) {
            flex: 1;
            /* 左右的盒子各占自己的位置,中间的盒子占满剩下的位置 */
            /* height: 100px;不给高度*/
            background-color: rgb(187, 105, 146);
        }

        div span:nth-child(3) {
            width: 150px;
            height: 100px;
            background-color: rgb(214, 231, 165);
        }
    </style>
</head>

<body>
    <!-- 补充:flex布局 -->
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>
</body>

</html>

还可以用flex把父盒子平均分成三份

css 复制代码
 div span:nth-child(1) {
            flex: 1;
            background-color: cadetblue;
        }

        div span:nth-child(2) {
            flex: 1;
            /* 左右的盒子各占自己的位置,中间的盒子占满剩下的位置 */
            /* height: 100px;不给高度*/
            background-color: rgb(187, 105, 146);
        }

        div span:nth-child(3) {
            flex: 1;
            background-color: rgb(214, 231, 165);
        }

给第二个盒子设置flex:2;2盒子占1/2的空间,剩下两个盒子各占1/4

align-self控制子项在自己侧轴上的排列方式

css 复制代码
 div span:nth-child(2) {
            width: 150px;
            height: 100px;
            background-color: rgb(187, 105, 146);
            align-self: flex-start;
        }

独立设置项目自己的排列方式

order属性定义项目的排列顺序

order里的数字越小越靠前,而z-index里的数字越在前面

默认的order:0;,我们设置为-1就可以改变排序

css 复制代码
order:-1;
相关推荐
程序员大金10 分钟前
基于SpringBoot+Vue的高校电动车租赁系统
前端·javascript·vue.js·spring boot·mysql·intellij-idea·旅游
莫惊春18 分钟前
HTML5 第七章
前端·html·html5
莫惊春23 分钟前
HTML5 第六章
前端·html·html5
m0_748256561 小时前
前端新手教程:HTML、CSS 和 JavaScript 全面详解及实用案例
前端·css·html
幽兰的天空1 小时前
HTML 基本语法
前端·html
亦世凡华、2 小时前
从模型到视图:如何用 .NET Core MVC 构建完整 Web 应用
前端·经验分享·c#·mvc·.netcore
恋猫de小郭2 小时前
Flutter Web 正式移除 HTML renderer,只支持 CanvasKit 和 SkWasm
前端·flutter·html
CoderLiu2 小时前
用Rust写了一个GitLib代码分析工具
前端·git·rust
杨荧3 小时前
【开源免费】基于Vue和SpringBoot的图书进销存管理系统(附论文)
前端·javascript·vue.js·spring boot·spring cloud·java-ee·开源
:mnong3 小时前
从EXCEL表格到WEB TABLE的实践
前端