CSS Flex弹性布局

一、传统布局与flex布局

1、传统布局

2、flex布局

二、flex布局原理

1、布局原理

2、flex布局体验

三、flex布局父项常见属性

1、常见的父项属性

2、flex-direction设置主轴的方向

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

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

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

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

7、flex-flow

四、flex布局子项常见属性

1、常见的子项属性

2、flex子项占的份数

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

4、order属性定义子项的排列顺序(前后顺序)

五、应用


一、传统布局与flex布局

1、传统布局

  • 兼容性好;

  • 布局繁琐;

  • 局限性,不能在移动端很好的布局;

2、flex布局

  • 操作方便,布局极为简单,移动端应用很广泛;

  • PC端浏览器支持情况较差;

  • IE 11或更低版本,不支持或仅部分支持;

二、flex布局原理

1、布局原理

flex是Flexible Box的缩写,意为 “ 弹性布局 ” ,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局

  • 当我们为父盒子设为flex布局以后,子元素的float、clear和vertical-align属性将失效;

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

采用Flex布局的元素,称为Flex容器( flex container ),简称 “ 容器 ”。它的所有子元素自动成为容器成员,称为Flex项目( flex item ),简称 “ 项目 ” 。 

flex布局原理总结

通过给父盒子添加flex属性,来控制子盒子的位置和排列方式

2、flex布局体验

(1)准备页面

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>
        *{
            padding: 0;
            margin: 0;
        }

        .container{
            background-color: bisque;     
        }

        .item{
            background-color: skyblue;
            width: 200px;
            height: 100px;
            margin: 10px;
        }
    </style>
</head>
<body>
    <div class="container">
        <span class="item">1</span>
        <span class="item">2</span>
        <span class="item">3</span>
    </div>
</body>
</html>

页面效果如下:

(2)添加flex布局

给父元素天机属性 display:flex,将父元素设置为flex布局;

.container{
    background-color: bisque;
    /* 父容器设置为flex布局 */
    display: flex;      
}

实现效果:

三、flex布局父项常见属性

1、常见的父项属性

属性名

作用

flex-direction

设置主轴的方向

justify-content

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

flex-wrap

设置子元素是否换行

align-content

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

align-items

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

flex-flow

符合属性,相当于同时设置了flex-direction和flex-wrap

2、flex-direction设置主轴的方向

(1)主轴与侧轴

在flex布局中,是分为主轴和侧轴两个方向,同样的叫法有:行和列、x轴和y轴;

  • 默认主轴方向就是x轴方向,水平向右;

  • 默认侧轴方向就是y轴方向,水平向下;

(2)属性值

flex-direction属性决定主轴的方向(即项目的排列方式);

注意:主轴和侧轴是会变化的,就看flex-direction设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的;

flex-direction的属性值

属性值

说明

row

默认值从左到右

row-reverse

从右到左

column

从上到下

column

从下到上

(3)属性效果

*{
    padding: 0;
    margin: 0;
}

.container{
    background-color: bisque;
    width: 800px;
    height:300px;
    /* 父容器设置为flex布局 */
    display: flex;   

    /* 主轴方向:从左到右 默认 x || row */
    /* flex-direction: row; */

    /* 主轴方向:从右到左 */
    /* flex-direction: row-reverse; */

    /* 主轴方向:从上到下 */
    /* flex-direction: column; */
    
    /* 主轴方向:从下到上 */
    /* flex-direction: column-reverse; */

}

.item{
    background-color: skyblue;
    width: 200px;
    height: 100px;
    margin: 10px;
}

flex-direction: row;
主轴方向:从左到右 默认;

flex-direction: row-reverse; 

主轴方向:从右到左

flex-direction: column;

主轴方向:从上到下

flex-direction: column-reverse;

主轴方向:从下到上

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

justify-content属性定义了项目在主轴上的对齐方式

注意:使用这个属性之前一定要确定好主轴是哪个

(1)属性值

属性值

说明

flex-start

默认值 从头部开始 如果主轴是x轴, 则从左到右

flex-end

从尾部开始排列

center

在主轴剧中对齐( 如果主轴是x轴 则水平居中 )

spance-around

平分剩余空间

spance-between

先两边贴边 再平分剩余空间(重要)

(2)属性效果

*{
    padding: 0;
    margin: 0;
}

.container{
    background-color: bisque;
    width: 800px;
    height:300px;
    /* 父容器设置为flex布局 */
    display: flex;   

    /* 主轴方向:从左到右 默认 x || row */
    flex-direction: row;

    justify-content: start;

    /* justify-content: end; */

    /* justify-content: center; */

    /* justify-content: space-around; */

    /* justify-content: space-between; */

}

.item{
    background-color: skyblue;
    width: 200px;
    height: 100px;
    /* margin: 10px; */
    border: 1px solid #ccc;
}

justify-content: start;

子元素排列方式: 从头部开始;

justify-content: end;

子元素排列方式: 从尾部开始;

justify-content: center;

子元素排列方式:在主轴剧中对齐;

justify-content: space-around;

子元素排列方式:平分剩余空间;

justify-content: space-between;

子元素排列方式:平分剩余空间;

注意:以上只是在主轴上的排列方式,可以结合主轴方向进行多种变换; 

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

  • 默认情况下,项目都排在一条线(又称 “ 轴线 ” )上;

  • flex-wrap属性定义,flex布局中默认是不换行的

  • 如果父元素装不下子元素,会缩小子元素的宽度,放到父元素里面;

(1)属性值

属性值

说明

nowrap

默认值,不换行

wrap

换行

(2)属性效果

*{
    padding: 0;
    margin: 0;
}

.container{
    background-color: bisque;
    width: 800px;
    height:300px;
    /* 父容器设置为flex布局 */
    display: flex;   

    /* 设置子元素不换行( 父元素放不下子元素时,会缩小子元素的宽度,使其都在父元素中显示) */
    flex-wrap: nowrap;

    /* 设置子元素换行 */
    /* flex-wrap: wrap; */
}

.item{
    background-color: skyblue;
    width: 200px;
    height: 100px;
    margin: 10px;
    /* border: 1px solid #ccc; */
}

flex-wrap: nowrap;

设置子元素不换行( 父元素放不下子元素时,会缩小子元素的宽度,使其都在父元素中显示)

flex-wrap: wrap;

设置子元素换行;

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

该属性是控制子项在侧轴( 默认是y轴 )上的排列方式 在子项为单项的时候使用

(1)属性值

属性值

说明

flex-start

默认值 从上到下

flex-end

从下到上

center

挤在一起剧中(垂直居中)

stretch

拉伸

(2)属性效果

*{
    padding: 0;
    margin: 0;
}

.container{
    background-color: bisque;
    width: 800px;
    height:300px;
    /* 父容器设置为flex布局 */
    display: flex;   

    /* 设置子元素在侧轴的排列方式 */

    /* 从上到下 (默认)*/
    align-items: flex-start;

    /* 从下到上 */
    /* align-items: flex-end; */

    /* 垂直居中 */
    /* align-items: center; */

    /* 拉伸(竖直方向,子元素不能给高度) */
    /* align-items: stretch; */
}

.item{
    background-color: skyblue;
    width: 200px;
    height: 100px;
    margin: 10px;
    /* border: 1px solid #ccc; */
}

align-items: flex-start;

设置子元素在侧轴的排列方式:从上到下 (默认);

align-items: flex-end;

设置子元素在侧轴的排列方式:从下到上;

align-items: center;

设置子元素在侧轴的排列方式:垂直居中;

align-items: stretch;

设置子元素在侧轴的排列方式:拉伸(竖直方向,子元素不能给高度);

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

设置子项在侧轴上的排列方式,并且只能用于子项出现换行的情况(多行),在单行下是没有效果的

(1)属性值

属性值

说明

flex-start

默认值在侧轴的头部开始排列

flex-end

在侧轴的尾部开始排列

center

在侧轴中间显示

space-around

子项在侧轴平分剩余空间

space-between

子项在侧轴先分布在两头,再平分剩余空间

stretch

设置子项元素高度平分父元素高度

(2)属性效果

*{
    padding: 0;
    margin: 0;
}

.container{
    background-color: bisque;
    width: 800px;
    height:400px;
    /* 父容器设置为flex布局 */
    display: flex;   

    /* 设置子元素换行显示 */
    flex-wrap: wrap;

    /* 设置侧轴上子元素的排列方式 */

    /* 在侧轴的头部开始排列 默认值 */
    align-content: flex-start;

    /* 在侧轴的尾部开始排列 */
    /* align-content: flex-end; */

    /* 在侧轴中间显示 */
    /* align-content: center; */

    /* 子项在侧轴平分剩余空间 */
    /* align-content: space-around; */

    /* 子项在侧轴先分布在两头,再平分剩余空间 */
    /* align-content: space-between; */

    /* 设置子项元素高度平分父元素高度 */
    /* align-content: stretch; */
}

.item{
    background-color: skyblue;
    width: 200px;
    /* height: 100px; */
    margin: 10px;
    /* border: 1px solid #ccc; */
}

align-content: flex-start;

设置侧轴上子元素的排列方式:在侧轴的头部开始排;

align-content: flex-end;

设置侧轴上子元素的排列方式:在侧轴的尾部开始排列;

align-content: center;

设置侧轴上子元素的排列方式:在侧轴中间显示;

align-content: space-around;

设置侧轴上子元素的排列方式:子项在侧轴平分剩余空间;

 align-content: space-between;

设置侧轴上子元素的排列方式:子项在侧轴先分布在两头,再平分剩余空间;

align-content: stretch;

设置侧轴上子元素的排列方式:设置子项元素高度平分父元素高度(子元素不给高度);

(3)align-content 和 align-items 区别

  • align-items 适用于单行情况下,只有上对齐、下对齐、居中和拉伸;

  • align-content 适用于换行(多行)的情况下(单行情况下无效),可以设置上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性值;

  • 总结就是单行找 align-items 多行找 align-content;

7、flex-flow

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

flex-direction: row;
flex-wrap: wrap;

/* 相当于 */

flex-wrap: row wrap;

四、flex布局子项常见属性

1、常见的子项属性

属性名

作用

flex

设置子项分配剩余空间时所占的份数;
align-self设置子项单独的对齐方式;
order

设置子项单独的排列顺序;

2、flex设置子项占的份数

flex 属性定义子项分配的剩余空间,用flex来表示占多少份数

(1)语法

.item {
   flex : <number>; /* default 0 */
}

(2)示例

实现左右盒子固定宽度,中间盒子宽度自适应;

<style>
*{
    padding: 0;
    margin: 0;
}

.container{
    background-color: bisque;
    width: 80%;
    height:300px;
    margin: 0 auto;
    display: flex;   
}

.first{
    background-color: skyblue;
    width: 200px;
    height: 100px;
}

.second{
    background-color: pink;
    flex: 2;
    height: 100px;
}

.third{
    background-color: skyblue;
    width: 200px;
    height: 100px;
}
</style>
<body>
    <div class="container">
        <span class="first">1</span>
        <span class="second">2</span>
        <span class="third">3</span>
    </div>
</body>

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

  • align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。

  • 默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch;

(1)语法

.third {
    /* 设置自己在侧轴上的排列方式 */
    align-self: flex-end;
}

(2)示例

单独设置最后一个盒子在侧轴方向的排列方式;

<style>
*{
    padding: 0;
    margin: 0;
}

.container{
    background-color: bisque;
    width: 80%;
    height:300px;
    margin: 0 auto;
    display: flex; 
    align-items: flex-start;  
}

.item{
    background-color: skyblue;
    width: 200px;
    height: 100px;
    margin: 10px;
}

.third{
    /* 设置自己在侧轴上的排列方式 */
    align-self: flex-end;
}
</style>
<body>
    <div class="container">
        <span class="item first">1</span>
        <span class="item second">2</span>
        <span class="item third">3</span>
    </div>
</body>

4、order属性定义子项的排列顺序(前后顺序)

  • 数值越小,排列越靠前,默认为0;

  • 注意:和 z-index 不一样;

(1)语法

.second {
    /* 默认是0,越小越靠前 */
    order: -1;
}

(2)示例

通过CSS实现第二个,显示在最前面;

*{
    padding: 0;
    margin: 0;
}

.container{
    background-color: bisque;
    width: 80%;
    height:300px;
    margin: 0 auto;
    display: flex;   
}

.item{
    background-color: skyblue;
    width: 200px;
    height: 100px;
    margin: 10px;
}

.second {
    /* 默认是0,越小越靠前 */
    order: -1;
}
<body>
    <div class="container">
        <span class="item first">1</span>
        <span class="item second">2</span>
        <span class="item third">3</span>
    </div>
</body>

五、应用

实现一个盒子水平、垂直居中显示,且放缩窗口大小不影响布局;

<style>
body{
    padding: 0;
    margin: 0;
    width: 100vw;
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
}

.item{
    width: 200px;
    height: 200px;
    background-color: skyblue;
}
</style>
<body>
    <div class="item">
        水平、垂直居中
    </div>
</body>

========================================================================

每天进步一点点,快来试试这个优秀的布局方式吧~! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/756131.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三英战吕布 | 第5集 | 温酒斩华雄 | 竖子不足与谋 | 三国演义 | 逐鹿群雄

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;这篇博客分享的是《三国演义》文学剧本第Ⅰ部分《群雄逐鹿》的第5️⃣集《三英战吕布》的经典语句和文学剧本全集台词 文章目录 1.经典语句2.文学剧本台…

从0到1搭建Java开发环境(内涵超详细教程、软件、提供网盘链接直接一步到位!!!!)

软件部分 需要的软件为下面两个&#xff1a; IDEANavicat 需要的可以自行拿&#xff08;安装教程和软件&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1y3RoMt0ZapyJsj3P0DPaVA?pwdxr4p 提取码&#xff1a;xr4p 环境部分 需要的环境为以下几个&…

【QT】按钮类控件 显示类控件

目录 按钮类控件 Push Button 设置按钮图标 按钮设置快捷键 设置鼠标点击按钮重复触发 Radio Button 单选框分组 Check Box 显示类控件 Label 常用属性 设置文本格式 给Label设置图片 Label标签设置边框 设置文本对齐方式 设置文本自动换行 设置文本缩进 设置…

综合评价类模型——突变级数法

含义 首先&#xff1a;对评价目标进行多层次矛盾分解其次&#xff1a;利用突变理论和模糊数学相结合产生突变模糊隶属函数再次&#xff1a;由归一公式进行综合量化运算最终&#xff1a;归一为一个参数&#xff0c;即求出总的隶属函数&#xff0c;从而对评价目标进行排序分析特点…

Python数据分析-共享单车租赁预测(支持向量机分析预测)

一、研究背景 共享单车作为一种绿色、便捷的出行方式&#xff0c;近年来在全球范围内迅速发展。共享单车不仅减少了城市交通拥堵和污染&#xff0c;还为居民提供了健康的出行选择。随着城市化进程的加快和环保意识的增强&#xff0c;共享单车已成为许多城市居民日常通勤和休闲…

大火的AIGC是什么?能用到工作中哪些地方?

前言 一.AIGC是什么&#xff1f; AIGC&#xff08;即Artificial Intelligence Generated Content&#xff09;&#xff0c;中文译为人工智能生成内容。简单来说&#xff0c;就是以前本来需要人类用思考和创造力才能完成的工作&#xff0c;现在可以利用人工智能技术来替代我们…

LLM意图识别器实践

利用 Ollama 和 LangChain 强化条件判断语句的智能提示分类 ❝ 本文译自Supercharging If-Statements With Prompt Classification Using Ollama and LangChain一文&#xff0c;以Lumos工具为例&#xff0c;讲解了博主在工程实践中&#xff0c;如何基于LangChain框架和本地LLM优…

011、MongoDB副本集数据同步机制深度解析

目录 MongoDB副本集数据同步机制深度解析 1. 副本集架构概述 1.1 基本组成 1.2 节点角色 2. 数据同步过程详解 2.1 初始同步 2.2 持续复制 2.3 Oplog详解 3. 数据一致性与可用性 3.1 写关注(Write Concern) 3.2 读偏好(Read Preference) 3.3 因果一致性会话 4. 高…

SuperMap iDesktop

SuperMap iDesktop 介绍 SuperMap iDesktop是一款由超图公司推出的企业级插件式桌面GIS软件&#xff0c;它通过SuperMap iObjects .NET、桌面核心库和.NET Framework 4.0构建&#xff0c;集成了地图制作、空间分析、数据编辑、三维分析等多种功能于一体&#xff0c;为用户提供…

驾校预约小程序系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学员管理&#xff0c;教练管理&#xff0c;驾校信息管理&#xff0c;驾校车辆管理&#xff0c;教练预约管理&#xff0c;考试信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;驾校信息&am…

虚拟化 之八 详解构造带有 jailhouse 的 openEuler 发行版(ARM 飞腾派)

概述 本文将探索学习通过移植适配 yocto-meta-openeuler 这个 Layer 进而使用 oebuild 直接构建一个适用于飞腾派开发板的带有 jailhouse 的 openEuler 发行版。并且通过移植一个独立的 jailhouse 的 Recipe 文件进而不依赖于 openEuler 官方的 MCS 这个框架(该框架目前本身也…

期末考试后,老师如何私发成绩?

期末考试的钟声一响&#xff0c;学生们如释重负&#xff0c;而老师们的工作却才刚刚开始。成绩的整理、再到成绩单发放&#xff0c;每一步都格外繁重。传统的成绩单发放方式&#xff0c;需要老师一个个私信给学生家长&#xff0c;耗时耗力&#xff0c;而且容易出错。在忙碌的期…

数字信号处理实验一(离散信号及离散系统的MATLAB编程实现)

实验要求&#xff1a; 离散信号及离散系统的MATLAB编程实现&#xff08;2学时&#xff09; 要求&#xff1a; 编写一程序&#xff0c;输出一定长度&#xff08;点数&#xff09;&#xff0c;具有一定幅度、&#xff08;角&#xff09;频率和初始相位的实&#xff08;或复&…

第四节:如何使用注解方式从IOC中获取bean(自学Spring boot 3.x的第一天)

大家好&#xff0c;我是网创有方&#xff0c;上一节学习了如何理解Spring的两个特性IOC和AOP&#xff0c;这一节来基于上节的内容进行一个简单实践。这节要实现的效果是通过IOC容器获取到Bean&#xff0c;并且将Bean的属性显示打印出来。 第一步&#xff1a;创建pojo实体类stu…

FreeSWITCH 1.10.10 简单图形化界面24-呼入呼出编码

FreeSWITCH 1.10.10 简单图形化界面24-呼入呼出编码 FreeSWITCH GUI界面预览00、安装FreeSWITCH GUI先看使用手册1、语音接听还是视频接听2、排查 FreeSWITCH GUI界面预览 http://myfs.f3322.net:8020/ 用户名&#xff1a;admin&#xff0c;密码&#xff1a;admin FreeSWITCH…

讨论stl链表

讨论链表 list迭代器失效list的模拟实现创建结点类链表迭代器完成实现代码 list与vector 链表是一个序列容器&#xff0c;在任意位置都可以用常数时间插入或者删除&#xff0c;并且可以在两个方向进行迭代。 list迭代器失效 迭代器失效指迭代器所指向的结点无效&#xff0c;即该…

数据结构7---图

一、定义 对于图的定义&#xff0c;我们需要明确几个注意的地方:一线性表中我们把数据元素叫元素&#xff0c;树中叫结点&#xff0c;在途中数据元素我们则称之为顶点(Vertex)。 对于图的定义&#xff0c;我们需要明确几个注意的地方: 线性表中我们把数据元素叫元素&#xf…

通过systemctl启停tomcat

目录 目的.service配置文件的结构介绍实验步骤1. 安装java2. 二进制安装tomcat3. 编写/usr/systemd/system/tomcat.service文件4. 测试启动关闭 目的 通过二进制安装的tomcat&#xff0c;只能通过tomcat文件目录下的.sh脚本进行启停。 而我们一般使用的服务&#xff0c;是通过…

kubuadm 方式部署 k8s 集群

准备三台机器 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233192.168.99.2332C4Gwoker1.23.1720.10.24 需要在K8S集群各节点上面安装docker&#xff0c;如未安装则参考 …

探究互联网领域知识,解密数字化时代神秘面纱

随着信息时代的不断发展&#xff0c;互联网的发展呈现出爆炸式的增长&#xff0c;以至于引起广泛的关注和深入的探究。互联网作为一个庞大的网络体系&#xff0c;涵盖着无穷无尽的信息和知识&#xff0c;其背后的科技和应用已经改变了人们的生活&#xff0c;产生了翻天覆地的变…