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

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

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

相关推荐
灵易联盟2 分钟前
Electron教程1-初学入门
前端·javascript·electron
Acacia.~28 分钟前
第八章 利用CSS制作导航栏
前端·css
摆烂工程师1 小时前
GPT4变笨了?教你解决GPT4降智问题!同时封装了个Chrome扩展程序进行检查GPT
前端·后端·程序员
编程老船长1 小时前
网页设计基础 第十九讲:CSS定位实战 —— 打造精美布局的个人简介页
前端·css·html
艾小逗1 小时前
uniapp适配暗黑模式配置plus.nativeUI.setUIStyle适配DarkMode配置
uni-app·plus·darkmode·naviteui
h185385922441 小时前
客运购票售票小程序校园巴士预约售票小程序开发方案php+uniapp
微信小程序·小程序·uni-app·php·uniapp·源码软件
snow_wind_rain1 小时前
网页作业9
前端·css·css3
zhzhzhen_1 小时前
如何在项目中用elementui实现分页器功能
前端·javascript·elementui
向明天乄1 小时前
elementui el-table中给表头 el-table-column 加一个鼠标移入提示说明
前端·javascript·vue.js·elementui
Akiiiira1 小时前
【网页设计】CSS3 进阶(动画篇)
前端·javascript·css3