测试该知道的二三事:浅谈响应式网页设计

news2024/10/7 14:26:54

1.起因

最近几天正巧在帮朋友的公司团队做质量保障体系的培训,在此期间与几个测试人员闲聊,正是其中的一件事让我对今天的话题提起了兴趣:朋友公司里的研发团队招了一个应届毕业生,做了半年之后接了某个web项目的其中一个拓展功能页的开发任务,原本想想熟悉业务也好一阵子了,应该没什么问题。谁曾想提测的那天,测试团队用手机访问将该web页面的时候直接惊呆了,页面的内容竟然无法适应手机的屏幕尺寸,导致用户需要水平滚动或缩放界面才可以看全页面上的内容。结果自然可想而知,该产品直接被打回重造了。

2.响应式网页设计

RWD,相信这个字眼对于广大的前端开发者来说早已是耳熟能详的了,它也就是我们今天要介绍的主角,响应式网页设计(ResponsiveWebDesign)。简单来说就是我们日常生活中会使用各类设备(手机、平板、笔记本电脑、台式电脑)来进行网页的浏览,那么RWD就是可以让网页能够根据设备的屏幕大小和特征来自动适应和呈现最佳的布局和样式的一种设计方法。

其实不难想象,日常我们使用电脑或大屏设备在访问一些网站的时候有时页面布局和界面元素显示都挺正常,一旦切换到移动端或小屏设备上查看时,页面的布局可能会变得混乱,文字变得难以阅读,按钮变得难以点击。这种软件的用户体验可以说是十分的糟糕了,说的再严重一点,站在开发商的角度,你的用户就有可能因为软件界面布局的用户体验差而直接放弃你的产品。所以各自的web产品如何提供一个无论在什么设备上都能良好呈现和使用的用户体验的效果,自然就成了前端软件开发的重要考虑内容之一。

同样的,作为一个测试人员,我们在进行日常的测试活动的过程中也一定会碰见各式各样的测试设备,这些设备的型号都是由产品或业务人员进行准确的数据收集而得到的。那么针对这样的一个测试业务状况,我们一定会展开对应的测试互动(兼容性测试)。而在此类的测试活动中,我们不得不提的另一个重要概念就是web产品中的RWD,接下来就说一说在RWD中一些开发熟知但测试却不一定知道的二三事。

3.媒体查询

在承载web页面的各类设备中,前端开发人员是可以利用CSS中的一种技术来取得设备的特征和属性的,而这种技术就叫做媒体查询,顾名思义,利用媒体查询我们的开发人员就可以获取设备的屏幕分辨率、设备类型、设备方向等特定的信息。正是利用这些特定的查询信息,开发人员就可以将它们进行组合,从而编写针对不同设备特征和属性的样式规则,以实现响应式网页设计和适应不同设备的布局和样式需求。

接下来我用一段简易的html代码来为大家展示如何实现媒体查询:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Responsive Web Design Example</title>
  <style>
    /* 媒体查询针对移动设备 */
    @media screen and (max-width: 414px) {
      /* 在屏幕宽度小于或等于414px时应用的样式 */
      body {
        background-color: red;
      }
    }

    /* 媒体查询针对2K分辨率屏幕 */
    @media screen and (min-width: 2560px) {
      /* 在屏幕宽度大于或等于2560px时应用的样式 */
      body {
        background-color: blue;
      }
    }
</style>
</head>
</html>

以上的代码就是在页面的<style>标签内针对设备的屏幕宽度进行判断,从而达到面向不同屏幕大小的设备时,可以有针对性的展示对应的背景颜色。当然真正的业务代码不会如此的简单,但作为测试你需要的就是掌握其中的实现原理,在日后接触到前端产品代码的时候知道如何去找到你所需要的代码。

除了代码中的宽度之外,还可以很多的特定信息可以进行设备的特定与区别,比如设备高度、方向、视口宽度和高度、分辨率、像素比等等。这些条件可以根据业务需要进行随意组合并进行条件判断。

4.弹性布局

弹性布局则是另一种在RWD中较为常用的CSS设计方式,试想一下,你有一行水平放置的神奇魔方,其中每个魔方都可以自动调整其宽度和高度以适应可用空间。这就是弹性布局所能做的事情,开发人员可以通过设置父元素的样式属性来创建弹性容器,而子元素则成为弹性项目。弹性容器负责定义子元素的布局行为和对齐方式。

话不多说,上代码。

.container {
  display: flex; /* 设置为弹性容器 */
  justify-content: center; /* 水平方向上居中对齐子元素 */
  align-items: center; /* 垂直方向上居中对齐子元素 */
}

.item {
  flex: 1; /* 子元素的伸缩比例,自动调整宽度和高度 */
}

学过CSS的测试同学看了自然不难,其实代码的目的就像上面博主介绍的那样,我们只是创建了一个神奇的魔方,根据可用的宽高来进行对应的像素伸缩,以达到自适应的效果。

5.文字和字体

在RWD中,文字和字体也同样作为一个重要的因素,需要开发人员在编码过程中去着重考虑。要像让产品提供良好的阅读体验,那就必须关注各类主流用户使用的设备的对应信息,并在CSS中进行对应的字体处理。比较常见的作法是使用相对单位来设置字体大小,例如使用百分比或em单位。通过使用相对单位,文字的大小会根据父元素的大小进行调整,从而实现适应不同屏幕的效果。但这里博主还是推荐使用媒体查询的方法,通过定义多个媒体查询规则,并在不同的屏幕尺寸下设置不同的字体大小,我们可以确保文字在各种设备上都能够清晰可读。

代码实现:

body {
  font-size: 16px;
}

/* 在小屏幕下设置较小的字体 */
@media screen and (max-resolution: 480dpi) {
  body {
    font-size: 14px;
  }
}

/* 在高分辨率屏幕下设置较大的字体 */
@media screen and (min-resolution: 192dpi) {
  body {
    font-size: 18px;
  }
}

这里使用了min-resolution和max-resolution属性,这里是利用了分辨率来继续判断,低于480dpi的分辨率设备将会把字体设置为14px,而设备的分辨率高于192dpi时,字体就设置为18px。

6.图片

有了文字的对应的处理,那么怎么可以少了图片呢?针对RWD中的图片处理,开发人员也会针对不同的业务场景来进行对应的操作,但不外乎下面说的几种手段。第一,就是一般web产品中的图片都会进行一定程度上的压缩,这个在后端收到上传图片的时候基本已经做了,无论是产品配置的还是用户上传到毕竟都会考虑到服务器的资源压力,都会进行对应的压缩。那针对前端开发的角度,他们就会使用第二和第三种手段,那就是图片格式的选择和响应式的图片加载方式。先说说格式,对于web产品自身的图片格式,通常会选择的现在比较流行的webp格式,它可以比较兼顾图片压缩率和图片质量,另外比较多的就是jpg和png两个格式,但相对webp来说还是webp更有优势一点。至于图片响应式加载,这里也就不用代码演示了,无非就是使用CSS的background-image属性或HTML的<picture>标签来实现响应式加载。

接下来说说第四种加载图片的方法,图片懒加载,相信大家对于懒加载这个词应该不陌生了吧,图片懒加载其实就是一种图片延迟加载的方式,说直白点就是用户没有将页面滚动到对应的视线区域之前,那区域的对应图片都不会加载。也正是通过这样的方式,web页面可以提高一些对应的加载性能。

关于图片懒加载的实现逻辑,就让我们来看下如下的代码:

<img class="lazy" data-src="path/to/image.jpg" src="path/to/placeholder.jpg" alt="Image">

这里我们先给需要进行懒加载的图片在html中进行一个占位,一般来说会使用src来进行占位。

这里页面上需要用户进行滚动操作,所以我们利用js来实现检测页面滚动事件,当图片元素进入视线区域时,将其data-src属性的值设置为src属性,从而触发图片的加载。

window.addEventListener('scroll', function() {
  var lazyImages = document.querySelectorAll('.lazy');
  
  for (var i = 0; i < lazyImages.length; i++) {
    if (isElementInViewport(lazyImages[i])) {
      lazyImages[i].src = lazyImages[i].getAttribute('data-src');
      lazyImages[i].classList.remove('lazy');
    }
  }
});

function isElementInViewport(element) {
  var rect = element.getBoundingClientRect();
  
  return (
    rect.top >= 0 &&
    rect.left >= 0 &&
    rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
    rect.right <= (window.innerWidth || document.documentElement.clientWidth)
  );
}

上面我们通过遍历所有带有.lazy类名的图片元素,判断图片是否进入了视线区域,如果进入了就出发图片加载。当然对于测试人员来说,仍然是只需要知道其中的原理即可。

第五种则是CSSsprites,也被称为CSS精灵图,它是一种将多个小图标或小图片合并到一张大图中的技术,开发者通过CSS中的background-position来显示特定位置的图片,这样做的好处就是可以降低网络请求从而提升页面的加载性能。

其实CSS精灵图的实现也是比较简单的。说的直白点就是创建一张包含很多小图的大图,并利用CSS的背景定位来显示特定位置的图像。通过这样的方法来避免一次性加载一整张大图。

.icon {
  background-image: url(path/to/test.png);
  width: 24px;
  height: 24px;
}
.icon.icon1 {
  background-position: 0 0; /* 第一个小图片的位置 */
}

.icon.icon2 {
  background-position: -24px 0; /* 第二个小图片的位置 */
}
<span class="icon icon1"></span>
<span class="icon icon2"></span>

就像上面的代码所展示的,我们创建完大图后利用background-position来定位位置,最后在html中使用对应的类名来应用相应的样式。

7.后话

其实上面所说的一些因素只是RWD中的一部分,其他的内容(菜单、无障碍性等等)今天就不在这里过多的介绍了,作为测试人员来说RWD作为兼容性测试中一个不可或缺的一环,我们在日常的工作中应该不断的对其进行了解并在实战中加以练习和升华,光掌握以上的这些是远远不够的,这篇也仅仅只是博主一时兴起的牢骚话而已,如果可以给大家起到一个抛砖引玉的作用,已是万幸。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

质检工具(FindBugs、CheckStyle、Junit、Jmeter、Apifox)

1、Findbugs IDEA软件中可以装该插件,2018版本以前主要搜索FindBugs-IDEA 、2018版本以后主要搜索 SpotBugs。 1.1、FindBugs-IDEA安装及使用流程: 1.2、SpotBugs安装及使用流程: 2、Checkstyle IDEA软件中可以装该插件,所有版本的插件一致:CheckStyle 2.1、安装流程…

【C# 基础精讲】为什么选择C# ?

C#&#xff08;C Sharp&#xff09;是由微软开发的一种通用、面向对象的编程语言。它最初于2000年发布&#xff0c;自那时以来逐渐成为开发者的首选之一。C#的设计目标是提供一种简单、现代、可靠且安全的编程语言&#xff0c;使开发者能够轻松构建各种类型的应用程序。 为什么…

Apache Doris 助力中国联通万亿日志数据分析提速 10 倍

本文导读&#xff1a; 在数据安全管理体系的背后&#xff0c;离不开对安全日志数据的存储与分析。以终端设备为例&#xff0c;中国联通每天会产生百亿级别的日志数据&#xff0c;对于保障网络安全、提高系统稳定性和可靠性具有至关重要的作用。目前&#xff0c;Apache Doris 在…

解决树莓派“由于没有公钥,无法验证下列签名“

目录 简介&#xff1a;在换完国内源后&#xff0c;树莓派尝试更新同步/etc/apt/sources.list和/etc/apt/sources.list.d中列出的软件源的软件包版本也就是&#xff08;apt-get update&#xff09;和更新已安装的所有或者指定软件包&#xff08;也即是apt-get upgrade&#xff0…

java+springboot摄影作品竞赛报名系统 微信小程序--论文

随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff0c;网络化和电子化。网上管理&#xff0c;它将是直接管理摄影竞赛小程序的最新形式。本小程序是以构建摄影竞赛为目标&#xff0c;使用java技术制作&#xff0c;…

xLua学习

xLua教程&#xff1a;https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/XLua%E6%95%99%E7%A8%8B.md xLua配置&#xff1a;https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/configure.md FAQ&#xff1a;https://github.com/Tencent/xLua/blob/maste…

【Leetcode】反转链表||基础题||击败100%(头插法)

step by step. 题目&#xff1a; 反转链表&#xff0c;基础题了&#xff0c;要很熟练的境界—— 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示…

awk筛选给定时间范围内的日志

目录标题 筛选日志时间示例编写1.awk文件准备一个需要筛选时间的日志执行awk命令 筛选日志时间 grep/sed/awk用正则去筛选日志时&#xff0c;如果要精确到小时、分钟、秒&#xff0c;则非常难以实现。 但是awk提供了mktime()函数&#xff0c;它可以将时间转换成epoch时间值。 …

opencv基础43- 图像梯度-Laplacian 算子( cv2.Laplacian)边缘检测基础

Laplacian算子是一种图像处理中常用的边缘检测算子&#xff0c;它用于检测图像中的边缘和轮廓。该算子计算图像中每个像素点的二阶导数&#xff0c;从而突出图像中灰度值变化较大的区域&#xff0c;这些区域通常对应图像的边缘或者轮廓。 Laplacian&#xff08;拉普拉斯&#x…

【Spring Cloud 七】Sleuth+Zipkin 链路追踪

Sleuth链路追踪 系列博客背景一、 什么是链路追踪二、为什么要有链路追踪三、Sleuth与ZipkinSleuthZipkinSleuth和Zipkin的关系是什么&#xff1f; 四、使用Sleuthzipkin进行链路追踪4.1下载zipkin4.2案例说明项目代码服务提供者pom文件yml配置文件项目启动类controller 抽离出…

Android network — iptables四表五链

Android network — iptables四表五链 1. iptables简介2. iptables的四表五链2.1 iptables流程图2.2 四表2.3 五链2.4 iptables的常见情况 3. NAT工作原理3.1 BNAT3.2 NAPT 4. iptables配置 本文主要介绍了iptables的基本工作原理和四表五链等基本概念以及NAT的工作原理。 1. i…

MyBatis-Flex 一个优雅的 MyBatis 增强框架

文章目录 网站MyBatis-Flex 是什么特征1、很轻量2、只增强3、高性能4、更灵动 快速开始hello world&#xff08;原生&#xff09;QueryWrapper 示例select *select columnsselect functionswherewhere 动态条件 1where 动态条件 2where 自动忽略 null 值where selectexists, no…

AlmaLinux 9 安装 Go 1.20

AlmaLinux 9 安装 Golang 1.20 1. 下载 go 安装包2. 安装 go3. 配置环境变量4. 确认 go 版本 1. 下载 go 安装包 访问 https://go.dev/dl/&#xff0c;下载你想安装的版本&#xff0c;比如 go1.20.7.linux-amd64.tar.gz&#xff0c; 2. 安装 go (可选)删除旧版本&#xff0c;…

检查网站是HTTP那种协议与获取域名的ipv6地址

前言 最近在做HTTPS的应用&#xff0c;可能需要使用ipv6的地址做SLB&#xff0c;但是怎么检查配置正确&#xff0c;总不能每次都看日志吧&#xff0c;实际上客户端也很容易查看&#xff0c;总结工作经验。 检查HTTP协议版本 笔者想到了使用浏览器方式&#xff0c;或者抓包&a…

div 按钮和 button 按钮

我们通常可以通过 HTML 元素结合需求的样式作为按钮触发一些事件&#xff0c;但原始 button 标签其实内置了许多功能&#xff0c;并且可以通过一些方法&#xff0c;一键清楚默认样式&#xff0c;从而定制需求样式。 首先是原始的 button 标签和 div 标签 作为按钮时的效果展示…

【N32L40X】学习笔记14-在RT-thread系统中读取eeprom数据

eeprom 说明 eeprom介绍 AT24C01A&#xff0c;1K串行EEPROM&#xff1a;内部组织16页8字节&#xff0c;1K需要一个7位数据字地址进行随机字寻址。AT24C02,2K串行EEPROM&#xff1a;内部组织32页8字节&#xff0c;2K需要一个8位数据字地址进行随机字寻址。AT24C04,4K串行EEPRO…

JDK动态代理的原理解析、代码实现

代理就像是&#xff1a;买家(客户端)——销售(代理对象)——工厂(目标) 买家不用直接去工厂买&#xff0c;而是直接通过销售就可以购买到&#xff0c;假设工厂生产的是杯子&#xff0c;那么工厂只需要提供杯子&#xff0c;而销售在不改变杯子的生产过程的情况下对杯子进行包装设…

C语言单链表OJ题(较难)

一、链表分割 牛客网链接 题目描述&#xff1a; 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头指针。 思路&#xff1a;…

idea如何开启远程调试

一&#xff1a;打包需要部署的jar包上传到服务器 二&#xff1a;服务器&#xff08;开启远程调试接口&#xff09; nohup java -jar -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendn,address8453 xxx.jar > xxx.log 2>&1 & 三&#xff1a; idea配置rem…

【Linux】Linux下的一些系统文件详细介绍总结

一&#xff0c;~/.bashrc文件 简介 .bashrc 文件是 Linux 系统中的一个脚本文件&#xff0c;其主要作用是在用户登录 Shell 时自动执行一系列的命令和设置环境变量。它通常位于用户的家目录下&#xff0c;文件名为 ".bashrc"&#xff0c;是每个用户都可以修改的个性化…