弹性盒子布局,flex布局

news2024/9/20 10:38:43

弹性盒子布局(Flexbox)是CSS3引入的一种新的布局模式,它提供了一种更加有效的方式来设计、布局和对齐容器中的项目,即使容器的大小动态改变或者项目的数量未知。

弹性盒子布局的主要特点是能够轻松地在不同的屏幕大小和设备上实现一致的布局,通过为父容器(弹性容器)设置display: flex;display: inline-flex;来定义。弹性容器内的子元素(弹性项)会自动成为容器的成员,并按照弹性盒子的规则进行布局。

弹性盒子布局有以下主要优点:

  1. 灵活性:弹性盒子布局可以轻松地适应不同屏幕尺寸和设备,无论是桌面设备还是移动设备。

  2. 方向性:可以设置主轴的方向(水平或垂直),从而决定弹性项是水平排列还是垂直排列。

  3. 对齐方式:可以轻松地在主轴和交叉轴上对齐弹性项,包括两端对齐、居中、空间分布等。

  4. 顺序调整:通过order属性,可以改变弹性项在容器中的排列顺序。

  5. 弹性:弹性项可以根据需要增长或缩小,以适应可用空间。

  6. 包裹:如果弹性项在主轴上超出了容器的空间,可以设置弹性容器是否允许弹性项换行显示。

弹性盒子布局由两部分组成:弹性容器(flex container)和弹性项(flex items)。弹性容器通过一系列CSS属性来控制其子元素(弹性项)的布局,而弹性项则自动成为容器的成员并遵循容器的布局规则。

在弹性盒子布局中,有一些关键的CSS属性,如flex-directionjustify-contentalign-itemsflex-wrapflex-growflex-shrinkflex-basis等,这些属性可以用来控制弹性容器和弹性项的行为和外观。

总之,弹性盒子布局是一种强大而灵活的布局模式,可以帮助开发人员更轻松地创建适应性强、易于维护的网页布局。

flex术语

序号

简记术语
1二成员容器和项目(container / item)
2二根轴主轴与交叉轴(main-axis / cross-axis)

3

二根线起始线与结束线(flex-start / flex-end)

弹性容器属性

  1. flex-direction
    • 定义主轴的方向,即弹性项默认的排列方向。
    • 可选值:row(默认值,水平方向从左到右)、row-reverse(水平方向从右到左)、column(垂直方向从上到下)、column-reverse(垂直方向从下到上)。
  2. justify-content
    • 定义弹性项在主轴上的对齐方式。
    • 可选值:flex-start(默认值,起点对齐)、flex-end(终点对齐)、center(居中对齐)、space-between(两端对齐,弹性项之间的间隔相等)、space-around(每个弹性项两侧的间隔相等)、space-evenly(弹性项之间的间隔和两侧的间隔都相等)。
  3. align-items
    • 定义弹性项在交叉轴上的对齐方式(当弹性项为单行时)。
    • 可选值:stretch(默认值,如果弹性项未设置高度或设为auto,将占满整个容器的高度)、flex-startflex-endcenterbaseline(以第一行文字的基线对齐)。
  4. flex-wrap
    • 定义弹性项是否换行显示。
    • 可选值:nowrap(默认值,不换行)、wrap(换行,第一行在上方)、wrap-reverse(换行,第一行在下方)。
  5. align-content
    • 定义多行弹性项在交叉轴上的对齐方式(当弹性项换行时)。
    • 可选值与 align-items 类似,但额外支持 stretch(默认值,如果弹性项未设置高度或设为auto,将占满整个容器的高度,但仅适用于多行)。
  6. flex-flow
    • 简化flex-direction,flex-wrap属性

弹性项属性

  1. flex-grow
    • 定义弹性项的放大比例。默认为 0,表示不放大。如果有剩余空间,则根据所有弹性项的 flex-grow 值来分配剩余空间。
  2. flex-shrink
    • 定义弹性项的缩小比例。默认为 1,表示如果空间不足,该项目将缩小。如果有空间不足的情况,则根据所有弹性项的 flex-shrink 值来缩小项目。
  3. flex-basis
    • 定义弹性项在主轴上的初始大小。默认为 auto,表示项目的大小由其内容决定。
  4. flex
    • 是 flex-growflex-shrink 和 flex-basis 的简写属性,用于同时设置这三个值。例如,flex: 1 0 200px; 就等同于 flex-grow: 1; flex-shrink: 0; flex-basis: 200px;
  5. order
    • 定义弹性项的排列顺序(整数,默认为0)。数值越小,排列越靠前。
  6. align-self
    • 允许单个弹性项覆盖由 align-items 设置的交叉轴对齐方式。可选值与 align-items 相同。

创建flex容器与项目

1.属性

display:flex                        创建flex块级容器

display:inline-flex              创建flex行内容器

主轴方向与多行容器

 <style>
        .container {
            width: 300px;
            height: 150px;
            background-color: pink;

            /* 可选值:
            row(默认值,水平方向从左到右)、
            row-reverse(水平方向从右到左)、
            column(垂直方向从上到下)、
            column-reverse(垂直方向从下到上)。 */

            display: flex;
            /* 设置主轴方向:水平方向 */
            /* flex-direction: row; */
            /* flex-direction: row-reverse; */

            /* 设置主轴方向:垂直方向 */
            flex-direction: column;
            /* flex-direction: column-reverse;  */


            /* 设置多行容器 */
            /* 可选值:nowrap(默认值,不换行)、
            wrap(换行,第一行在上方)、
            wrap-reverse(换行,第一行在下方)。 */

            /* 默认单行容器,不允许换行显示,项目自动收缩适应容器大小 */
            /* flex-wrap: nowrap; */
            flex-wrap: wrap;


        }


        .item {
            width: 100px;
            height: 50px;
            background-color: lightcyan;

        }
    </style>
</head>

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
    </div>
</body>

主轴项目对齐方式

 <style>
        .container {
            width: 300px;
            height: 150px;
            background-color: pink;
            display: flex;

            /* 默认从主轴的起始线排列 */
            justify-content: flex-start;

            /* 对齐到终止线 */
            justify-content: flex-end;

            /* 对齐到主轴的中间线,居中对齐 */
            justify-content: center;

            /* 两端对齐  剩余空间在头尾项目之外的项目间平均分配 */
            justify-content: space-between;

            /* 分散对齐  剩余空间在每个项目之间平均分配*/
            justify-content: space-around;

            /* 平均对齐 */
            justify-content: space-evenly;
        }


        .item {
            width: 50px;
            height: 50px;
            background-color: lightcyan;

        }
    </style>
    </head>

    <body>
        <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
        </div>
    </body>

交叉轴项目对齐方式

<style>
        /* 可选值:
        stretch(默认值,如果弹性项未设置高度或设为auto,将占满整个容器的高度)、
        flex-start、flex-end、center、baseline(以第一行文字的基线对齐)。 */
        .container {
            width: 300px;
            height: 150px;
            background-color: pink;
            display: flex;

            /* 主轴为水平方向 */
            flex-flow: row nowrap;

            /* 默认:从交叉轴的起始线开始排列,对齐到起始线 */
            align-items: flex-start;

            /* 对齐到终止线 */
            align-items: flex-end;

            /* 居中对齐 */
            align-items: center;




        }


        .item {
            width: 50px;
            height: 50px;
            background-color: lightcyan;

        }
    </style>
    </head>

    <body>
        <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
        </div>
    </body>

多行容器项对齐方式

<style>
    .container {
        width: 300px;
        height: 400px;
        background-color: pink;
        display: flex;

        /* 主轴为水平方向 */
        flex-flow: row wrap;

        /* 默认 */
        align-content: stretch;

        /* 与起始线对齐 */
        align-content: flex-start;

        /* 与终止线对齐 */
        align-content: flex-end;

        /* 居中对齐 */
        align-content: center;

        /* 两端对齐 */
        align-content: space-between;

        /* 分散对齐 */
        align-content: space-around;

        /* 平均对齐 */
        align-content: space-evenly;

    }


    .item {
        width: 100px;
        height: 50px;
        background-color: lightcyan;

    }
</style>
</head>

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>

    </div>
</body>

设置单个项目在交叉轴上的对齐方式

<style>
    .container {
        width: 300px;
        height: 200px;
        background-color: pink;
        display: flex;


    }


    .item {
        width: 100px;
        height: 50px;
        background-color: lightcyan;

    }


    .item:first-child {
        align-self: flex-start;
        /* auto 是默认值,继承的是容器中的align-items */
        align-self: auto;
    }

    .item:nth-child(2) {
        /* 第二个项目与中间线对齐 */
        align-self: center;
    }

    .item:nth-child(3) {
        /* 第三个项目拉伸 */
        align-self: stretch;
    }

    .item:last-child {
        /* 和基线对齐 */
        /* 所有项目基线对齐才会有效果 */
        align-self: baseline;
    }
</style>




</head>

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>


    </div>
</body>

设置单个项目的排列顺序

<style>
        .container {
            width: 300px;
            height: 200px;
            background-color: pink;
            display: flex;


        }


        .item {
            width: 100px;
            height: 50px;
            background-color: lightcyan;

        }


        /* order数值越小顺序越靠前 ,默认为0,按照书写顺序*/
        .item:first-child {
            order: 2;
        }

        .item:nth-child(2) {
            order: -1;
        }


        .item:last-child {
            order: 0;
        }
    </style>




</head>

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>



    </div>
</body>

单个项目的放大因子

<style>
        .container {
            width: 300px;
            height: 200px;
            background-color: pink;
            display: flex;


        }


        .item {
            width: 50px;
            height: 50px;
            background-color: lightcyan;

        }


        /* 默认值为0 */
        放大比列计算方法

        /* 1.计算出需要分配的主轴上剩余空间:300 - (50*3) */
        /* 2.计算放大因子:(0 + 1 + 2) = 3 */
        /* 将剩余空间150px分成三等分 150 / 3 */
        /* 第一个:50  + (0 * 50) = 50
        第二个:50 + (1 * 50) = 100
        第三个:50 + (2 * 50) = 150 */
        .item:first-child {
            flex-grow: 0;
        }

        .item:nth-child(2) {
            flex-grow: 1;
        }


        .item:last-child {
            flex-grow: 2;
        }
    </style>




</head>

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>



    </div>
</body>

单个项目的收缩因子

<style>
        .container {
            width: 300px;
            height: 200px;
            background-color: pink;
            display: flex;

            /* flex-wrap: wrap; */

        }


        .item {
            width: 150px;
            height: 50px;
            background-color: lightcyan;

        }



        .item:first-child {
            flex-shrink: 0;
        }

        .item:nth-child(2) {
            flex-shrink: 1;
        }


        .item:last-child {
            flex-shrink: 2;
        }
    </style>




</head>

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>



    </div>
</body><style>
        .container {
            width: 300px;
            height: 200px;
            background-color: pink;
            display: flex;

            /* flex-wrap: wrap; */

        }


        .item {
            width: 150px;
            height: 50px;
            background-color: lightcyan;

        }



        .item:first-child {
            flex-shrink: 0;
        }

        .item:nth-child(2) {
            flex-shrink: 1;
        }


        .item:last-child {
            flex-shrink: 2;
        }
    </style>




</head>

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>



    </div>
</body>

设置项目在主轴上的计算基准尺寸

<style>
        .container {
            width: 300px;
            height: 200px;
            background-color: pink;
            display: flex;
            flex-wrap: wrap;

        }


        .item {
            width: 50px;
            height: 50px;
            background-color: lightcyan;

            /* 默认 */
            /* flex-basis: auto; */

            /* flex-basis设置的值会覆盖掉原始项目的值 */
            flex-basis: 80px;

            /* min-width的值会覆盖掉flex-basis的值 */
            min-width: 90px;
            

        }
    </style>




</head>

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>



    </div>
</body>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【小程序 按钮 表单 】

按钮 代码演示 xxx.wxml <view class"boss" hover-class"box"hover-start-time"2000"hover-stay-time"5000">测试文本<view hover-stop-propagation"true">子集</view><view>子集2</view>…

Vulhub——adminer

文章目录 一、CVE-2021-21311&#xff08;SSRF&#xff09;二、CVE-2021-43008&#xff08;远程文件读取&#xff09; 一、CVE-2021-21311&#xff08;SSRF&#xff09; Adminer是一个PHP编写的开源数据库管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL…

lenovo联想小新Pro 16 APH8 2023款(83AR)笔记本电脑原装出厂Windows11系统镜像安装包下载

恢复出厂开箱状态OEM预装win11系统&#xff0c;自带恢复重置初始化还原功能 下载链接&#xff1a;https://pan.baidu.com/s/1n_mPM4ZrLPrmXpCTukuyCQ?pwdmnwj 提取码&#xff1a;mnwj 联想原装系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、Office办公软件、联想…

网络空间安全数学基础·整除与同余

主要内容&#xff1a; 整除的基本概念&#xff08;掌握&#xff09; 素数&#xff08;掌握&#xff09; 同余的概念&#xff08;掌握&#xff09; 1.1整除 定义&#xff1a;设a&#xff0c;b是任意两个整数&#xff0c;其中b≠0&#xff0c;如果存在一个整数q&#xff0c;使 …

线性表(从数据结构的三要素出发)

文章目录 逻辑结构存储结构顺序存储链式存储单链表双链表循环单链表循环双链表静态链表 数据的操作顺序结构链式结构单链表双链表 逻辑结构 线性表是具有相同数据类型的 n ( n ≥ 0 ) n(n≥0) n(n≥0)个数据元素的有限序列&#xff0c;其中 n n n为表长&#xff0c;当 n 0 n0…

Elasticsearch集群搭建学习

Elasticsearch集群聚合、集群搭建 RestClient查询所有高亮算分控制 数据聚合DSL实现Bucket聚合DSL实现Metrics聚合RestAPI实现聚合 拼音分词器如何使用拼音分词器&#xff1f;如何自定义分词器&#xff1f;拼音分词器注意事项&#xff1f; 自动补全数据同步集群搭建ES集群结构创…

C++—— set、map、multiset、multimap的介绍及使用

目录 关联式容器 关联式容器的特点和使用场景 树形结构与哈希结构 树形结构 哈希结构 键值对 set set的介绍 set的定义方式 set的使用 multiset map map的介绍 map的定义方式 map的使用 multimap 关联式容器 C标准模板库&#xff08;STL&#xff09;中的关联…

vue17:v-bind对css样式的控制增强

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

软考之零碎片段记录(三十一)+复习巩固(错题整理,知识点总结,易错题)

1. 奇偶校验 只能检测一位数的错误。但无法纠正错误。若有奇数个数据位出错&#xff0c;可检测。有局限性。 2. 深度与广度优先遍历 参考题【【数据结构自用】1.图深度优先遍历2.找有向图中的强连通分量数目3.给出图的任意两个拓扑序列】https://www.bilibili.com/video/BV…

下雨!大水蚁引发的水文!看比赛咯,曼联VS曼城——早读(逆天打工人爬取热门微信文章解读)

唠唠嗑 水一水 引言Python 代码结尾 引言 今天星期六 大小周 一个等了很久的双休 昨天晚上真的是吓到我了 漫天的小飞虫 我一开始还以为是一两只 没想到那些小飞虫 从阳台不断飞进来 在山卡拉下面租房子 也是太恐怖了 来个特写 他们也就一个晚上的时间 成虫 天气合适 长翅…

Unity-Sprite Atlas+UGUI系统的运行原理

每日一句&#xff1a;别听世俗耳语&#xff0c;看自己的风景就好 目录 SA的原理&#xff1a; SA的优点&#xff1a; SA的缺点&#xff1a; DrawCall是什么&#xff1f; 批处理是什么&#xff1f; 我们先了解一下UGUI系统的运行原理吧&#xff01; 提到图集优化&#xff0…

【面试干货】数据库乐观锁,悲观锁的区别,怎么实现

【面试干货】数据库乐观锁&#xff0c;悲观锁的区别&#xff0c;怎么实现 1、乐观锁&#xff0c;悲观锁的区别2、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、乐观锁&#xff0c;悲观锁的区别 悲观锁&#xff08;Pessimistic Lo…

会声会影调速怎么用 会声会影如何调整音频速度

会声会影是一款功能强大的视频编辑软件&#xff0c;可以帮助我们轻松的实现剪辑。 会声会影的操作简单易懂&#xff0c;界面简洁明快。适合家庭使用&#xff0c; 我们使用会声会影可以在家就能将视频剪辑成好莱坞大片。但是在使用的过程中&#xff0c;仍然会遇到一些操作上的问…

mac下安装airflow

背景&#xff1a;因为用的是Mac的M芯片的电脑&#xff0c;安装很多东西都经常报错&#xff0c;最近在研究怎么把大数据集群上的crontab下的任务都配置到一个可视化工具中&#xff0c;发现airflow好像是个不错的选择&#xff0c;然后就研究怎么先安装使用起来&#xff0c;后面再…

「React」useEffect 与 useLayoutEffect 使用与区别

前言 useEffect 与 useLayoutEffect 是两个 Hooks&#xff0c;前者比较常用&#xff0c;后者在一些场景下也会用到&#xff0c;下面说明两者区别和应用场景。 使用 useEffect 和 useLayoutEffect 是React Hooks里用于处理副作用的钩子&#xff08;Hooks&#xff09;&#x…

单机一天轻松300+ 最新微信小程序拼多多+京东全自动掘金项目、

现代互联网经济的发展带来了新型的盈利方式&#xff0c;这种方法通过微信小程序的拼多多和京东进行商品自动巡视&#xff0c;以此给商家带来增加的流量&#xff0c;同时为使用者带来利润。实践这一手段无需复杂操作&#xff0c;用户仅需启动相应程序&#xff0c;商品信息便会被…

自定义一个SpringBoot场景启动器

前言 一个刚刚看完SpringBoot自动装配原理的萌新依据自己的理解写下的文章&#xff0c;如有大神发现错误&#xff0c;敬请斧正&#xff0c;不胜感激。 分析SpringBoot自动配置原理 SpringBoot的启动从被SpringBootApplication修饰的启动类开始,SpringBootApplicaiotn注解中最…

单片机LCD1602显示电子时钟设计

基于52单片机电子时钟的设计 摘要 本次设计的多功能时钟系统采用STC89C52单片机为核心器件&#xff0c;利用其定时器/计数器定时和记数的原理&#xff0c;结合液晶显示电路、时钟芯片DS1302电路、电源电路以及按键电路来设计计时器。将软硬件有机地结合起来&#xff0c;使得系…

十一、Python循环语句「长期更新Python简单入门到适用」

在python中&#xff0c;它的循环语句有 for 与 while 1、while循环 在python 中 while 语句的一般形式&#xff1a; while 判断条件 : 声明 同样需要注意冒号和缩进。另外&#xff0c;在Python中没有 do..while 循环。 以下实例使用了 while 来计算 1 到 50 的总和&#…

Adobe Camera Raw 11 for Mac/win:摄影后期处理的革命性飞跃

在数字摄影的世界里&#xff0c;RAW格式以其未压缩的原始数据特性&#xff0c;为摄影师提供了更大的后期处理空间。而Adobe Camera Raw 11&#xff0c;作为这一领域的翘楚&#xff0c;以其卓越的性能和创新的功能&#xff0c;为摄影师们带来了前所未有的创作体验。 Adobe Came…