解决css元素位置随手指上下移动而移动的bug(uniapp)

文章讲述了在uniapp中遇到的横向元素超出滚动问题,通过复现和排查发现是由于内部元素超出但未显示,最终通过在最外层盒子添加`overflow-y:hidden`解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、前言

2、复现

3、解决

4、致辞


1、前言

此bug是用uniapp在做一个横向元素超出时可滑动的需求时出现,此前用相同css样式编译微信小程序、抖音小程序时均未曾出现此问题。

2、复现

如下图视频效果复现问题,原本要的是超出横向滚动,但手指触摸到该盒子后上下左右均可移动,位置随手指移动而移动。

3、解决

最后一步一步排查发现尽管元素可以上下移动,但是移动后的位置并不会超出最外层盒子,由此确定可能是内部有元素超出但并未显示,因此在最外层盒子上加上元素纵向超出隐藏,随即解决。

    overflow-y: hidden;

最后,附上完整css代码: 

             // 最外层盒子
			 .content {

				overflow-y: hidden;        /* -----关键代码在此----- */


				width: 100%;
				padding: 20rpx 0 0;
				overflow-x: auto;
				-webkit-overflow-x: auto;
				white-space: nowrap;
				
				// 书籍
				.book {
					-webkit-vertical-align: top;
					vertical-align: top;
					border-radius: 5px;
					display: inline-block !important;
					box-shadow: -5rpx -4rpx 10rpx 0rpx rgba(185, 186, 187, 0.25);
					background-color: #fff;
					width: 244rpx;
					margin-right: 20rpx;
					// 封面
					.thumb {
						width: 100%;
						height: 320rpx;
						border-radius: 5px 5px 0 0;
					}
					// 文字部分
					.note {
						width: 82%;
						font-size: 28rpx;
						padding-bottom: 20rpx;
						margin: 0 auto;
						text-align: center;
						// 书籍名
						.name {
							//超出一行省略号
							overflow: hidden !important;
							white-space: nowrap !important;
							text-overflow: ellipsis !important;

							font-size: 30rpx;
							line-height: 60rpx;
						}
						// 简介
						.intro {
							line-height: 38rpx;
							color: #999;
							font-size: 24rpx;
							width: 100%;
							overflow: hidden;
							text-overflow: ellipsis;
							text-overflow: -webkit-ellipsis-lastline;
							display: -webkit-box;
							-webkit-line-clamp: 2;
							line-clamp: 2;
							-webkit-box-orient: vertical;
							white-space: pre-line;
						}
					}
				}
			}

正常效果:

4、致辞

感谢道友观看,创作不易,需要鼓励~

点个小赞呗~~

### 解决 UniApp 中 Scroll-View 组件在 iPhone 上的定位问题 在开发过程中,当使用 `scroll-view` 组件时,在某些 iOS 版本上可能会遇到底部固定按钮无法正常显示的问题。这通常是因为 `position: fixed` 的样式在特定场景下失效所致[^1]。 #### 问题分析 `scroll-view` 是一种用于实现自定义滚动区域的组件,但在实际应用中可能存在一些兼容性问题。特别是在 iOS 平台上,由于浏览器渲染机制的不同,可能导致 `position: fixed` 样式的布局出现问题。例如,在某些情况下,即使设置了固定的定位属性,元素仍然会随着页面滚动而移动[^2]。 此外,不同设备和操作系统版本之间也可能存在差异。比如,iPhone 12 运行 iOS 15.6.1 时,可能在小程序环境中表现正常,而在 APP 环境中却出现了滚动条异常的情况[^3]。 #### 解决方案 以下是几种可行的方法来解决此问题: 1. **调整 CSS 属性** 可尝试通过修改父级容器或目标元素的相关样式来修复该问题。例如,可以为需要保持固定的元素增加额外的选择器规则,并确保其优先级高于其他样式声明。 ```css .fixed-button { position: absolute; /* 修改为绝对定位 */ bottom: 0; width: 100%; z-index: 999; } ``` 如果发现仍存在问题,则需进一步确认是否有其他影响因素干扰了预期效果。 2. **利用 Flexbox 布局代替 Fixed Positioning** 对于简单的界面设计需求来说,采用弹性盒子模型 (Flexbox) 往往能提供更稳定的表现形式。下面是一个基于 flex 的例子展示如何创建一个始终位于屏幕最下方的操作栏: ```html <view class="container"> <scroll-view scroll-y style="flex-grow: 1;"> <!-- 内容 --> </scroll-view> <view class="footer">操作按钮</view> </view> ``` ```css .container { display: flex; flex-direction: column; height: 100vh; } .footer { background-color: #f8f8f8; padding: 10px; text-align: center; } ``` 此方法能够有效规避因平台特性引发的各种 bug 同时也提高了代码可维护性和跨端一致性。 3. **动态计算位置** 当静态方式难以满足复杂业务逻辑下的适配要求时,可以通过 JavaScript 动态监听窗口变化事件并实时更新 DOM 节点的位置参数值。这种方式虽然稍微增加了程序运行负担但却提供了极大的灵活性。 ```javascript export default { mounted() { this.updatePosition(); window.addEventListener('resize', this.updatePosition); }, beforeDestroy() { window.removeEventListener('resize', this.updatePosition); }, methods: { updatePosition() { const footerEl = document.querySelector('.fixed-button'); if (!footerEl) return; let scrollTop = pageYOffset || document.documentElement.scrollTop; footerEl.style.top = `${window.innerHeight + scrollTop}px`; } } }; ``` 以上三种策略各有优劣之处,具体选用哪一种取决于项目实际情况以及个人偏好等因素考虑之后再做决定即可。 ```python print("解决方案已给出,请根据实际需求选择合适的方式实施优化") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值