响应式设计和CSS提高性能的方法

2023-05-16

一、响应式设计

1、是什么?

是一种网络页面设计布局,页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整。

2、常见特点

(1)同时适配PC+平板+手机等

(2)标签导航在接近手持终端设备时改变为经典的抽屉式导航

(3)网站的布局会根据视口来调整模块的大小和位置

3、实现方式

基本原理:通过媒体查询检测不同的设备屏幕尺寸做处理,为了处理移动端,页面头部必须有meta声明viewport

<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
width=device-width:指自适应手机屏幕的尺寸宽度
maximum-scale:是缩放比例的最大值
initial-scale:是缩放的初始化
user-scalable:是用户的可以缩放的操作

实现响应式布局的方式有如下:

(1)媒体查询

当视口在375px~600px之间,设置字体大小为18px

@media screen (min-width:375px) and (max-width:600px){
   body{font-size:18px;}
}

(2)百分比

当浏览器的宽高发生变化时,通过百分比单位,可以使浏览器中的组件的宽高随着浏览器的变化而变化,从而实现响应式效果。

height、width的百分比属性依托于父标签的宽高,但是其他盒子属性不完全依赖父元素:

子元素的top/left/bottom/right如果设置百分比,则相对于直接非static定位的父元素的宽高

子元素的padding如果设置百分比,不论是垂直方向还是水平方向,都相对于直接父元素的width,而与父元素的height无关。

子元素的margin如果设置成百分比,不管是垂直还是水平方向,都相对于父元素的width

border-radius如果设置为百分比,则是相对于自身宽度

(3)vw/vh

vw相对于视图窗口宽度,vh表示相对于视图窗口高度。任意层级元素,在使用vw单位的情况下,1vw都等于视图宽度的1%

(4)rem

相对于根元素html的font-size属性,默认浏览器字体大小是16px,即1rem=16px

可以结合媒体查询针对不同设备的分辨率改变font-size的值

@media screen and (max-width:414px){
   html{
      font-size:18px
   }
}

(5)主流UI框架的栅栏布局实现响应式

element-ui antd

4、优缺点:

优点:面对不同分辨率设备灵活性强;能够快捷解决多设备显示适应问题

缺点:仅适用布局、信息、框架并不复杂的部门类型网站;兼容各种设备工作量大,效率低下;代码累赘,会出现隐藏无用的元素,加载时间变长;其实这是一种折中性质的设计解决方案,多方面因素影响而达不到最佳效果;一定程度上改变了网站原有的布局结构,会出现用户混淆的情况。

二、CSS提高性能的方法

1、内联首屏关键CSS

通过内联css关键代码可以在下载完首屏html文件就可以立刻渲染,css内联使用使渲染时间提前

如果外部使用css代码,在解析html结构过程中遇到外部css文件,才会开始下载css代码再渲染

注意:较大的css代码不适合内联(初始拥塞窗口,没有缓存)

2、异步加载css

在css文件请求、下载、解析完成之前,css会阻塞渲染,浏览器将不会渲染任何已处理的内容。加载完内联代码后,后面的外部引用css没必要阻塞浏览器渲染,此时可以采取异步加载的方式:

(1)使用JavaScript将link标签查到head标签最后

// 创建link标签
const myCSS = document.createElement( "link" );
myCSS.rel = "stylesheet";
myCSS.href = "mystyles.css";
// 插入到header的最后位置
document.head.insertBefore( 
    myCSS, 
    document.head.childNodes[ document.head.childNodes.length - 1 ].nextSibling 
);

(2)设置link标签media属性为noexis,浏览器会认为当前样式表不适用当前类型,会在不阻塞页面渲染的情况下再进行下载。加载完成后,将media的值设置为screen或all,从而让浏览器开始解析css

<link rel="stylesheet" href="mystyles.css" media="noexist" onload="this.media='all'">

(3)通过rel属性将link元素标记为alternate可选样式表,也能实现浏览器异步加载。加载完成之后,将rel设回stylesheet

<link rel="alternate stylesheet" href="mystyles.css" onload="this.rel='stylesheet'">

3、资源压缩

利用webpack、gulp/grunt、rollup等模块化工具,将css代码进行压缩,使文件变小,大大降低了浏览器的加载时间

4、合理使用选择器

css匹配的规则是从右往左匹配,例如#id .class h3的匹配规则为:先找到h3元素,然后去除祖先不是.class的元素,最后去除祖先不是#id的元素。

如果嵌套的层级更多,页面中的元素更多,那么匹配所要花费的时间代价自然更高,所以:

(1)不要嵌套使用过多复杂选择器,最好不要三层以上。

(2)使用id选择器就没必要再进行嵌套

(3)通配符和属性选择器效率最低,避免使用

5、减少使用昂贵的属性

页面发生重绘的时候,昂贵属性如box-shadow、border-radius、filter、透明度、:nth-child等,会降低浏览器的渲染性能

6、不要使用@import

@import会影响浏览器的并行下载,使得页面在加载时增加额外的延迟,增添了额外的往返耗时,而且多个@import可能会导致下载顺序紊乱

7、其他

  • 减少重排操作,减少不必要的重绘

  • 了解哪些属性可以继承而来,避免对这些属性重复编写

  • cssSprite合成所有icon图片,用宽高加上background-position的背景图方式显现出我们要的icon图,减少http请求

  • 把小的icon图片转成base64编码

  • css3动画或过渡尽量使用transform和opacity来实现动画,不使用left和top属性

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

响应式设计和CSS提高性能的方法 的相关文章

随机推荐

  • 数据结构之树的存储结构

    大家可能都知道 xff0c 存储结构有顺序存储结构和链式存储结构 很明显这两个结构不管哪一个 xff0c 都不能很好的表达数这种数据结构 xff0c 所以我们特此在这说一下数的存储结构 用这个树作为例子 xff1a 树的存储结构分为以下几类
  • 收发多径都考虑的情况

    0 完整源码获得方式 订阅MATLAB FPGA教程 xff0c 免得获得教程案例以及任意2份完整源码 收发多径都考虑的情况 clear all close all clc c 61 3e8 f0 61 150e6 载波频率 fd 61 1
  • Linux进程管理命令

    1 ps命令 ps aux xff1a 查看系统中的所有进程 xff0c 使用BS操作系统格式 ps le xff1a 查看系统中的所有进程 xff0c 使用LINUX标准命令格式 选项 xff1a a xff1a 显示一个终端的所有进程
  • C++信号概念

    信号 xff1a 它是操作系统传给进程的中断 xff0c 用来中断程序 xff0c 在Linux系统和Windows系统上可以用ctr 43 c产生中断信号 一 xff1a 穿插一个linux下各个快捷按键的信号区别 xff1a 1 ctr
  • Linux系统编程

    Linux系统中所见皆文件 bin xff1a 所存放二进制可执行文件 boot xff1a 存放开机启动程序 dev xff1a 存放设备文件 home xff1a 存放用户 etc xff1a 用户信息和系统配置文件 lib xff1a
  • Linux系统编程(续)

    静态库制作及使用步骤 xff1a 1 将 c生成 o文件 gcc c add c o add o 2 使用ar工具制作静态库 ar rcs lib自定义库名 a 后面需要的 c文件 3 编译静态库到可执行文件中 gcc test c 自制的
  • keil 提示internal command error和no sw device

    1 使用keil烧录软件的时候 xff0c jlink stlink无法识别到芯片 需要排查的问题 1 xff09 换条线 2 xff09 是不是有程序禁用了Seral Wire xff1a 使用cubeide cubeMX xff0c 容
  • 【C++】C++使用libcurl做HttpClient

    当使用C 43 43 做HTTP客户端时 xff0c 目前通用的做法就是使用libcurl 其官方网站的地址是http curl haxx se xff0c 该网站主要提供了Curl和libcurl Curl是命令行工具 xff0c 用于完
  • STM32F767 采用FIFO模式串口发送接收

    功能 xff1a 将接收到的数据发送出去 UART HandleTypeDef huart1 span class token punctuation span span class token comment 64 brief The a
  • 单片机串口分析起始位停止位奇偶校验位

    串口解析 串口配置 1 波特率 2 停止位 3 数据位 4 奇偶校验位 比特率 xff1a 通讯的频率停止位 xff1a 可以选择1 1 5 2三个选择数据位 xff1a 可以选择5 6 7 8四个选择奇偶校验位 xff1a 可以选择奇校验
  • 在算法研究过程中如何进行算法创新

    FPGA教程目录 MATLAB教程目录 创新一直是一个令人纠结的话题 xff0c 研究生毕业设计多数需要算法的创新 xff0c 而博士生毕业更需要大量的创新才行 另外一方面 xff0c 一些前沿的课题 xff0c 更是对算法的创新有着较高的
  • GPIO口相关配置寄存器

    STM32的每个Px端口都有四种7个寄存器来控制 xff0c 分别是 xff1a 2个32位的端口输入输出模式寄存器CRL CRH 2个32位的数据寄存器IDR ODR 1个32位的置位 复位寄存器BSRR 1个16位的复位寄存器BRR 1
  • STM32串口接收以及发送大全

    串口接收 xff1a 一 一帧数据以 r n结束 协议理解 xff1a 协议嘛 xff0c 就是我们人为创造一条规则 xff0c 按这条规则规规矩矩地来章程执行能够减少错误 xff0c 效率更高 xff0c 都执行一个规则也能大一统 下面我
  • 51单片机串口奇偶校验

    有的单片机串口奇偶校验都是硬件自动完成的 xff0c 但是就我目前用到的很多51核的单片机 xff0c 需要软件做一些简单的处理来完成奇偶校验 可以自己写一个简单的小程序来实现 xff1a 一位一位的判断1的个数 xff0c 这个当然好实现
  • C语言printf()输出格式大全

    这里写自定义目录标题 1 xff0e 转换说明符 a A 浮点数 十六进制数字和p P 记数法 C99 c 字符 d 有符号十进制整数 f 浮点数 包括float和doulbe e E 浮点数指数输出 e E 记数法 g G 浮点数不显无意
  • 2019年 电赛C题 全国大学生电子设计竞赛试题解析与总结

    2019年全国大学生电子设计竞赛试题 电赛C题 分析与总结 线路负载及故障检测装置 本科组 一 题目任务 设计并制作线路负载及故障检测装置 xff0c 示意图如图1所示 检测装置只通过两个连接端子与两根导线连接 导线上A B两点距离各自连接
  • 用moment获取一年内指定周的起始时间和结束时间、用户所选时间和前端传参时间不一致问题

    问题1 xff1a 原代码 xff1a 所选周 selectedWeek handler let selectedWeek 61 parseInt this selectedWeek substring 1 计算所选周的周开始时间和周结束时
  • HTML知识(一)

    1 HTML元素 HTML元素指的是从开始标签 start tag 到结束标签 xff08 end tag xff09 的所有代码 元素内容是开始标签与结束标签之间的内容 某些HTML元素具有空内容 xff0c 空元素在开始标签中进行关闭
  • CSS隐藏元素、BFC、元素居中、布局

    1 css中有哪些方式可以隐藏页面元素 xff1f 区别是什么 xff1f 1 1 display none 元素在页面上将彻底消失 xff0c 元素本身占有的空间会被其他元素占有 xff0c 导致浏览器的重排和重绘 特点 xff1a 元素
  • 响应式设计和CSS提高性能的方法

    一 响应式设计 1 是什么 xff1f 是一种网络页面设计布局 xff0c 页面的设计与开发应当根据用户行为以及设备环境 xff08 系统平台 屏幕尺寸 屏幕定向等 xff09 进行相应的响应和调整 2 常见特点 xff08 1 xff09