浅谈display:flex

本文探讨了display:flex在网页布局中的应用,重点介绍了如何利用flex解决传统布局难题,如元素的等比分配及居中问题。

浅谈display:flex

display:flex 意思是弹性布局

 

首先flex的出现是为了解决哪些问题呢?

一、页面行排列布局

像此图左右两个div一排显示

可以用浮动的布局方式

html部分

css部分

这种布局有两个缺点

1.需要一个空div来清除浮动,当然也可以选用其他清除浮动的方法,但此处需要清除浮动才能不影响下面的布局。

2.当.left,.right 的宽度是固定的,浏览器宽度变的过窄时,.right会被挤到下面

用display:flex布局,可以解决这两个缺点

刚吃的html部分不变,css部分

父级元素定义display:flex,子元素宽度用flex来定义,flex:1 是均分父级元素。占的比例相同

1:2分时

同样分为3份时

flex是所占的比例,这样的布局就方便很多。

 

 二、div上下左右居中

我之前写过div上下左右居中的几种方法

其中有一个写了margin:auto auto;这个方法的使用前提就是先把父元素设为display:flex

html部分

css部分 

在未知div宽高时,用这种方法比较方便

这是我在使用flex布局时用到的两个比较常见又好用的例子

<think>我们正在讨论React Native中的display属性,特别是flex和none。请注意,React Native的布局系统基于Flexbox,因此display:flex是默认的布局行为。而display:none用于隐藏元素。 在React Native中,我们通常使用style属性来控制组件的显示和布局。对于display属性,React Native支持的有: - 'flex'(默认值):使用Flexbox布局显示元素。 - 'none':隐藏元素,且不占据布局空间。 注意:在React Native中,没有类似于Web中的block, inline-block等值,因为布局主要依赖于Flexbox。 使用场景: 1. display:flex:这是默认值,当我们想使用Flexbox布局来排列子元素时,不需要特别设置,因为默认就是flex。但我们可以通过flexDirection, justifyContent, alignItems等属性来控制布局。 2. display:none:当我们想要隐藏某个组件,并且不希望它占据任何空间时使用。注意,与Web不同,在React Native中,我们也可以通过设置组件的宽度和高度为0来隐藏,但使用display:none更为直接和语义化。 示例: 1. 使用display:flex(默认,通常不写): ```jsx <View style={{flex: 1, flexDirection: 'row'}}> <Text>Item 1</Text> <Text>Item 2</Text> </View> ``` 2. 使用display:none: ```jsx <View style={{display: 'none'}}> <Text>这个组件将被隐藏,不占据空间</Text> </View> ``` 另外,在React Native中,我们也可以使用条件渲染来控制组件的显示与隐藏,例如: ```jsx {shouldShow && <View><Text>条件显示的组件</Text></View>} ``` 这种方式与display:none的效果类似,都是不渲染或隐藏组件,不占据空间。 但是要注意,display:none只是隐藏组件,而条件渲染则是完全不渲染该组件。根据需求选择: - 如果组件需要频繁切换显示/隐藏,且状态需要保留,可以使用display:none(因为组件只是被隐藏,并没有被卸载)。 - 如果隐藏时不需要保留状态,或者组件渲染开销大,则可以使用条件渲染(这样在隐藏时不会渲染,节省资源)。 总结: - 默认情况下,React Native组件都是display:flex,无需特别设置。 - 使用display:none可以隐藏组件且不占据空间。 - 根据场景选择display:none还是条件渲染。 相关问题: 1. 在React Native中,除了display:none,还有哪些隐藏组件的方法? 2. React Native的Flexbox布局与Web的Flexbox有哪些主要区别? 3. 如何实现React Native组件的渐显/渐隐效果? </think>在 React Native 中,`display: flex` 和 `display: none` 的使用方式与 Web 开发类似,但存在平台差异和实现区别: ### 📱 1. `display: flex`(默认布局模式) - **作用**:启用 Flexbox 布局(React Native 的默认布局系统) - **使用方法**(通常无需显式声明,因默认即为 flex): ```jsx <View style={{ display: 'flex', flexDirection: 'row' }}> <Text>Item 1</Text> <Text>Item 2</Text> </View> ``` - **核心属性**: - `flexDirection`: `row`(水平) / `column`(垂直,默认) - `justifyContent`: 主轴对齐(`flex-start`, `center`, `space-between` 等) - `alignItems`: 交叉轴对齐(`stretch`, `center`, `flex-start` 等) - `flex`: 定义元素的伸缩比例(如 `flex: 1` 表示占满剩余空间) - **典型场景**: - 构建响应式网格布局 - 实现水平/垂直居中 - 分配剩余空间(如底部固定按钮+滚动内容区域) - 等分空间布局(结合 `flex: 1` 使用) ### 🚫 2. `display: none` - **作用**:完全隐藏元素且**不占据布局空间** - **使用方法**: ```jsx <View style={{ display: shouldShow ? 'flex' : 'none' }}> <Text>条件显示的内容</Text> </View> ``` - **特性**: - 元素从渲染树移除,不参与布局计算 - 相比 `opacity: 0`(视觉隐藏但仍占位)更彻底 - 性能优于 `position: absolute` + `left: -1000` 等 hack 方式 - **典型场景**: - 条件渲染(如权限控制下的UI模块) - 步骤引导的分页切换 - 动态隐藏/显示复杂组件(避免重渲染开销) - 响应设备旋转/尺寸变化的适配逻辑 ### ️ 关键注意事项 1. **平台差异**: - Android 默认支持 `display: none` - **iOS 需 RN 0.62+** 才支持(旧版本需用 `opacity` + `position` 替代) 2. **性能对比**: | **方法** | 布局占位 | GPU 渲染负担 | 适用场景 | |-------------------|----------|-------------|-----------------------| | `display: none` | ❌ 否 | ✅ 低 | 需彻底移除元素时 | | `opacity: 0` | ✅ 是 | ⚠️ 中 | 需要位移动画时 | | 条件渲染 `&&` | ❌ 否 | ✅ 低 | 初始化不渲染的复杂组件 | 3. **替代方案参考**(兼容旧版 iOS): ```jsx // 兼容性隐藏方案 <View style={{ opacity: shouldShow ? 1 : 0, position: shouldShow ? 'relative' : 'absolute', height: shouldShow ? undefined : 0, overflow: 'hidden' }}> ``` --- ### 📚 相关问题 1. React Native 中 Flexbox 布局与 Web 的 Flexbox 有哪些主要区别? 2. 如何实现 React Native 组件的渐隐/渐显动画效果? 3. 在性能优化场景下,`display: none` 和条件渲染 `{isVisible && <Component/>}` 应如何选择? 4. React Native 中如何处理响应式布局中的元素隐藏逻辑(如横屏/竖屏切换)? > 引用说明:关于元素隐藏时布局空间的处理机制参考了 Flexbox 布局规范的核心原则[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值