uni-app CSS伪类 float 在app端失效,且iOS端会使元素消失

uni-app CSS伪类 float 在app端失效,且iOS端会使元素消失

示例代码:

<template>  
    <view class="wrapper">  
        <view style="float: right;">11111222</view>  
        <view class="text" :class="{checked:flage}">  
            <view class="btn" v-if="isShow" @click="flage=!flage"></view>  
            {{text}}  
        </view>  

        <!-- 获取完全展开高度的view  -->  
        <view class="text get-height-box"  id="text">  
            {{text}}  
        </view>  

    </view>  
</template>  

<script>  
export default {  
    data() {  
        return {  
            flage: false,  
            isShow:false,  
            text: `浮动元素是如如果还有更一行。  
            浮动元素是如何定位的还有更一行 有还有更一有更一行 有还有更一行 有还 更行。  
            。`  
        }  
    },  
    onLoad() {  
        this.$nextTick(function() {  
            let _this = this  
            let query = uni.createSelectorQuery().select('#text');  
            query.boundingClientRect(function(data) {  
                //单行行高 30  
                console.log(data.height);  
                if (data.height > 60) {  
                    _this.isShow = true  
                }  
            })  
            .exec();  
        })  
    },  
}  
</script>  

<style scoped>  
.wrapper {  
    position: relative;  
    display: flex;  
    width: 800rpx;  
    overflow: hidden;  
    border-radius: 8px;  
}  

.text {  
    font-size: 20px;  
    line-height: 30px;  
    overflow: hidden;  
    text-overflow: ellipsis;  
    text-align: justify;  
    display: -webkit-box;  
    -webkit-line-clamp: 2;  
    -webkit-box-orient: vertical;  
    position: relative;  
    color: #aaff00;  
}  

.get-height-box{  
    position: absolute;  
    -webkit-line-clamp: 999;/* 完全展开 */  
    z-index: -99;  
    background-color: #0066CC;  
    opacity: 0;  
}  

.text::before {  
    content: '';  
    height: calc(100% - 24px);  
    float: right;  
}  

.btn {  
    float: right;  
    clear: both;  
    font-size: 16px;  
    border-radius: 4px;  
    color: #000000;  
    cursor: pointer;  
    background-color: #00CE47;  
}  

.btn::before {  
    content: '查看全部'  
}  

.checked.text {  
    -webkit-line-clamp: 999;  
}  

.checked.text::after {  
    visibility: hidden;  
}  

.checked.text .btn::before {  
    content: '收起'  
}  
</style>  

操作步骤:

上面代码

预期结果:

app 端和 h5 端一样

实际结果:

app 端和 h5 端不一样

bug描述:

h5 端

安卓端

iso 端


更多关于uni-app CSS伪类 float 在app端失效,且iOS端会使元素消失的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

你好,更新一下 3.2.7 测试一下是否正常

更多关于uni-app CSS伪类 float 在app端失效,且iOS端会使元素消失的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你好 我这边更新到3.2.9 还是出现上述问题

这个属于浏览器差异,你使用Safari浏览器访问也是这个问题,可以采用其他布局方式绕过

我靠 我整个展开更多要贴着文字的,其他布局实现不了吧

我这边只要一给float元素就消失了(APP安卓端、vue页面、HX3.2.16),H5就没问题,是不是APP不支持float

同样的问题请问怎么解决的?

我也遇到这个问题了

在 uni-app 中,float 属性在 App 端的支持确实有限,尤其是在 iOS 上可能导致元素渲染异常或消失。这是因为 uni-app 的 App 端基于原生渲染,而非 WebView,CSS 支持与 H5 有差异。以下分析和解决方案:

  1. float 在 App 端的限制
    uni-app 的 App 端(iOS/Android)使用原生组件渲染,CSS 支持以 Flex 布局为主。float 属性在原生环境中可能不被完全支持,尤其是在复杂布局中,可能导致元素位置错误或消失(如 iOS 端示例)。建议避免在 App 端使用 float

  2. 替代方案

    • 使用 Flex 布局替代 float。例如,将 .wrapper 改为 display: flex; justify-content: space-between;,并调整子元素顺序。
    • 对于示例中的右浮动元素,可通过 Flex 的 order 属性或 margin-left: auto; 实现右对齐。
    • 伪类 ::before 中的 float: right 可改为绝对定位或 Flex 布局模拟。
  3. 代码调整建议

    • 移除 float: right;,改用 Flex 控制布局。例如:
      .wrapper {
        display: flex;
        justify-content: space-between;
        align-items: flex-start;
      }
      .text::before {
        /* 替代 float: right */
        position: absolute;
        right: 0;
      }
      
    • 检查 iOS 端元素消失问题:可能是 float 导致渲染层级错误,移除后通常可解决。
  4. 兼容性处理

    • 使用条件编译区分平台,在 App 端禁用 float
      /* #ifndef APP-PLUS */
      .btn { float: right; }
      /* #endif */
回到顶部