flex布局中 -item -content -self的区别

flex布局中就记住有两个关键属性,justify和align,分别代表着主轴方向属性侧轴方向属性,想控制主轴就设置justify相关属性,想控制侧轴就设置align相关属性。

主轴居中分布 ,侧轴居中对齐,是我们常见的居中分布的方法,父级盒子属性设置为:

justify-content: center; align-items: center;

在此基础上,我们自由组合可以生成6个属性值,其中查阅资料得知,self属性是设置在子元素上的,content和items是设置在父级元素的,我们逐一实验,控制变量,设置justify时align属性不变,反之亦然:

  • justify-content

设为left整体左分布,center居中分布,right右分布,没什么可说的,就是flex子元素整体在主轴上的分布方式

那要是想给元素之间一点距离呢,设置space相关属性就好了

css 复制代码
        .container {
            display: flex;
            justify-content: space-between;
            align-items: center;
            height: 40vh;
            width: 50vh;
            margin:200px auto;
            background-color: #f0f0f0;
            padding: 20px;
            border:5px solid rgb(98, 243, 79);
        }
  • justify-items

把justify-content去掉,设置justify-items,发现怎么设置都没有效果

css 复制代码
        .container {
            display: flex;
            justify-items: flex-end;
            height: 40vh;
            width: 50vh;
            margin:200px auto;
            background-color: #f0f0f0;
            padding: 20px;
            border:5px solid rgb(98, 243, 79);
        }

那是因为flex中根本没有该属性,kimi的解答:

justify-items 是一个CSS属性,用于设置容器内子元素的对齐方式,但它主要与Grid布局相关,而不是Flexbox布局。在Grid布局中,justify-items 控制子元素在网格单元格内的水平对齐方式.

  • justify-self
css 复制代码
        .box3 {
            width: 100px;
            height: 100px;
            background-color: #ec6543;
            color: white;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 16px;
            border-radius: 5px;
            justify-self: end;//无效属性
        }

发现怎么设置都没有效果,因为flex中根本没有该属性,kimi再次解答:

在Flexbox布局中,没有 justify-self 属性。Flexbox主要关注于如何在主轴和交叉轴上对齐子元素,而不是单独对某个子元素进行对齐控制。

真的很专业!

接下来看看align属性,align是侧轴方向的属性,为了更直观,我们把元素高度设置为不一样的。

  • align-content

设置该属性为end时的效果:

css 复制代码
        .container {
            display: flex;
            justify-content: space-between;
            align-content:end;
            flex-wrap: wrap;
            height: 40vh;
            width: 50vh;
            margin:200px auto;
            background-color: #f0f0f0;
            padding: 20px;
            border:5px solid rgb(98, 243, 79);
        }

改成center呢?

子元素整体就跑到中间了

要是换个行呢?

css 复制代码
        .container {
            display: flex;
            justify-content: space-between;
            align-content:end;
            flex-wrap: wrap;
            height: 40vh;
            width: 50vh;
            margin:200px auto;
            background-color: #f0f0f0;
            padding: 20px;
            border:5px solid rgb(98, 243, 79);
        }

还是整体移动

那要是我想把父级盒子撑满呢?那就像jusify那样设置space-between属性

可以看出align-content控制的是全部子元素整体,在侧轴上的分布方式!

  • align-items

盒子1,2,3高度不一,看着好丑,能不能也居中对齐一下呢?这时候尝试设置一下align-items属性,惊讶地发现真的对齐了,对齐方式是3个盒子的中心线!

css 复制代码
        .container {
            display: flex;
            justify-content: space-between;
            align-content:center;
            align-items: center;
            flex-wrap: wrap;
            height: 40vh;
            width: 50vh;
            margin:200px auto;
            background-color: #f0f0f0;
            padding: 20px;
            border:5px solid rgb(98, 243, 79);
        }

想改成底对齐呢?

css 复制代码
        .container {
            display: flex;
            justify-content: space-between;
            align-content:center;
            align-items: end;
            flex-wrap: wrap;
            height: 40vh;
            width: 50vh;
            margin:200px auto;
            background-color: #f0f0f0;
            padding: 20px;
            border:5px solid rgb(98, 243, 79);
        }

设置align-items: end;属性就可以了。

可以发现,align-items设置的是子元素在侧轴方向的对齐方式。

那其中的一个盒子想鹤立鸡群,怎么办?(对不起,脑子里一闪而过:"鸡你太美!",控制不住)这时候就要请出我们的align-self属性了

  • align-self
css 复制代码
        .box1 {
            width: 100px;
            height: 100px;
            background-color: #3498db;
            color: white;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 16px;
            border-radius: 5px;
            align-self: flex-start;//控制自身侧轴方向的对齐方式
        }
        
         .box3 {
            width: 100px;
            height: 120px;
            background-color: #ec6543;
            color: white;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 16px;
            border-radius: 5px;
            align-self: flex-end;//控制自身侧轴方向的对齐方式
        }

所以align-self很好理解,就是每个子元素自己想要与众不同时,单独设置一下自己的对齐方式,是设置给子元素的。

总结:

  • justify-content 控制子元素在主轴方向的分布方式,默认为横轴,可以理解为最小控制单位为每一个子元素
  • align-content 控制子元素整体侧轴方向的分布方式,默认为纵轴,可以理解为最小控制单位为每一行
  • align-items 控制子元素在侧轴方向的对齐方式,默认为顶对齐
  • align-self 与 align-items 属性值相同,不同的是他是设置给单个子元素的,让单个子元素灵活控制自己的对齐方式

唉,自学前端真的麻烦,文档一扒全是高端术语,程序员的世界为什么不能简单一点?看完一脸懵逼,一知半解,还是得自己工作实践后,总结成自己的语言。

所以,从今天起,~~重学前端~~~(开玩笑的,别当真),下一期 响应式布局(不能保证说到做到,太忙了呜呜呜~)

相关推荐
m0_748248773 分钟前
YOLOv5部署到web端(flask+js简单易懂)
前端·yolo·flask
qwaesrdt320210 分钟前
【如何使用大语言模型(LLMs)高效总结多文档内容】
前端
Ace_317508877638 分钟前
淘宝平台通过关键字搜索获取商品列表技术贴
前端
一个处女座的程序猿O(∩_∩)O1 小时前
vue 如何实现复制和粘贴操作
前端·javascript·vue.js
赔罪1 小时前
HTML-列表标签
服务器·前端·javascript·vscode·html·webstorm
谦谦橘子1 小时前
手写React useEffect方法,理解useEffect原理
前端·javascript·react.js
九州~空城2 小时前
C++中map和set的封装
java·前端·c++
椒盐大肥猫2 小时前
axios拦截器底层实现原理
前端·javascript
夕水2 小时前
我的2024-人生须为有益事
前端·年终总结
明月看潮生2 小时前
青少年编程与数学 02-006 前端开发框架VUE 08课题、列表渲染
前端·javascript·vue.js·青少年编程·编程与数学