响应式页面实现

article/2025/10/12 19:08:31

响应式网页设计最初是由 Ethan Marcotte 提出的一个概念:为什么一定要为每个用户群各自打造一套设计和开发方案?Web设计应该做到根据不同设备环境自动响应及调整。当然响应式Web设计不仅仅是关于屏幕分辨率自适应以及自动缩放的图片等等,它更像是一种对于设计的全新思维模式;我们应当向下兼容、移动优先。

首先我们应该遵循移动优先原则,交互&设计应以移动端为主,PC则作为移动端的一个扩展;一个页面需要兼容不同终端,那么有两个关键点是我们需要去做到响应式的:

1. 响应式布局
2. 响应式内容(图片、多媒体)

一、响应式布局

如我们需要兼容不同屏幕分辨率、清晰度以及屏幕定向方式竖屏(portrait)、横屏(landscape),怎样才能做到让一种设计方案满足所有情况?

柵格布局

那么我们的布局应该是一种弹性的栅格布局,不同尺寸下弹性适应,如以下页面中各模块在不同尺寸下的位置:
柵格布局

Meta标签定义

使用 viewport meta 标签在手机浏览器上控制布局

<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />

通过快捷方式打开时全屏显示

<meta name="apple-mobile-web-app-capable" content="yes" />

隐藏状态栏

<meta name="apple-mobile-web-app-status-bar-style" content="blank" />

iPhone会将看起来像电话号码的数字添加电话连接,应当关闭

<meta name="format-detection" content="telephone=no" />

使用 Media Queries 适配对应样式

常用于布局的CSS Media Queries有以下几种

设备类型(media type):

  • all所有设备
  • screen 电脑显示器
  • print打印用纸或打印预览视图
  • tv电视机类型的设备
  • speech语意和音频盒成器
  • braille盲人用点字法触觉回馈设备
  • embossed盲文打印机
  • projection各种投影设备
  • tty使用固定密度字母栅格的媒介,比如电传打字机和终端

设备特性(media feature):

  • width浏览器宽度
  • height浏览器高度
  • device-width设备屏幕分辨率的宽度值
  • device-height设备屏幕分辨率的高度值
  • orientation浏览器窗口的方向纵向还是横向,当窗口的高度值大于等于宽度时该特性值为portrait,否则为landscape
  • aspect-ratio比例值,浏览器的纵横比
  • device-aspect-ratio比例值,屏幕的纵横比

代码示例:

/* for 240 px width screen */
@media only screen and (max-device-width:240px){selector{ ... }
}
/* for 320px width screen */
@media only screen and (min-device-width:241px) and (max-device-width:320px){selector{ ... }
}
/* for 480 px width screen */
@media only screen (min-device-width:321px)and (max-device-width:480px){selector{ ... }
}

二、响应式图片

处理原理:浏览器获取用户终端的屏幕尺寸、分辨率逻辑处理后输出适应的图片,如屏幕分辨率320*480,那么我们匹配给它的是宽度应小于320px的图片。如果终端屏幕的DPI(device pixels)DPI详解值很高,也就是高清屏,那么我们就得输出2倍分辨率的图形(宽:640px);以保证在高清屏下图形的清晰度。各种移动终端的屏幕参数可通过http://screensiz.es/phone查询。

解决方案:其实W3C已经有一个用于响应式图形的草案:新定义标签<picture>,因为它还只是草案,目前还没有支持的浏览器,期待在不久的未来我们能用上。虽然目前不支持,但我们还是来了解下,为之后的内容做个铺垫。

<picture>是一个图形element,内容由多个源图组成,并由CSS Media Queries来适配出合理图形,代码规范如下:

<picture width="500" height="500"><source media="(min-width: 640px)" srcset="large-1.jpg 1x, large-2.jpg 2x"><source media="(min-width: 320px)" srcset="med-1.jpg 1x, med-2.jpg 2x"><source srcset="small-1.jpg 1x, small-2.jpg 2x"><img src="small-1.jpg" alt=""><p>Accessible text</p><!-- Fallback content--><noscript><img src="external/imgs/small.jpg" alt="Team photo"></noscript>
</picture>

source: 一个图片源;media: 媒体查询,用于适配屏幕尺寸;srcset: 图片链接,1x适应普通屏,2x适应高清屏;<noscript/>: 当浏览器不支持脚本时的一个替代方案;<img/>: 初始图片;另外还有一个无障碍文本,类似<img/>的alt属性。

<picture>目前还不支持,但它的原理我们是可借鉴的,所以就诞生了一个用于图片响应式处理的类库Picturefill

<span data-picture data-alt="图片描述文本"><span data-src="small.jpg"></span><span data-src="medium.jpg"     data-media="(min-width: 400px)"></span><span data-src="large.jpg"      data-media="(min-width: 800px)"></span><span data-src="extralarge.jpg" data-media="(min-width: 1000px)"></span><!-- 浏览器不支持JS时的备用方案. --><noscript><img src="external/imgs/small.jpg" alt="图片描述文本"></noscript>
</span>

其原理就是JS获取Source的源以及CSS Media Queries规则,输出适应图片, 逻辑细节这里不再解析,感兴趣的可查看其JS代码,逻辑不是很复杂,也可以自己封装一个类库,以适用于自身产品,例如图片加载失败的替代方案。

http://www.5icool.org/a/201309/a2517.html


http://chatgpt.dhexx.cn/article/bcfcHZcd.shtml

相关文章

移动端页面布局(响应式布局)以及meta标签的设置

响应式网站设计 什么是响应式布局? 1、服务器根据不同的浏览器用户端,为用户呈现不同的页面效果。 2、可以让一个网站兼容不同分辨率的设备,给用户更好的视觉使用体验。 3、移动互联网催生了响应式布局的诞生。 响应式设计优缺点 优点: 解决了设备之间的差异化展示,让不同的…

移动端基础及响应式布局

目录 1.移动端概述和hybird模式 2.响应式布局基础 3.响应式布局之流式布局 4.做移动端项目之前的准备 5.响应式布局demo 6.rem响应式布局 7.swiper的使用和轮播图 8.综合案例-微信场景应用 1.移动端概述和hybird模式 移动端&#xff1a;运行在移动设备上的产品 产品…

linux 透明图片,FreeImage 生成带透明通道的GIF

FreeImage 生成带透明通道的GIF 主要方法&#xff1a; 加载图像及读取参数 FreeImage_Load FreeImage_GetWidth FreeImage_GetHeight FreeImage_Allocate FreeImage_GetPixelColor FreeImage_SetPixelColor 保存GIF FreeImage_OpenMultiBitmap FreeImage_SetMetadata FreeImage…

freeimage转到cvmat 单通道图像转到3通道[freeimage][cvmat]

0 结果 1 代码 将freeImage转为cv::mat&#xff0c;代码如下&#xff1a; #include <FreeImage.h> #include <opencv2\opencv.hpp> using namespace cv;// #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable : 4996) void FI2MAT(FIBITMAP* src, Mat&…

linux系统下替换图片,Linux(ubuntu系统)下使用FreeImage库

Linux(ubuntu系统)下使用FreeImage库 Linux(ubuntu系统)下使用FreeImage库 最近在搞一个图像处理的项目,需要用到FreeImage,之前在Windows下用过,很简单,因为FreeImage官网提供了可供使用的静态库动态库,直接包含就行了。现在需要在Linux平台下使用,发现官网并没有提供直…

计算机中缺失freeimage.dll,修复freeimage.dll

freeimage.dll是一款如果丢失会造成系统无法造成运行等问题的重要文件。今天久友下载站小编教大家一个修复freeimage.dll文件的方法&#xff0c;来久友下载站下载 freeimage.dll进行安装修复即可。Freeimage.dll是程序访问的组合文件&#xff0c;支持方便的程序打开&#xff0c…

Linux FreeImage安装编译

1.下载FreeImage 安照包 wget http://downloads.sourceforge.net/freeimage/FreeImage3170.zip #解压 unzip FreeImage3170.zip -d freeImage 2.对安装包进行编译 cd freeImagesudo make 类型转换错误解决&#xff1a; Source/LibRawLite/./internal/dcraw_common.cpp: 在…

c语言freeimage库文件,FreeImage使用方法amp;FreeImage Tutorial

前言 四大图像库&#xff1a;OpenCV&#xff1a;功能十分的强大&#xff0c;而且支持目前先进的图像处理技术&#xff0c;体系十分完善&#xff0c;操作手册很详细&#xff0c;手册首先给大家补计算机视觉的知识&#xff0c;几乎涵盖了近10年内的主流算法&#xff1b; http://s…

windows下FreeImage编译

windows下FreeImage编译 FreeImage下载 FreeImage下载地址 点击左边的“Download” 选择 “Download FreeImage 3.18.0 [WIN32/WIN64]” vs2019打开工程 下载后解压&#xff0c;直接打开&#xff1a;FreeImage.2017.sln 生成dll、lib文件 接下来编译C Wraper的 测试工程…

Qt Creator配置FreeImage库

第零步&#xff1a;前言 根据官网介绍&#xff1a; FreeImage 是一个开源库项目&#xff0c;面向希望支持当今多媒体应用程序所需的流行图形图像格式&#xff08;如 PNG&#xff0c;BMP&#xff0c;JPEG&#xff0c;TIFF 和其他格式&#xff09;的开发人员。FreeImage 易于使用…

FreeImage

freeimage.lib下载地址&#xff1a; http://freeimage.sourceforge.net/ FreeImage is an Open Source library project for developers who would like to support popular graphics image formats like PNG, BMP, JPEG, TIFF and others as needed by todays multimedia ap…

FreeImage库的配置及部分使用(windows)

1、首先下载FreeImage库&#xff0c;http://freeimage.sourceforge.net/download.html&#xff0c;下载如下 2、解压后&#xff0c;如下图所示&#xff1a; 打开2013sln&#xff0c;编译FreeImageLib这个项目&#xff08;设为启动项&#xff09;&#xff0c;根据debug/release版…

void *的使用

void * 为 “不确定类型指针”。 void *不可以解引用 &#xff08;1&#xff09;void *可以接受任何类型的赋值&#xff1a; 任何类型的指针都可以直接赋值给void *型指针&#xff0c;无需进行强制类型转换&#xff0c;相当于void *包含了其他类型的指针。 &#xff08;2&a…

C语言中void的高级应用

C语言中void的高级应用 C语言中的void关键字&#xff0c;void 表示为“无”、“空”、“没有”的意思。所以void是不能用来定义变量的&#xff0c;因为变量是需要固定的空间的 //定时时&#xff0c;编译不通过 void ch a; void a 10;一、void的常用场景 1.1 函数的参数 v…

【C语言】void 和 void* 类型

一. void 类型 1. 为何不能定义 void 类型的变量 为什么不能定义 void 类型的变量&#xff1f;因为它是空类型&#xff0c;不能够为变量提供空间吗&#xff1f; 定义变量的本质是开辟空间&#xff0c;我们用 sizeof 来计算 void 类型的大小&#xff1a; 在vs2017下&#xf…

函数类型——void(无类型函数)

void属于函数类型中的无类型函数之对应的还有实型&#xff08;float,double&#xff09;&#xff0c;整型&#xff08;int&#xff09;&#xff0c;布尔型&#xff08;bool&#xff09;和字符型&#xff08;char&#xff09;。 在介绍void之前先介绍“返回值”&#xff1a; 就…

C语言中的void*是什么?

目录 1.void *是什么2.void*的解引用3.void*类型的应用场景 1.void *是什么 我们之前学过许多类型的指针变量&#xff0c;如整形指针&#xff0c;字符指针&#xff0c;甚至数组指针&#xff0c;函数指针等。 int a 10; int *pa &a;//整形指针pa接受一个整形变量a的地址…

C语言中的void类型函数

最重要的一点是void类型函数里不能出现return语句 &#xff0c;因为与常见的int double float char等数据类型不同&#xff0c;void是一个空类型&#xff0c;也就是说函数没有返回值&#xff0c;所以也不给主函数提供&#xff08;或返回&#xff09;任何信息 一般声明变量时不…

【C语言】如何理解【void(*)(void)】

1.理解【void(*)(void)】 引用阅读 如何理解【void(*)(void)】 void(*)(void) --表示一个返回值为void&#xff0c;没有参数的函数指针 (void(*)(void))--表示【将func这个函数强转成返回值为void&#xff0c;没有参数的函数】的类型转换 测试sizeof(void(*)(void)) #inc…

C语言中的void

文章目录 一.void概要二.void应用场景2.1void能定义变量吗&#xff1f;2.2void这个类型有大小吗&#xff1f;2.3void*能定义变量吗&#xff1f;2.4void*使用2.5void*能不能进行对应的指针运算&#xff1f;2.6void和函数返回值2.7函数void类型的参数 一.void概要 void就是空的意…