object-fit 属性的使用 以及在uni-app中使用的细节

本文详细介绍了CSSobject-fit属性的不同值(fill,contain,cover,none,scale-down)的作用和示例,以及如何在uni-app中通过mode属性实现类似效果。

object-fit使用 以及效果

关于object-fit 的 属性值:object-fit: fill |contain | cover | scale-down | none | initial | inherit;

案例:

1、object-fit:fill;

个人理解: 默认的 用不用好像都一样。

右边时原图,左边是加了object-fit属性的

2、object-fit:contain;

个人理解:当父容器 宽度 小于高度 时 图片宽度铺满 图片高度等比例缩放 超出则裁剪 当父容器 宽度大于 高度 时 图片高度铺满  宽度等比例缩放 超出则裁剪。

3、object-fit:cover; 

高度铺满,宽度等比例缩放 超出则裁剪 

4、object-fit:none;

图片大小不变 保留中间部分 超出则裁剪 。

5、object-fit:scale-down;

图片小于容器时效果跟none一致,图片大于容器时效果跟contain一样。 

测试代码 :

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<style>
		.box1{
			width: 400px;
			height: 800px;
			border: solid 3px #000;
			z-index: 100;
			position: relative;
			margin-bottom: 20px;
		}
		.fill{
			width: 100%;
			height: 100%;
			object-fit:fill;
			/*个人理解: 默认的 用不用好像都一样 */
		}
		.contain{
			width: 100%;
			height: 100%;
			object-fit:contain;
			/* 当父容器 宽度 小于高度 时 图片宽度铺满 图片高度等比例缩放 超出则裁剪 当父容器 宽度大于 高度 时 图片高度铺满  宽度等比例缩放 超出则裁剪*/
		}
		.cover{
			width: 100%;
			height: 100%;
			object-fit:cover;
			/* 高度铺满,宽度等比例缩放 超出则裁剪*/
		}
		.none{
			width: 100%;
			height: 100%;
			object-fit:none;
			/*图片大小不变 保留中间部分 超出则裁剪*/
		}
		.scale-down{
			width: 100%;
			height: 100%;
			object-fit:scale-down;
			/*图片小于容器时效果跟none一致,图片大于容器时效果跟contain一样。*/
		}
	</style>
	<body>
		<!-- object-fit:fill; -->
		<div class="box1">
			<img class="fill" src="./456.jpg" alt="" />
		</div>
		<!-- object-fit:contain; -->
		<div class="box1">
			<img class="contain" src="./456.jpg" alt="" />
		</div>
		<!-- object-fit:cover; -->
		<div class="box1">
			<img class="cover" src="./456.jpg" alt="" />
		</div>
		<!-- object-fit:none; -->
		<div class="box1">
			<img class="none" src="./456.jpg" alt="" />
		</div>
		<!-- object-fit:scale-down; -->
		<div class="box1">
			<img class="scale-down" src="./456.jpg" alt="" />
		</div>
		<h2>我是原图</h2>
		<div class="box1">
			<img src="./456.jpg" alt="" />
		</div>
	</body>
</html>

想要在uni-app中实现 object-fit 效果

uni-app 以及微信小程序、有扩展属性 在image中加上 mode=""

<image src="./1.png" mode="aspectFill"></image>

根据需求使用相对应的属性即可

<think>好的,我现在需要回答用户的问题:“如何在Uni-app中实现跨平台样式适配?”首先,我需要回想Uni-app的样式适配机制,以及常见的跨平台开发中的问题。用户之前遇到了导航栏竖排、字体过大和图片显示问题,所以跨平台样式适配是关键。首先,Uni-app使用rpx单位,但不同平台可能会有不同的计算方式。比如,在微信小程序和H5中,rpx的转换可能更准确,而在某些Android模拟器中可能显示不一致。这时候需要考虑使用条件编译来处理不同平台的样式差异。 接下来,条件编译是Uni-app的重要特性。通过#ifdef和#ifndef来判断平台,从而应用不同的样式或逻辑。例如,导航栏在NVUE和非NVUE环境下的布局方式不同,可能需要不同的CSS属性。 然后,图片适配方面,不同平台对image组件的mode属性支持可能不同。比如,NVUE可能需要使用resize-mode而不是mode,这需要条件编译来处理。此外,图片尺寸可能需要用固定rpx值,避免使用百分比,以保持一致性。字体大小的问题,用户之前遇到Android平台字体过大的情况。这时候可能需要针对Android调整字体大小,使用条件编译设置不同的rpx值,或者使用媒体查询来调整不同屏幕密度下的显示。 布局方面,Flex布局在大多数平台上表现良好,但某些平台可能需要额外的属性,比如display: inline-flex来确保元素正确排列。此外,使用固定高度而不是auto,可以避免在不同平台上的高度计算差异。 另外,考虑使用全局样式和公共CSS变量来统一管理颜色、字体等,减少重复代码,方便适配调整。同时,测试工具和真机调试也是不可或缺的,通过实时预览不同平台的效果,快速定位问题。 可能还需要提到第三方UI框架,如uni-ui,这些框架已经处理了很多跨平台问题,使用它们可以减少自行适配的工作量。同时,响应式设计原则,如使用媒体查询和相对单位,也是适配的关键。总结时,需要分点列出解决方案,包括rpx的使用、条件编译、图片适配、字体控制、Flex布局、全局样式、测试调试等,每个点给出代码示例和解释。然后根据这些内容提出相关问题,如不同平台rpx转换、条件编译语法、UI框架推荐和调试方法。</think>在Uni-app中实现跨平台样式适配主要通过以下方案: ```html <style lang="scss"> /* 通用基础样式 */ .common-box { /* #ifndef APP-NVUE */ display: flex; /* #endif */ padding: 20rpx; } /* 平台特定样式 */ /* #ifdef H5 */ .h5-special { background-color: #f8f8f8; } /* #endif */ /* #ifdef MP-WEIXIN */ .wx-special { transform: scale(0.98); } /* #endif */ </style> <script> export default { computed: { platformClass() { // 通过JS判断平台 return { &#39;ios-class&#39;: uni.getSystemInfoSync().platform === &#39;ios&#39;, &#39;android-class&#39;: uni.getSystemInfoSync().platform === &#39;android&#39; } } } } </script> ``` **跨平台适配方案详解:** 1. **rpx单位体系** ```css .container { width: 750rpx; /* 满屏宽度 */ font-size: 28rpx; /* 基准字号 */ margin: 20rpx auto; /* 自适应间距 */ } ``` - 原理:rpx根据屏幕宽度自适应转换(750rpx=100%宽度) - 注意:Android平台需要额外处理字体缩放 2. **条件编译** ```css /* #ifdef APP-NVUE */ .nvue-style { flex-direction: row; } /* #endif */ /* #ifndef H5 */ .not-h5-style { background-color: #fff; } /* #endif */ ``` - 支持平台:APP-PLUS、H5、MP-WEIXIN等 - 文件后缀:.vue、.css、.js等 3. **图片适配方案** ```html <image :src="imgUrl" mode="aspectFit" /* #ifdef APP-NVUE */ resize-mode="cover" /* #endif */ class="responsive-img" /> ``` ```css .responsive-img { width: 300rpx; height: 200rpx; /* #ifdef MP-ALIPAY */ object-fit: contain; /* #endif */ } ``` 4. **字体适配控制** ```css .font-adapter { /* 基准字号 */ font-size: 28rpx; /* Android特殊处理 */ /* #ifdef APP-ANDROID */ font-size: 26rpx; line-height: 1.5; /* #endif */ /* iOS加粗处理 */ /* #ifdef IOS */ font-weight: 500; /* #endif */ } ``` 5. **Flex布局增强** ```css .flex-safe { display: flex; flex-direction: row; /* 处理微信小程序兼容 */ /* #ifdef MP-WEIXIN */ display: -webkit-flex; /* #endif */ /* NVUE特殊处理 */ /* #ifdef APP-NVUE */ flex-wrap: nowrap; /* #endif */ } ``` 6. **全局样式管理** ```scss // 创建全局变量文件variables.scss $primary-color: #007AFF; $android-font: 26rpx; $ios-font: 28rpx; // 在页面中引用 <style lang="scss"> @import &#39;@/common/variables.scss&#39;; .text-primary { color: $primary-color; /* #ifdef APP-ANDROID */ font-size: $android-font; /* #endif */ /* #ifdef IOS */ font-size: $ios-font; /* #endif */ } </style> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值