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;
相关推荐
Mr Xu_8 分钟前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝11 分钟前
RBAC前端架构-01:项目初始化
前端·架构
程序员agions19 分钟前
2026年,微前端终于“死“了
前端·状态模式
万岳科技系统开发20 分钟前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
程序员猫哥_27 分钟前
HTML 生成网页工具推荐:从手写代码到 AI 自动生成网页的进化路径
前端·人工智能·html
龙飞0528 分钟前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
我爱加班、、33 分钟前
Websocket能携带token过去后端吗
前端·后端·websocket
AAA阿giao33 分钟前
从零拆解一个 React + TypeScript 的 TodoList:模块化、数据流与工程实践
前端·react.js·ui·typescript·前端框架
杨超越luckly39 分钟前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
hedley(●'◡'●)1 小时前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机