uniapp view怎么按长度排列一行最多四个元素,并且换行后,每一行之间都有间隔

文章目录

1.使用 Flex 布局并设置间距

  • 在uniapp中,可以利用flex布局来实现view按要求排列。以下是一个示例代码:
  • 模板部分(template)
html 复制代码
<template>
    <view class="parent-view">
        <view v-for="(item, index) in itemList" :key="index" class="child-view">{{item}}</view>
    </view>
</template>
  • 脚本部分(script)(这里简单定义一个示例数据数组):
javascript 复制代码
export default {
    data() {
        return {
            itemList: ['元素1', '元素2', '元素3', '元素4', '元素5', '元素6']
        };
    },
};
  • 样式部分(style):
css 复制代码
.parent-view {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-start;
    gap: 10px; /* 设置元素之间的间距,这里是10px,可以根据需求调整 */
}

.child-view {
    width: calc(25% - 10px); /* 考虑间距后每个元素的宽度,这里假设父容器宽度为100% */
    box-sizing: border-box;
    background-color: #f0f0f0; /* 可根据需求添加背景色等样式 */
    padding: 5px; /* 元素内部的间距,可调整 */
}

在上述代码中,parent - view类使用flex - wrap: wrap来实现换行,justify - content: flex - start使元素左对齐(如果需要其他对齐方式可以修改),gap: 10px设置了元素之间的间距。child - view类中计算了每个元素的宽度,考虑了间距因素,同时设置了一些基本的样式。

2.动态根据内容长度排列(可选补充)

  • 如果想要根据内容的实际长度(例如文本长度)动态调整排列,并且满足每行最多四个元素和换行有间隔的要求,可以使用uni.createSelectorQuery()来获取每个view元素的宽度,然后进行动态布局调整。
  • 以下是一个大致的示例思路(在mounted生命周期钩子中):
javascript 复制代码
mounted() {
    const that = this;
    const query = uni.createSelectorQuery().in(this);
    query.selectAll('.child - view').boundingClientRect(data => {
        let items = that.itemList;
        let line = [];
        let lines = [];
        let currentWidth = 0;
        let maxWidthPerLine = uni.getSystemInfoSync().windowWidth;
        let gap = 10; /* 元素之间的间距,与CSS中的设置一致 */
        for (let i = 0; i < data.length; i++) {
            let itemWidth = data[i].width;
            if (currentWidth+itemWidth <= maxWidthPerLine && line.length < 4) {
                line.push(items[i]);
                currentWidth += itemWidth + gap;
            } else {
                lines.push(line);
                line = [items[i]];
                currentWidth = itemWidth + gap;
            }
        }
        if (line.length > 0) {
            lines.push(line);
        }
        // 这里可以根据lines重新渲染视图,例如更新数据结构或者使用v - if/v - for组合来正确显示布局
    }).exec();
}

这种方式通过获取每个view元素的实际宽度,按照每行最多四个元素和间距要求进行分组,然后可以根据分组结果进一步调整布局。不过这种方法相对复杂一些,并且在内容动态变化时可能需要重新计算布局。

希望本文对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。

关注我看更多有意思的文章哦!👉👉

相关推荐
LinXunFeng2 小时前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
乘风gg6 小时前
为什么AI 时代来临,大部分人吃不到红利
前端·ai编程·claude
恋猫de小郭6 小时前
Android 限制侧载新进展,谷歌联合国内厂商推验证计划
android·前端·flutter
IT_陈寒6 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
恋猫de小郭6 小时前
解读 Android 17 全新内存限制,有没有“豁免”后门?
android·前端·flutter
Hyyy8 小时前
理解LLM的基本工作原理:预训练、微调、推理的区别
前端
Gatlin8 小时前
前端逆向与反逆向:一场猫鼠游戏的底层逻辑与实战
前端
Pedantic8 小时前
本地通知(Local Notifications)学习笔记
前端
森蓝情丶9 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端
爱勇宝9 小时前
干了近 8 年,一夜之间被裁:AI 时代,程序员最该害怕的不是 AI
前端·后端·程序员