Flex布局下居中滚动溢出

在这里插入图片描述
摘要:

遇到一个需求,在uniapp swiper下实现轮播图,图片的高度是自适应的,超出屏幕设备的高度的时候,滚动显示全部,图片的高度没有超过屏幕的高度时候,上下居中于屏幕的中间!下面写了个dome来研究一下这!

画出dome: justify-content: center;居中对齐
超过屏幕宽度的时候居中对齐的1被吃掉了,但是8正常的!如果没有超出屏幕的时候屏幕居中对齐的!
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>拖拽</title>
		<style>
			body {
				margin: 0;
				padding: 0;
			}

			.product-status {
				width: 100%;
				font-size: 30px;
			}

			.other {
				display: flex;
				width: 100%;
				overflow-x: scroll;
				/* 修改justify-content居中不居中 */
				justify-content: center;
				gap: 10px;
			}

			.other div {
				padding: 0 100px;
				height: 200px;
				background: red;
				display: flex;
				align-items: center;
				justify-content: center;
			}
		</style>
	</head>
	<body>
		<div class="product-status">
			超出:
			<div class="other">
				<div>1</div>
				<div>2</div>
				<div>3</div>
				<div>4</div>
				<div>5</div>
				<div>6</div>
				<div>7</div>
				<div>8</div>
			</div>
			
			不超出:
			<div class="other">
				<div>1</div>
				<div>2</div>
			</div>
		</div>
		<script>
			window.onload = function() {

			}
		</script>
	</body>
</html>

方法一:Flex 布局下关键字 safe、unsafe但是版本要求高
在从 Chrome 115 开始,flex 布局下新增了两个关键字 safe 和 unsafe。

在这里插入图片描述
将 justify-content: center 改为 justify-content: safe center 即可:但是不满足我这的开发需求,记录一下!
目前而言,这个方法唯一的问题在于 兼容性,safe 关键字的大范围使用,还需要静待一段时间。

.other {
	display: flex;
	width: 100%;
	overflow-x: scroll;
	/* 修改justify-content居中不居中 */
	justify-content: safe center;
	gap: 10px;
}

方法二:使用 margin: auto 替代 justify-content: center

.other {
	display: flex;
	width: 100%;
	overflow-x: scroll;
	/* 修改justify-content居中不居中 */
	/* justify-content: center; */
	gap: 10px;
}

.other div {
	padding: 0 100px;
	height: 200px;
	background: red;
	margin: auto;
	/* display: flex;
	align-items: center;
	justify-content: center; */
}

这方案超过的就正常了,但是没有超过的就自动根据占位来自动平分了!还是不能满足要求,记录一下!
在这里插入图片描述

用规范的话说就是,设置了 margin: auto 的元素,在通过 justify-content 和 align-self 进行对齐之前,任何正处于空闲的空间都会分配到该方向的自动 margin 中去。

方法三:额外嵌套一层
上面的 margin:auto 虽然没有兼容性问题,但是有一点点瑕疵。我们仔细对比 margin: auto 与 justify-content: center 在 flex-item 不足以溢出下的表现:
瑕疵在于,使用 margin: auto 的方式,flex-item 之间的间距是不可控。因为它们始终会去平分剩余空余空间。
所以,兼容性最好的方式,就是我们多叠加一层,同样可以巧妙的解决这个问题。

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>拖拽</title>
		<style>
			body {
				margin: 0;
				padding: 0;
			}

			.product-status {
				width: 100%;
				font-size: 30px;
			}

			.other {
				width: 100%;
				height: 300px;
				position: relative;
				margin: auto;
				display: flex;
				flex-wrap: nowrap;
				flex-direction: row;
				justify-content: center;
				align-items: center;
				overflow: auto;
				/* counter-reset: myCounter; */
			}

			.other_item {
				display: flex;
				gap: 10px;
				max-width: 100%;
			}
			.other_item div {
				width: 200px;
				height: 300px;
				background: red;
				position: relative;
				flex-shrink: 0;
				background: red;
				/* &::before {
				    counter-increment: myCounter;
				    content: counter(myCounter);
				    inset: 0;
				    position: absolute;
				    text-align: center;
				} */
			}
		</style>
	</head>
	<body>
		<div class="product-status">
			超出:
			<div class="other">
				<div class="other_item">
					<div>1</div>
					<div>2</div>
					<div>3</div>
					<div>4</div>
					<div>5</div>
					<div>6</div>
					<div>7</div>
					<div>8</div>
				</div>
			</div>
			
			不超出:
			<div class="other">
				<div class="other_item">
					<div>1</div>
					<div>2</div>
				</div>
			</div>
		</div>
		<script>
			window.onload = function() {

			}
		</script>
	</body>
</html>

在这里插入图片描述

参考网站W3C:Cascading Style Sheets
在这里插入图片描述

回到需求中:

uniapp swiper下实现轮播图,图片的高度是自适应的,超出屏幕设备的高度的时候,滚动显示全部,图片的高度没有超过屏幕的高度时候,上下居中于屏幕的中间!
在这里插入图片描述

上面的研究还真的不符合需求的!因为这里嵌套了swiper的多层view,拿不到swper中间的视图父子之间的dome关系层!所以这里常用逻辑的处理方法!

设置基础的可高度为100vh,以这为基础来动态获取屏幕的可视化高度与动态图片高度作为对比,当图片的高度填满屏幕的100vh的时候,证明已经超过可视化的高度,所以当他们相等的时候去掉默认的弹性布局让图片动态高度作为滚动的基础溢出屏幕隐藏滚动!

<template>
	<view class="imageView">
		<view class="imageContent">
			<view class="imageItem">
				<swiper @change="changeSwiper" class="imageContainer" :current="current" indicator-dots>
					<swiper-item v-for="(item, index) in imageList" :key="index" :class="classType == 0 ? 'flexCenter' : ''" class="swiperitem">
						<image style="width: 100%;" :id="'itemImg' + index" :class="current == index ? 'swiperactive' : ''" :src="item" lazy-load mode="widthFix"></image>
						<!-- <scroll-view 
						  scroll-y="true" 
						  style="height: 100%;"
						  :class="classType == 0 ? 'flexCenter' : ''">
							<image style="width: 100%;" :id="'itemImg' + index" :class="current == index ? 'swiperactive' : ''" :src="item" lazy-load mode="widthFix"></image>
					    </scroll-view> -->
					</swiper-item>
				</swiper>
			</view>
			<view class="callIt">长按保存图片</view>
		</view>
	</view>
</template>

<script>
	export default {
		name: "imageView",
		mounted() {
			this.windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
			this.imageList = uni.getStorageSync('iamgeList');
			setTimeout(() => {
				this.setSwiperHeight();
			}, 2000)
		},
		data() {
			return {
				imageList: [],
				current: 0,
				swiperHeight: null,
				currentIndex: 0,
				windowHeight: null,
				classType: 0
			}
		},
		methods: {
			changeSwiper(e) {
				this.current = e.detail.current;
				this.$nextTick(() => {
					this.setSwiperHeight();
				});
			},
			setSwiperHeight() {
				let that = this;
				let element = "#itemImg" + that.current;
				let query = uni.createSelectorQuery().in(that);
				query.select(element).boundingClientRect();
				query.exec((res) => {
					if (res && res[0]) {
						that.swiperHeight = res[0].height;
						if (that.swiperHeight == that.windowHeight) {
							that.classType = 1;
						}
					}
				})
			}
		}
	}
</script>

<style lang="less" scoped>
	.flexCenter {
		display: flex;
		align-items: center;
		flex-direction: column;
		justify-content: center;
	}

	.imageView {
		height: 100vh;
		width: 100%;
		background: #000;

		.imageContent {
			width: 100%;
			height: 100vh;
			background: #000;

			.imageItem {
				width: 100%;
				height: 100vh;

				.imageContainer {
					width: 100%;
					height: 100%;

					.swiperitem {
						width: 100%;
						height: 100%;
						overflow: scroll;
					}
				}
			}

			.callIt {
				width: 32vw;
				background: #999;
				color: #fff;
				text-align: center;
				padding: 1.2vw;
				position: absolute;
				bottom: 35vw;
				border-radius: 10vw;
				left: 50%;
				transform: translateX(-50%);
			}
		}
	}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/258286.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

长短期记忆(LSTM)神经网络-多输入回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整代码数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编…

2023中国品牌节金谱奖荣誉发布 酷开科技获颁OTT行业科技创新奖

11月17日—19日&#xff0c;以“复苏与腾飞”为主题的2023第十七届中国品牌节&#xff0c;在杭州市云栖小镇国际会展中心成功举行。在18日晚间的荣耀盛典上&#xff0c;“TopBrand 2023中国品牌节金谱奖”荣誉发布&#xff0c;酷开科技斩获OTT行业科技创新奖。 酷开科技作为OTT…

九牧:科技卫浴,长期主义

“没有做错什么&#xff0c;但却输给了时代”&#xff0c;这是人们给当年手机巨头诺基亚的注解。 谁也没有想到&#xff0c;曾在手机行业称雄的诺基亚&#xff0c;最终败给了时代。当年&#xff0c;在2G向3G、4G跨越的时候&#xff0c;苹果、微软的iOS和安卓系统将手机从简单的…

PHPStorm一站式配置

phpstorm安装好之后&#xff0c;先别急着编码。工欲善其事&#xff0c;必先利其器&#xff0c;配置好下面这些之后让编码事半功倍。 主题 Appearance & Behavior -> Appearance -> Theme 选中 [Light with Light Header] 亮色较为护眼 关闭更新 Appearance & …

什么是同源策略?

同源 同源指的是URL有相同的协议、主机名和端口号。 同源策略 同源策略指的是浏览器提供的安全功能&#xff0c;非同源的RUL之间不能进行资源交互 跨域 两个非同源之间要进行资源交互就是跨域。 浏览器对跨域请求的拦截 浏览器是允许跨域请求的&#xff0c;但是请求返回…

零刻EQ12 N100 双2.5G网口 All In One新手教程

零刻EQ12 N100 双2.5G网口 All In One新手教程 前言1.硬件配置2.准备工作2.1. ESXI8.0U2镜像2.2. Rufus磁盘工具下载2.3. ikuai镜像下载2.4. StarWindConverter虚拟磁盘格式转换工具下载2.5. OpenWrt镜像下载2.6. 黑群晖RR引导镜像下载(DSM7.2)2.7. 需要准备的硬件2.8. 格式化需…

《空气质量持续改善行动计划》发布,汉威科技助力蓝天保卫战

近日&#xff0c;国务院印发《空气质量持续改善行动计划》&#xff0c;这是继2013年“大气十条”之后的第三个国家层面的保卫蓝天行动计划。 计划要求协同推进降碳、减污、扩绿、增长&#xff0c;以改善空气质量为核心&#xff0c;以减少重污染天气和解决人民群众身边的突出大…

什么是云服务器ECS

云服务器ECS&#xff08;Elastic Compute Service&#xff09;是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS&#xff08;Infrastructure as a Service&#xff09;级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备&#xff0c;让您像使用水、电、天然气等公共资…

Python 爬虫之简单的爬虫(四)

爬取动态网页&#xff08;下&#xff09; 文章目录 爬取动态网页&#xff08;下&#xff09;前言一、大致内容二、基本思路三、代码编写1.引入库2.加载网页数据3.获取并保存4.保存文档 总结 前言 上篇主要讲了如何去爬取数据&#xff0c;这篇来讲一下如何在获取的同时将数据整…

机器学习 | 贝叶斯方法

不同于KNN最近邻算法的空间思维&#xff0c;线性算法的线性思维&#xff0c;决策树算法的树状思维&#xff0c;神经网络的网状思维&#xff0c;SVM的升维思维。 贝叶斯方法强调的是 先后的因果思维。 监督式模型分为判别式模型和生成式模型。 判别模型和生成模型的区别&#xf…

英码科技受邀参加2023计算产业生态大会,分享智慧轨道交通创新解决方案

12月13-14日&#xff0c;“凝心聚力&#xff0c;共赢计算新时代”——2023计算产业生态大会在北京香格里拉饭店成功举办。英码科技受邀参加行业数字化分论坛活动&#xff0c;市场总监李甘来先生现场发表了题为《AI哨兵&#xff0c;为铁路安全运营站好第一道岗》的精彩主题演讲&…

PIL/Pillow

Abstract PIL(Python Imaging Library)是一个用于图像处理的 Python 库。它提供了广泛的功能&#xff0c;包括图像加载、保存、调整大小、裁剪、旋转、滤镜应用等。 由于 PIL 的开发停止在 2009 年&#xff0c;因此推荐使用其后续的维护版本 Pillow。Pillow 是一个兼容 PIL 接…

Vue3+el-table实现甘特图

Vue3 el-table实现甘特图效果 代码gitee 整体实现效果如下 进度列&#xff0c;可以通过设置天或小时&#xff0c;切换不同列显示类型。 涉及到的问题 1、通过Worker解决js线程堵塞问题 在根据时间动态生成列时&#xff0c;由于开始时间与结束时间跨度过大时&#xff0c;计…

【从服务器获取共享列表失败】【无法与设备或资源通信】解决方案!

【从服务器获取共享列表失败】背景&#xff1a; 某项目搭建有samba共享&#xff0c;使用一段时间后&#xff0c;不知何种原因&#xff0c;客户端链接共享时报&#xff1a;从服务器获取共享列表失败&#xff0c;无效的参数。 可参考解决方案A&#xff1a; 银河麒麟samba共享文…

vue3 环境变量

开发环境&#xff1a; .env.development VITE_HTTPhttp://www.baidu.com生成环境&#xff1a; .env.production VITE_HTTPhttp://www.jd.com获取环境里的值 <template></template><script setup lang"ts"> console.log(import.meta.env); <…

图片处理软件DxO PhotoLab 6 mac高级工具

DxO PhotoLab 6 mac是一款专业的RAW图片处理软件&#xff0c;适用于Mac操作系统。它具有先进的图像处理技术和直观易用的界面&#xff0c;可帮助用户轻松地将RAW格式的照片转换为高质量的JPEG或TIFF图像。 DxO PhotoLab 6支持多种相机品牌的RAW格式&#xff0c;包括佳能、尼康、…

【docker】数据管理

Docker容器会随时关闭和开启,Docker 容器的数据放哪里呢&#xff1f; 答案就是&#xff1a;数据卷和数据卷容器 官网文档 Manage data in Docker | Docker Docs 数据卷(Data Volume) 数据卷就是将宿主机的某个目录&#xff0c;映射到容器中&#xff0c;作为数据存储的目录&…

21 3GPP中 5G NR高速列车通信标准化

文章目录 信道模型实验——物理层设计相关元素μ(与子载波间隔有关)设计参考信号(DMRS) 本文提出初始接入、移动性管理、线性小区设计等高层技术。描述3GPP采用HST场景的评估参数&#xff0c;阐释了HST应用的物理层技术&#xff0c;包括数字通信和参考信号设计&#xff0c;链路…

基于PHP的蛋糕购物商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的蛋糕购物商城系统 一 介绍 此蛋糕购物商城基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销…

【大数据存储与处理】实验四 MongoDB 文档操作

实验四 MongoDB 文档操作 【实验目的】&#xff1a; 1. 掌握 MongoDB CRUD 基本操作&#xff1b; 2. 掌握 MongoDB 插入文档 3. 掌握 MongoDB 更新文档 4. 掌握 MongoDB 删除文档 5. 掌握 MongoDB 删除集合。 【实验内容与要求】&#xff1a; MongoDB 是一个介于关系数…