flex 一行两个_这就是flex

本文详细介绍了Flex布局的基本概念,包括flex-direction的横向与纵向排列、justify-content和align-items的作用,以及flex-wrap换行规则。讲解了元素的order属性调整顺序和flex-grow/shrink控制空间占比。适合初学者理解Flex布局原理并进行实际项目应用。

对flex的第一印象就是解决响应布局存在的,使得布局的设置更灵活,但随之而来的是需要明白flex内部是怎么绘制的,一直以来就是看一下其api, 大概知道什么意思,上来就开始写,但对这个玩意却一直没有达到朋友的地步,这就是flex, 根据自己的demo慢慢来撕开它

首先,flex就是一个容器,一个大盒子,凡是在这个盒子内的元素都要尊师其制定的位置规则,这个元素该在哪,另外一个元素该在哪,我有我的规则,要想在里面呆着,就要遵守规则,否则展示一团乱。

规则一.  布局方向 横向还是纵向。flex-direction: row,里面的元素按照横向排列,向左看!。 column: 乖乖的按照纵向排好对,向上看!

0f42c3aa37b4a12087d5b1d25ec9ba65.png
先站好队

088585e4e8cce24099b9e9128d4f2e8a.png
纵向排列

37317c29ae57672777be055e593134e9.png
横向排列
规则二.  所处位置justify-content, align-items, align-content

什么意思呢?站好队了,但是在这个flex盒子里的位置还没明确,从哪开始站队,并保持这个方向。决定站的位置有两个:先看第一个justify-content。这个规则决定了你在水平方向的位置,默认的位置是在最左边.

这两个规则都有同样的位置选择:请看下图

209b253d43b52acc5bc8395e47176241.png
flex-start, center, flex-end, space-around, space-between

从上图可以看出,justify-content就相当于一个指挥官,里面的人从开始给我站好,从中间给我站好,从末尾开始站好,两边分开站好,均匀排列站好。里面的这些小弟,乖乖的在指定的方向上站好。

a08ff61669527da29f92253030a4cd44.png
同上面,只不过站的方向按照垂直方向开始

align-content和align-items一样,区别在于flex盒子内元素是否是按一行站好,如果分成了多个队列,那么align-content会把多个队列当做成一个整体,再按照左,中,底等战队,否则每一行各自应用战队规则。就好比军训,各队向左向右看齐,齐步走,走啊走,走到center,或者flex-start, flex-end的位置;另外就是各队按照小组散开,各小组按照所划分的区域向左向右看齐。

规则三. 在我内部超过一行是否要换行:flex-wrap.

什么意思呢?就是说我的房间就这么大,你们这些小弟按照一行或者一列站好,按照上图所示,人太多,一行不够站,那怎么办,就是靠这个规则来指定了,是要换到第二行还是给你们每个人瘦身,还是站在一行,请看下图:

024205a597417bb856d0711e850e75dc.png
left:挤在一列(行), right: 换行了,我不跟你们挤在一起

万能分割线^^………………………………………………………………………………………………………………………………………………………………………………

好了,说完了那个盒子上的属性,看看盒子内的元素的一些规则把,总不能只能指挥官有规则把,我也得有点自我张扬的个性把,展示自我个性的时候到了

规则1. 战队顺序:order

一开始,小兵门按照盒子内出现的顺序依次站好,也就是先到先得,谁让你来的晚的,往后站吧!

那有的人不愿意了,我们的战队顺序我们要自己商量。约定一个值,order吧,谁分到的值约高,谁往后站,0是老大

168f1b84512306907fbb081e0a74b453.png
left:个性展示 right:体制内规则

这个就牛逼了啊,随意调配每个元素的位置,我不想站这了,更改小数字,调下位置,好像小学考试调位置

规则2. 所占空间大小占比flex-grow, flex-shrink

有的人觉得我有点胖,我要多一点空间,太挤了,好吧,自我膨胀吧,给你这个权利: flex-grow设置高一点,其它兄弟看到会给你腾位置的

b94d6a07b74a48f888296a1865282ae9.png
left:展示了自我膨胀,right:正常生长

同理,我瘦,我想主动减少我的位置,就是这么任性!

bd5651eecd1d6d573cb1d34f65899986.png
left: 我好瘦啊,位置给你吧 right: 正常生长

这个shrink看来就是牺牲自我,成全他人, grow就是我就要爽,你么辛苦点

至于flex-basis这个有点绕,不考虑每个元素的自我grow和shrink, 父容器宽度去掉子元素空白元素(比如该元素内容就撑开10px,我给你给这个元素预留10px, 就可以通过flex-basis来设置,)就,所以就是去掉每个元素预留的空间外,取值为extra, extra再按照grow比列给每个元素分每个元素内容可以占多少,如果没设置grow,则为1,平均分,最终渲染到页面上每个元素的宽度=basis + extra*(grow+grow)/n

可参考:flex和flex:1的含义 - 朱帅 - 博客园

后续: flex:1 等价于flex-grow:1, flex-shrink:1(感觉没啥用,在实现两栏布局的时候),flex:basis:0%.其实实验测试只要flex-grow:1即可,自动填充剩余空间。当然,如果两个元素都设置flex-grow就不行了,这就产生竞争关系了,凭什么让你占完,就是这样。如果你不设置,我设置了flex-grow:1, 不好意思,剩下的空间我全要了,谢谢哈。^^

这就是 flex暂时先到这, 后续想到新的再来更新,这就是系列第一季我来了!

<think>好的,我现在需要帮助用户实现Flex布局中一行显示两个元素的效果。根据用户提供的引用内容,我需要结合Flex布局的基本概念和相关属性来解答这个问题。 首先,用户提到的引用[1]中有一个Flex容器的例子,其中使用了`display: flex`,并且子项目设置了固定的宽度。这可能是一个关键点,因为固定宽度可能有助于控制子元素的排列。不过,引用[2]提到使用`justify-content: space-around`和`flex-flow: row wrap`来实现子元素溢出时换行,这可能与多行布局有关,但用户的需求是一行显示两个元素,所以可能需要调整。 接下来,引用[4]提到父级元素上的属性包括`display`、`flex-direction`、`justify-content`、`align-items`,这些属性都是控制Flex布局的重要部分。用户需要设置父容器为Flex,然后调整子元素的排列方式。 根据Flex布局的基本原理,要让子元素在一行显示两个,可以考虑以下方法: 1. **设置父容器为Flex容器**:使用`display: flex;`,这是最基本的步骤。 2. **允许子元素换行**:虽然用户希望一行显示两个,但可能需要考虑不同屏幕尺寸下的适应性,所以设置`flex-wrap: wrap`可以让子元素在容器宽度不足时自动换行。 3. **控制子元素的宽度**:为了让两个子元素并排显示,每个子元素的宽度应该不超过50%。可以使用`flex-basis: 48%`或者直接设置`width: 48%`,留出一些空间给间距。 4. **调整间距**:使用`justify-content: space-between`可以自动分配子元素之间的空间,确保两个元素占据行的两端,中间留有间隔。或者使用`gap`属性来统一设置间距。 需要验证这些属性是否在用户提供的引用中有提到。引用[1]中的子元素设置了固定宽度,引用[2]使用了`flex-flow: row wrap`(即`flex-direction: row`和`flex-wrap: wrap`的组合),引用[4]提到了`flex-direction`和`justify-content`,所以这些属性都是适用的。 可能还需要考虑浏览器的兼容性,尤其是`gap`属性在旧版本浏览器中的支持情况。不过,用户的问题中没有提到兼容性要求,所以可以优先推荐现代的方法。 综合以上分析,正确的步骤应该是: - 父容器设置`display: flex; flex-wrap: wrap;`。 - 子元素设置`flex-basis: 48%`或类似宽度,配合`gap`或`justify-content`来调整间距。 需要确保子元素的总宽度加上间距不超过父容器的宽度,否则可能会换行。例如,使用`gap: 4%`时,每个子元素的宽度可以是48%,这样总和为2*48% + 4% = 100%,刚好适应父容器宽度,不会换行。 此外,引用[3]是MDN的Flexbox基本概念,可以作为权威参考,确认这些属性的正确用法。</think>### 实现Flex布局一行显示两个子元素的方法 #### 步骤说明 1. **定义Flex容器** 将父元素设置为Flex容器,并允许子元素自动换行: ```css .container { display: flex; /* 启用Flex布局 */ flex-wrap: wrap; /* 允许子元素换行 */ gap: 20px; /* 设置子元素间距(可选) */ } ``` 2. **控制子元素宽度** 通过`flex`属性或直接设置宽度,使每行仅容纳两个子元素: ```css .item { flex: 1 1 45%; /* 初始宽度45%,允许伸缩 */ /* 或直接设置固定宽度 */ /* width: 48%; */ } ``` 3. **调整对齐与间距(进阶)** - 使用`justify-content: space-between`让子元素两端对齐: ```css .container { justify-content: space-between; /* 自动分配间距 */ } ``` - 若使用`gap`,需注意浏览器兼容性[^3]。 #### 完整代码示例 ```css /* 父容器 */ .container { display: flex; flex-wrap: wrap; gap: 20px; /* 统一间距 */ } /* 子元素 */ .item { flex: 1 1 45%; /* 基础宽度45%,自动调整 */ min-width: 200px; /* 防止内容过小时变形 */ height: 100px; background-color: orange; } ``` #### 关键原理 - **flex-basis: 45%**:保证两个子元素总宽度(45% * 2 = 90%)加上`gap`间距(20px)不超过容器宽度[^4]。 - **flex-wrap: wrap**:确保空间不足时换行,但在正确计算宽度后可强制单行显示两个元素[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值