flex 弹性布局还不懂?一篇文章带你了解一下

冥想.jpg
在这里插入图片描述

flex 是什么

Flex布局,全称为Flexible Box布局,或简称Flexbox,是一种由W3C提出用于网页设计的新型布局模式。它旨在提供一个更加有效且灵活的方式来布局、对齐和分配容器内项目的空间,无论是行还是列方向。Flex布局特别适用于响应式和动态调整的用户界面设计,特别是在不同屏幕尺寸和设备上实现一致的布局效果。

在Flex布局中,父容器被设置为display: flex;或display: inline-flex;后,就变成了一个Flex容器。这个容器内的所有直接子元素自动成为Flex项目。这种布局的核心优势在于能够简便地处理元素的对齐(包括水平和垂直方向)、分配剩余空间、调整元素顺序以及控制元素尺寸,而无需使用传统的流体布局技巧如浮动或定位。

Flex布局的关键特点包括:

  • 弹性伸缩:项目可以按照比例伸缩以填充容器,或者根据需要分配多余空间。
  • 方向控制:可以轻松改变项目在容器中的水平或垂直排列方向。
  • 对齐能力:提供了强大的对齐选项,使得元素在主轴和交叉轴上都能精准对齐。
  • 一维布局:专注于单一行或一列的布局,简化了多维度布局的复杂性。
  • 重新排序:无需改变HTML结构,仅通过CSS即可调整项目在容器中的顺序。

初识 flex 布局

下面是一个简单的Flex布局示例,展示了弹性伸缩特性。假设我们有一个容器,里面包含三个子元素,我们希望这三个子元素在任何屏幕宽度下都能等宽排列,并且能够自适应容器的宽度变化。

HTML 代码如下:

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

对应的CSS 代码如下:

.container {
  display: flex; /* 设置容器为Flex布局 */
}
.item {
  flex: 1; /* 这是关键!每个.item占据容器等比例的空间,实现弹性伸缩 */
  border: 1px solid #000; /* 为了视觉上区分各个item,添加边框 */
  padding: 10px;
  box-sizing: border-box; /* 包含边框和内边距在元素的总宽度和高度中计算 */
}

在这个例子中,.container被设置为Flex容器,而它的子元素(.item)通过flex: 1;属性设置了伸缩行为。这意味着所有.item将会平分.container的可用空间。如果容器宽度变化,每个.item的宽度也会相应地自动调整,保持相等。这就是Flex布局中“弹性伸缩”的一个直观体现。

flex 属性详解

在上面的示例中,.item的属性之一“flex: 1;”,其实这是=是一个非常实用且强大的简写形式,它综合控制了Flex项目的三个关键方面的行为:扩展(flex-grow)、收缩(flex-shrink)和基础大小(flex-basis)。具体来说,flex: 1;等价于flex: 1 1 0%;,这分别对应于以下三个属性的设置:

  1. flex-grow: 设定为1意味着当Flex容器有多余空间时,该Flex项目会按比例分配这部分空间。如果所有的Flex项目都设定了相同的flex-grow值(例如都是1),那么它们会均等地分享容器的剩余空间。值越大,项目获取的额外空间比例也越大。
  2. flex-shrink: 同样设定为1,这决定了当Flex容器空间不足时,项目愿意缩小自己的大小以适应容器。所有项目的flex-shrink默认值都是1,意味着它们会等比例缩小。如果设置为0,则项目大小不会因为容器空间不足而缩小。
  3. flex-basis: 设置为0%,意味着在计算分配多余空间前,项目没有预先设定的基础大小(或者说基础大小非常小,接近于0)。这通常意味着项目的初始大小将主要由其内容决定,但随后会根据flex-grow分配剩余空间。因此,即使flex-basis设置为0%,一旦考虑到flex-grow,项目仍会扩展以填满分配给它的空间。

在CSS的Flex布局中,除了flex-grow, flex-shrink, 和 flex-basis这三个重要属性外,还有其他几个核心属性对于理解和应用Flex布局至关重要:

  1. flex-direction: 此属性决定了Flex项目在容器中的排列方向,从而定义了主轴的方向。可用值包括:

    • row(默认值):项目沿水平方向排列,从左到右。
    • row-reverse:项目沿水平方向排列,但从右到左。
    • column:项目沿垂直方向排列,从上到下。
    • column-reverse:项目沿垂直方向排列,但从下到上。
  2. flex-wrap: 控制Flex项目在一行中无法完全放下时是否换行以及如何换行。可用值包括:

    • nowrap(默认值):项目都在同一行,超出部分被隐藏。
    • wrap:项目可以换行,第一行在上方。
    • wrap-reverse:项目可以换行,第一行在下方。
  3. align-items: 定义了Flex项目在交叉轴(与主轴垂直的轴)上的对齐方式。需要注意的是align-items作用范围限于单行内的每个项目。也就是说,它会影响每个Flex行内部的项目对齐,而不是行与行之间的关系。可用值包括:

    • stretch(默认值,仅当align-items未在项目上设置时):拉伸以填满容器。
    • flex-start:项目位于容器的起始位置。
    • flex-end:项目位于容器的结束位置。
    • center:项目居中对齐。
    • baseline:项目基于文本基线对齐。
  4. align-content: 主要用于多行Flex布局中,用于调整多行Flex项目之间的对齐方式。当Flex容器的flex-wrap属性设置为wrap或wrap-reverse,即容器内的项目可以跨越多行时,align-content才会生效。它的作用是对整个Flex行集进行对齐,而不是单个Flex项目。换句话说,align-content控制的是行与行之间的空间分配。可用值包括:

    • stretch(默认值):默认情况下,Flex行会被拉伸以填满整个容器在交叉轴上的可用空间。
    • flex-start:所有行都堆叠在交叉轴的起始位置。
    • flex-end:所有行都堆叠在交叉轴的结束位置。
    • center:所有行居中对齐在交叉轴上。
    • space-between:在每行之间均匀分配空间,第一行和最后一行分别贴紧容器的起始和结束位置。
    • space-around:在每行之间以及行的外部均匀分配空间,每行两侧的空间相等。
  5. justify-content: 定义了Flex项目在主轴上的对齐方式。

    • flex-start(默认值):项目位于容器的起始位置。
    • flex-end:项目位于容器的结束位置。
    • center:项目居中对齐。
    • space-between:项目之间均匀分配空间,首尾项目分别靠边。
    • space-around:项目周围均匀分配空间。
    • space-evenly:项目之间以及项目与容器边缘之间均匀分配空间。
  6. justify-items:justify-items是Grid布局模型中的属性,并不是flex布局中的属性,梳理在这里是因为这个属性容易搞混,这里特别注意。

  7. flex-flow: 是flex-direction和flex-wrap的简写。如“flex-flow: row wrap; ”

  8. flex:是一个简写属性,它结合了flex-grow、flex-shrink和flex-basis三个属性,允许你更便捷地控制Flex项目在容器中的伸缩行为和初始大小。

  9. align-self: 类似于align-items,但允许单个Flex项目覆盖容器的默认对齐方式。

align-items与align-content区别

在CSS Flex布局中,理论上可以同时设置align-items和align-content属性,但它们的作用范围和适用场景不同,这导致在某些情况下它们的组合使用可能不会像预期那样工作。

  • align-items

用于单行或多行Flex容器中,控制容器内每一行的子元素在交叉轴上的对齐方式。如果Flex容器只有一行,align-items将决定所有子元素的对齐;如果有多个行(flex-wrap设为wrap或wrap-reverse),并且行的总高度没有填满容器的交叉轴尺寸,align-items仍然会影响每行内元素的对齐。

  • align-content

主要用于有多行的Flex容器,控制行与行之间的对齐方式以及行间空间的分配。当Flex容器有多行并且具有额外的交叉轴空间时(即行没有填满容器的高度或宽度时),align-content才起作用。如果只有一行或者行完全填满了容器的交叉轴,则align-content没有任何视觉效果。

总来看,具体的区别体现在三个方面:

  1. 应用场景:align-content主要应用于多行Flex容器,当项目跨越多行时才有效;而align-items适用于所有Flex容器,无论是单行还是多行。
  2. 作用对象:align-content调整的是多行之间的空间分布,影响的是整个Flex行集;而align-items直接影响单行内每个项目的对齐方式。
  3. 默认行为:在单行Flex容器中,align-content的设置不会产生视觉效果,因为它主要是为多行布局设计的。

因此,需要注意的是,当同时设置这两个属性时,如果Flex容器内只有单行,align-content将不产生任何效果,因为它是针对多行布局设计的。而在多行布局中,尽管两者可以共存,但align-items主要控制单行内部的对齐,而align-content则负责行间的对齐和空间分配。在某些情况下,如果align-items和align-content有冲突的值(比如同时设置了align-items: center和align-content: flex-start),具体表现可能会根据浏览器的实现细节有所不同,但通常align-items对单行内元素的直接对齐效果优先。

因此,理解它们各自的用途并在适当的情况下使用是非常重要的。在大多数布局需求中,你会根据布局是否有多行来选择使用align-items或align-content,而不是同时使用它们来达到不同的效果。

justify-items与justify-content区别

在CSS中,justify-content和justify-items是两个用于不同布局模型的对齐属性,它们之间存在一定的区别:

justify-items

  • 应用范围:justify-items是Grid布局模型中的属性,用于设置Grid容器内Grid项在行轴(类似于Flex布局的主轴)上的对齐方式。
  • 功能描述:与justify-content不同,justify-items作用于Grid布局中的单个项目,控制每个单独Grid项在行轴上的对齐方式,而不是整个Grid容器的内容分布。
  • 可选值:包括start、end、center、stretch(默认值)等,具体取决于Grid项的大小和Grid容器的设置。

justify-content

  • 应用范围:justify-content是Flex布局模型中的属性,用于设置Flex容器中Flex项目在主轴上的对齐方式。
  • 功能描述:它控制容器内所有Flex项目作为一个整体,在主轴方向上的分布和对齐。例如,可以设置项目在容器内水平居中、两端对齐等。
  • 可选值:包括flex-start、flex-end、center、space-between、space-around以及space-evenly等。

justify-content和justify-items是两个用于不同布局模型的对齐属性,因此肯定是不能同时使用。

今天分享的内容,就这么多了,不知道小伙伴能理解吗?如果有不理解的地方或者是我哪里有错误,敬请在评论区指出来,共同进步哦。

喜欢就关注一下吧.gif

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

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

相关文章

头歌——机器学习——决策树案例

第1关&#xff1a;基于决策树模型的应用案例 任务描述 本关任务&#xff1a;使用决策树算法完成成人收入预测。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.数据特征处理&#xff0c;2.使用决策树算法完成成人收入预测。 数据处理及特征工程 本次任务…

Adaptive Server Connection Failed on Windows

最近在使用pymssql &#xff08;版本2.3.0&#xff09;连接SQL Server2012遇到如下问题&#xff1a; pymssql._mssql.MSSQLDatabaseException: (20002, bDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (localhost)\nDB-Lib error message 2000…

Linux如何远程访问?

远程访问是现代计算机网络中非常重要的一个功能&#xff0c;它允许用户通过网络连接到远程计算机&#xff0c;并在远程计算机上执行操作。对于使用Linux操作系统的用户来说&#xff0c;Linux远程访问是非常常见的需求。本文将介绍如何实现Linux远程访问&#xff0c;并简要介绍一…

GUI Guider(V1.7.2) 设计UI在嵌入式系统上的应用(N32G45XVL-STB)

目录 概述 1 使用GUI Guider 设计UI 1.1 创建页面 1.2 页面切换事件实现 1.3 生成代码和仿真 1.3.1 生成和编译代码 1.3.2 仿真UI 2 GUI Guider生成的代码结构 2.1 代码结构介绍 2.2 Project目录下的文件 3 板卡上移植UI 3.1 加载代码至工程目录 3.2 主函数中调…

高职人工智能专业实训课之“自然语言处理”

一、前言 在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术日益成为研究和应用的热点。为了满足高职院校对NLP专业实训课程的需求&#xff0c;唯众人工智能教学实训凭借其前沿的教育技术平台&#xff0c;特别是GPU虚拟化技术&#xff0c;为学生提供了高…

C语言转义序列的含义和用法

基础理论 在C语言中&#xff0c;转义序列是一种特殊的字符组合&#xff0c;以反斜杠\开头&#xff0c;后面跟着一个或多个字符&#xff0c;用于表示不能直接输入的字符或者控制字符。转义序列允许程序员在字符串中包含那些不易直接输入的字符&#xff0c;如换行符、制表符或特…

2-3KW户储、家储逆变器设计资料

储能电源方案双向逆变器板资料&#xff0c;原理文件&#xff0c;PCB文件&#xff0c;源代码&#xff0c;bom清单。 bom表&#xff1a; PCB&#xff1a; 变压器电感 2-3KW户储、家储逆变器设计通常需要考虑以下几个方面&#xff1a; 输入电压范围&#xff1a;逆变器需要能够适应…

“人工智能+”带来新变化

以生成式人工智能&#xff08;AIGC&#xff09;为代表的新一代人工智能技术创新加速演进&#xff0c;相关商业化应用成果也不断涌现&#xff0c;行业应用范围不断拓展&#xff0c;深度赋能实体经济&#xff0c;为行业提质增效与实现减排提供助力。 自主航运初创公司OrcaAI于6月…

帕金森患者营养补充指南:维生素的重要性与选择

帕金森病&#xff0c;在众多营养素中&#xff0c;维生素对于帕金森病患者来说尤为重要。本文将详细介绍帕金森患者应该补充哪些维生素&#xff0c;以及这些维生素的重要性。 一、维生素B组 维生素B组在帕金森病患者中扮演着重要的角色。其中&#xff0c;维生素B6是神经递质多…

JavaSE (Java基础):方法简介

6 Java中的方法 下面关于Java方法的介绍都引用了某B大佬狂神的PPT 6.1 方法简介 自己看注释&#xff0c;&#xff0c;&#xff0c;&#xff0c;这就是方法&#xff01; package com.zlx.method;public class Demo01 {//main方法public static void main(String[] args) {//实…

基于YOLOv5+PyQT5的吸烟行为检测(含pyqt页面、模型、数据集)

简介 吸烟不仅对个人健康有害,也可能在某些特定场合带来安全隐患。为了有效地监控公共场所和工作环境中的吸烟行为,我们开发了一种基于YOLOv5目标检测模型的吸烟检测系统。本报告将详细介绍该系统的实际应用与实现,包括系统架构、功能实现、使用说明、检测示例、数据集获取…

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上&#xff0c;或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景&#xff1a; 表单…

同城跑腿APP开发,随叫随到超方便!

随着移动互联网的发展和人们生活节奏的加快&#xff0c;越来越多的人们没有闲暇的时间来做一些繁琐的事情&#xff0c;比如说买药、挂号、排队、送花、取文件等等。如果没有时间去处理这些事情怎么办&#xff1f;开发同城跑腿APP&#xff0c;提供跑腿服务&#xff0c;随时办事随…

uni-app与原生插件混合开发调试1-环境准备

uni-app与原生插件混合开发调试系列文章分为3篇&#xff0c;分别详细讲了《环境准备》、《搭建uni-app本地开发调试环境》和《安卓原生插件开发调试和打包》&#xff0c;3篇文章完整详细地介绍了“从环境安装配置到本地开发调试到原生插件打包”整个流程。 相关名词和概念解释…

C++ | Leetcode C++题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; class Solution { public:int majorityElement(vector<int>& nums) {int candidate -1;int count 0;for (int num : nums) {if (num candidate)count;else if (--count < 0) {candidate num;count 1;}}return candidate;…

大咖共话|智领未来,数字化革新生命健康产业

在数字化浪潮席卷全球的今天&#xff0c;生命健康产业正迎来前所未有的发展机遇。6月20日&#xff0c;“第三届滨海中关村协同创新发展交流会”在北京隆重举办&#xff0c;唯迈医疗与业界大咖齐聚一堂&#xff0c;在“数字化赋能驱动生命健康产业发展”圆桌论坛上&#xff0c;共…

Modsecurity安装+Nginx+腾讯云CentOS+XSS-Labs靶场+WAF规则

君衍. 一、项目环境介绍二、ModSecurity介绍1、Modsecurity基本概述2、Modsecurity工作原理3、Modsecurity功能特点4、Modsecurity优点5、Modsecurity缺点 三、Nginx介绍及配置文件1、Nginx基本概述2、Nginx应用场景3、正向代理4、反向代理5、负载均衡6、动静分离7、主页面路径…

LeetCode 算法:二叉树的中序遍历 c++

原题链接&#x1f517;&#xff1a;二叉树的中序遍历 难度&#xff1a;简单⭐️ 题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&…

运动蓝牙耳机哪个口碑最好?五大高口碑顶尖单品推荐

在这个快节奏时代&#xff0c;智能手机的普及使得运动开放式耳机逐渐成为我们日常出行的必备单品。运动开放式耳机凭借独特的外形设计&#xff0c;赢得了众多消费者的喜爱。它们不同于传统的入耳式设计&#xff0c;以舒适佩戴为核心&#xff0c;有效缓解了长时间佩戴对耳部造成…

Pikachu靶场--CRSF

借鉴参考 CSRF跨站请求伪造&#xff08;CTF教程&#xff0c;Web安全渗透入门&#xff09;_bilibili pikachu靶场CSRF之TOKEN绕过_csrf token绕过的原理-CSDN博客 CSRF(get) 发现需要登录 查看提示&#xff0c;获取username和password 选择一个用户进行登录 选择修改个人信息 …