H5页面布局之图片液态化(自适应)处理简述

简介: H5页面布局之图片液态化(自适应)处理简述

写在前面

我们都知道,页面的布局分为静态布局和响应式布局,为什么响应式布局很火呢?因为在过去我们在处理不用终端之间的页面布局问题的时候,都是使用好几套代码来实现,举例子来说,假设我们做一个app或者web应用,那么我们必须要面对的一个问题是用户使用什么终端访问?如果是PC,我们需要用960PX-1204PX的布局方式来写,那么如果用户使用ipad呢?768-1024px,使用手机呢?再分的细一点,如果用户使用的是ipadmini还是pro还是air呢?当这些问题通通出现的时候,我们会发现,我们之前解决问题的办法已经达不到现实的要求了,怎么办呢?响应式的布局就出现了!那么我们今天其实不是要讲怎么实现响应式的布局,等到我总结完毕的时候,我会写一个详细的教程出来,今天我们简单的讲一下响应式布局中的图片处理问题。

示意图

我们拿一张比较大的图片和一张比较小的图片来做例子,首先是一张比较大的图片,我用我公司地址的一张俯瞰图(我在杭州滨江,喜欢交朋友,距离近的可以找我玩,我请客,哈哈!):

再用一张比较小的图片:

我先说一下我们平常怎么处理的

我们一般写一个div或者是别的元素,准备将一张图片作为背景图的时候,我们会这样写:

css源码:

.test1{
      height: 40rem;
      width: 30rem;
      background-image: url(img/slide3.png);
  }

H5源码:

<div class="test1"></div>

对吧,这是最普遍的一种做法, 不做任何的处理,效果是怎么样的呢?    

图片变形,当然还有很多的时候图片会出现失真的情况,所以基于这些问题,我们怎么简单的处理一下:

首先我们简单的做几个例子:实现一个这样的效果:

手机端实现这样的效果:

ok,实现这样的其实就是基本可以满足我们的需求,可以根据自己的定义的大小来铺满同时图片不变形,我们看源码:

css源码:

div img{max-width: 100%;height: auto;}

H5源码:

<div id="" style="width: 5rem;height: 100%;">
      <img src="img/slide3.png" >
    </div>
    <div id="" style="width: 20rem;height: 100%;">
      <img src="img/slide3.png" >
    </div>
    <div id="" style="width: 35rem;height: 100%;">
      <img src="img/slide3.png" >
    </div>
    <div id="" style="width: 40rem;height: 40rem;">
      <img src="img/slide3.png" >
    </div>

有人看过源码会说了,这不是耍人吗?其实不是的,最简单的适应就是这样的,这也是最简单的一种处理办法,有人说了,有的时候我们需要的是将一个logo铺满是不是也是可以的,logo的处理可以这样:

假设这是一个logo:

那么实现这种效果其实也很简单:

css源码:

.logo{ display:block;
        width:100%;
        height:40px;
        text-indent:55rem;
        background-image: url(img/slide3.png);
        background-repeat:no-repeat;
        background-size:100% 100%;
        }

H5源码

<div class="logo" style="width: 7rem;"></div>

这里简单的解释一下:

background-size是css3的新属性,用于设置背景图片的大小,有两个可选值,第一个值用于指定背景图的width,第2个值用于指定背景图的height,如果只指定一个值,那么另一个值默认为auto。
background-size:cover; 等比扩展图片来填满元素
background-size:contain; 等比缩小图片来适应元素的尺寸

注意事项

下面讲一下用的时候需要注意的几个地方:

第一:

如果您的代码是这样的:

<div id="" style="width: 5rem;height: 4rem;">
      <img src="img/slide3.png" >
    </div>
    <div id="" style="width: 20rem;height: 15rem;">
      <img src="img/slide3.png" >
    </div>
    <div id="" style="width: 35rem;height: 20rem;">
      <img src="img/slide3.png" >
    </div>
    <div id="" style="width: 40rem;height: 40rem;">
      <img src="img/slide3.png" >
    </div>

效果会是这样:

可以看出来和之前的区别是中间的空间变得很大,这是为什么呢?因为我们使用具体的数值+rem的时候,他会将布局的空间展示为那么大,那么我们的style里面已经设置好的是height为auto,什么意思呢?就是css为什么保证图片不会变形,还要不失真,只能将图片等比缩放,那么等比缩放的时候就意味着有一些地方是不会出现图片的,所以只能是空白来填充!那么怎么解决这样的问题呢?我们可以不设置高度,或者设置的时候将高度用百分比表示就行了!

第二:

我们使用比较小的图片的时候,我们设置一个比较大的宽度的时候,图片是没办法完全填充的,举个例子:

<div id="" style="width: 5rem;height: 100%;">
      <img src="img/slide1.jpg" >
    </div>
    <div id="" style="width: 20rem;height: 100%;">
      <img src="img/slide1.jpg" >
    </div>
    <div id="" style="width: 35rem;height: 100%;">
      <img src="img/slide1.jpg" >
    </div>
    <div id="" style="width: 70rem;height: 40rem;">
      <img src="img/slide1.jpg" >
    </div>

效果:

这是之前的比较小的图片,认真的可以发现我们最后一张是和之前的一张的宽度一样的,那么其实我们设置的时候不是的,我们写的是70rem的宽度,为什么会出现这样的情况呢?是因为我们在设置一个比原图宽度还要宽的数值的时候,图片会出现失真的情况,为了避免这样的情况出现,所以他会显示原图的大小,而不会变化的很大!

最后关于rem的使用我们可以看一下这个人的博客:

怎么使用rem

关于不同终端的尺寸问题,可以查看这个网址:

不同终端屏幕尺寸展示

ok,今天写的比较仓促,写的可能有一些不是很清晰,有什么不明白的可以直接博主简介那里QQ联系我,或者直接扫我的名片联系我,能帮的我尽力帮!共同进步!

谢谢阅读

相关文章
|
机器学习/深度学习 算法
【Matlab智能算法】PSO优化(双隐层)BP神经网络算法
【Matlab智能算法】PSO优化(双隐层)BP神经网络算法
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
12211 1
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
算法 前端开发 rax
互动游戏之我养的鸡要旅行
游戏的开发区别于传统前端,本文记录了作者慢慢摸索该项目过程中遇到的问题和解决的思路。
|
文字识别 算法 API
阿里云文档解析(大模型版)优化
阿里云文档解析(大模型版
|
存储 算法 NoSQL
微服务和分布式的区别
微服务和分布式的区别
1611 0
|
存储 中间件 程序员
一文晓得SaaS、IaaS和 PaaS 是什么,三者的区别是?
一文晓得SaaS、IaaS和 PaaS 是什么,三者的区别是?
8065 0
|
Android开发 Java 数据安全/隐私保护
「移动端」Android平台签名证书(.keystore)生成指南
发布Android APK需签名证书,步骤如下: 1. 安装JRE,如[JRE8](https://www.oracle.com/technetwork/java/javase/downloads/index.html),并添加到环境变量。 2. 使用`keytool -genkey`命令生成证书,例如: ``` keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore ``` 输入相关个人信息及密码。
2154 0
「移动端」Android平台签名证书(.keystore)生成指南
|
XML 存储 关系型数据库
10分钟手把手教你用Android手撸一个简易的个人记账App(一)
接下来就来讲解,如何从0到1实现一个简易的个人记账系统。
10分钟手把手教你用Android手撸一个简易的个人记账App(一)
|
存储 缓存 算法
操作系统中的内存管理机制探究
【7月更文挑战第13天】本文深入探讨了操作系统中至关重要的内存管理机制,揭示了其对系统性能与稳定性的影响。通过分析现代操作系统中内存管理的基本原理、关键技术以及面临的挑战,文章提供了对内存分配策略、虚拟内存技术和缓存管理等核心概念的深度解析。进一步地,文章讨论了内存泄漏和碎片化问题,提出了相应的解决策略,旨在为读者提供操作系统内存管理的全面视角,并指出未来可能的发展趋势。