弹性布局justify-content:space-between;最后一行元素宽度不足时左对齐的几种处理方式

news/2024/5/19 17:00:11 标签: flex, html, javascript, css, css3

弹性布局justify-content:space-between;最后一行元素宽度不足时左对齐的几种方法

1.列数或总数固定不变(添加占位空元素)
想要的效果:
每一页固定十个元素,最后一页数量不足十时,从左到右从上到下依次排列。在这里插入图片描述
在这里插入图片描述
分析:
此处的情况为总数固定不变,每一页轮播图固定是十个元素。核心思想即,在最后一页,元素数量不足十的时候,用空元素补足,以达到想要的布局(即从左到右依次布局)。
解决:

html"><view v-for="(w, j) in v" :key="j">
	<view v-if="w.pic" class="cell" :style="{'background': 'url('+w.pic+') no-repeat', 'background-size': 		'113rpx', 'background-position': 'center top'}" @click="goTo(w)">
		<text>{{ w.name }}</text>
	</view>
</view>
<view class="" v-for="index of 10-v.length" :key="index"></view><!--此行为占位符-->

在这里插入图片描述
在这里插入图片描述
上图红框中均是补足的空元素,可以看到宽高均为0,所以不显示。

2.总数不定且列数不定
想要的效果:
每个元素长度不定,每行元素个数不定,最后一行能够从左到右依次排列
在这里插入图片描述
(1)方法1(js计算)
分析:
在最后一行添加一个(宽度=行宽-最后一行元素宽度总和-元素间距总和)的占位元素(或伪元素::after),则可以实现该效果。
实现:

html"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>css">
        .parent{
          width: 350px;
          display: html" title=flex>flex;
          html" title=flex>flex-wrap: wrap;
          justify-content: space-between;
        }
        .item{
            margin-top: 50px;
            padding: 0 10px;
            height: 50px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div class="parent">
        <div class="item">12332131212</div>
        <div class="item">123321</div>
        <div class="item">321</div>
        <div class="item">123332</div>
        <div class="item">123123331223</div>
        <div class="item">121223</div>
        <div class="item">32</div>
    </div>
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>javascript">
    function arrange(parent){//返回一个二维数组,表达元素的换行信息
        let rowW=$(parent)[0].clientWidth
        let children = $(parent).children()
        let arranged = [];
        let row = [];
        let width=0;
        for(let i=0;i<children.length;i++){
            if(width+children[i].clientWidth<=rowW){
                width=width+children[i].clientWidth
                row.push(children[i])
            }else{
                arranged.push(row);
                row=[children[i]];
                width=children[i].clientWidth;
            }
            if(i===children.length-1){
                arranged.push(row);
            }
        }
        return arranged;
    }
    function calculation (parent,spacing){//计算占位元素宽度
        let rowW=$(parent)[0].clientWidth
        let arrangeArr=arrange(parent);
        let width = 0;
        for(let i=0;i<arrangeArr[arrangeArr.length-1].length;i++){
            width = width+arrangeArr[arrangeArr.length-1][i].clientWidth;
        }
        let fake = $("<div></div>")
        width=(rowW-width-((arrangeArr[arrangeArr.length-1].length)*spacing))
        let style ="width:"+width+"px"
        fake.attr("style",style);
        $(parent).append(fake)
    }
    calculation(".parent",10)//此处的10为最后一行元素间距为10px,若有需要还可以写个方法动态计算此值
</script>
</html>

效果:
在这里插入图片描述

(2)方法2(纯css方法)
分析:
为父元素添加一个html" title=flex>flex:auto的伪元素::after,用以占满最后一行的剩余宽度。
实现:

css">.parent::after{
            content: "";
            html" title=flex>flex: auto;
        }

效果:
在这里插入图片描述
可以看到最后一行剩余宽度都被父元素的::after占满,但是存在最后一行元素失去间距的问题,可以为每个子元素添加一个margin来解决。
修改:

css">.parent::after{
            content: "";
            html" title=flex>flex: auto;
        }
        .item{
            margin-top: 50px;
            margin-right: 5px;
            padding: 0 10px;
            height: 50px;
            background-color: red;
        }

效果:
在这里插入图片描述


http://www.niftyadmin.cn/n/1355290.html

相关文章

“查看更多”功能,较完美的实现

“查看更多”功能&#xff0c;较完美的实现 需求&#xff1a; 文本过多时隐藏文本&#xff0c;用省略号代替&#xff0c;省略号后面有“查看更多”的按钮。 点击“查看更多”后展开所有文本&#xff0c;如下图&#xff1a; 点击“收起”后恢复原状。 实现 <div class&qu…

java rtf转doc_PDF转一切,永久免费

PDF格式是我们日常经常会用到的格式&#xff0c;它可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。文件占用小&#xff0c;转存方便&#xff0c;跨平台查看且不改变排版&#xff0c;支持矢量图形。但缺点也很明显&#xff0c;不能编辑&#x…

pythonppt_python操作ppt下载

这是python操作ppt&#xff0c;包括了python概述&#xff0c;python基础语法&#xff0c;Python数据类型&#xff0c;条件和循环&#xff0c;函数&#xff0c;模块&#xff0c;面向对象编程&#xff0c;文件相关等内容&#xff0c;欢迎点击下载。 python操作ppt是由红软PPT免费…

JS数字失真问题原理分析

问题&#xff1a; js存储数字类型变量时&#xff0c;数字位数过大时会失真。 原理&#xff1a; JS的数字类型&#xff1a;JS 遵循 IEEE 754 规范&#xff0c;采用双精度存储&#xff08;double precision&#xff09;&#xff0c;占用 64 bit&#xff0c;尾数52位。 因此Ja…

margin-top/bottom,padding-top/bottom百分比取值的问题

一、 1.margin-top/bottom&#xff0c;padding-top/bottom设置为百分比时&#xff0c;取值为父元素宽度的百分比。 2.如果想要取父元素高度的百分比&#xff0c;在父元素上添加代码&#xff1a; writing-mode: vertical-lr;二、 关于为什么为W3C规定&#xff0c;margin和padd…

python解释器的提示符是shell嘛_windows python3.2 shell环境(python叫做解释器)

【进入python的shell 环境&#xff1a;】&#xff08;python里称作命令解释器&#xff0c;windows叫做cmd&#xff0c;unix叫做shell&#xff09; cmd 输入 set path%path%;e:\python2.7 然后输入python 就进入了python的shell界面&#xff0c;类似这样&#xff1a; >>&g…

python爬虫实践报告_Python---python网络爬虫入门实践总结

目录 一、爬虫介绍 爬虫&#xff1a;网络数据采集的程序。 爬虫爬取的数据有什么用&#xff1f; &#xff08;1&#xff09;资料库 &#xff08;2&#xff09;数据分析 &#xff08;3&#xff09;人工智能&#xff1a;人物画像&#xff1b;推荐系统&#xff1a;今日头条、亚马逊…

JS如何准确判断NaN(isNaN函数不可靠问题)

JS如何准确判断NaN&#xff08;isNaN函数不可靠问题&#xff09; 使用isNaN()判断一个变量是否为NaN踩了个坑。 undefined也能够通过isNaN()的判断&#xff0c;难道我还要在判断一下是否为undefined&#xff1f;很明显这样不够优雅 逼格。 那么如何一步到位准确判断一个变量是…