TML是一种固有的流动媒介。文本和容器在水平和垂直方向上展开以使用可用空间。这种流动性使复杂的设计变得更加困难,因此在千禧年之初,许多站点都根据流行的屏幕尺寸采用了固定宽度。
随着屏幕尺寸从800×600增加到1024×768甚至更大,该过程仍然可行。但是,智能手机的兴起和2007年推出的iPhone扭转了这一趋势。如今,超过一半的用户在较小的移动设备上访问网页。
注意:从技术上讲,智能手机通常比许多显示器具有更高的分辨率,但是单个像素变得不可见。iPhone 11 Max将其2688 x 1242的硬件分辨率转换为更实用的896×414逻辑分辨率。每个逻辑像素映射到3×3实际像素的网格,这使字体更平滑并增加了图像细节。
最初的解决方法是两个站点:一个用于桌面,一个用于移动,通常需要侦听用户代理以进行重定向。随着各种设备呈指数增长,这很快变得不切实际。
最后,术语“响应式网页设计(RWD)”由Ethan Marcotte在2010年提出。该技术使同一个站点可以在任何设备上工作,而不管屏幕尺寸或视口尺寸如何。
没有单一的RWD方法或技术。
首先,您必须确定站点设计如何对不同尺寸的显示器做出反应。这是一个挑战,许多首批RWD网站采用了现有的桌面布局,并随着屏幕尺寸的减小而删除了部分内容。
更好的技术是移动技术。它始于线性移动视图,可在所有设备上使用,然后随着更多空间和受支持的浏览器功能可用而重新排列或改编内容。最近,许多站点采用了更简单的布局,其中移动和桌面体验基本相似。
RWD的典型示例是汉堡菜单。屏幕较小的用户可以单击图标来查看导航链接,而屏幕较大的用户可以在水平列表中查看所有选项。
以下各节提供了许多技术实施选项。
无论采用哪种RWD技术,都必须在HTML中设置以下标记<head>:
<meta name="viewport" content="width=device-width,initial-scale=1">
该width=device-width设置可确保移动浏览器将逻辑CSS像素缩放到屏幕的宽度。否则,浏览器将假定它正在呈现一个桌面站点并相应地缩放它,以便可以对其进行平移和缩放。
媒体查询是第一个RWD网站的主要基础。它们允许CSS定位视口尺寸的特定范围。例如:
/* styles applied to all views */
p {font-size: 1rem;}
/* styles applied to viewports with a width between 900px and 1200px */
@media (min-width: 900px) and (max-width: 1200px) {
p {font-size: 1.5rem;}
}
尽管现在可以使用不太明确的选项,但仍使用媒体查询。
HTML<picture>元素使用媒体查询语法从多个选项中控制显示哪个图像<source>。这通常用于艺术指导,以显示适合设备视口的图像。例如:
<picture>
<!-- image shown when viewport width is greater than the height -->
<source srcset="landscape.jpg" media="(min-aspect-ratio:1/1)" alt="landscape" />
<!-- default image -->
<img src="portrait.jpg" alt="portrait" />
</picture>
的vw和vhCSS单元分别表示视口的高度和宽度的1%。vmin是最小尺寸的vmax1%,是最大尺寸的1%。
这些允许RWD灵活性,特别是与结合使用时calc。例如:
/* font size increases with viewport width */
p { font-size: 1rem + 0.5vw; }
CSS多列布局提供了一种随着容器尺寸增加而创建多个文本列的方法。例如:
/* columns must be a minimum width of 12rem with a gap of 2rem between each */
.container { columns: 12rem auto; column-gap: 2rem; }
CSS Flexbox和CSS Grid提供了现代技术,可根据子元素的内容和可用空间对子元素进行布局。主要区别:
可以用来创建内部布局。本质上,无需视媒体查询即可根据视口尺寸调整元素的大小。例如:
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
grid-gap: 1rem;
}
JavaScript也可以用于确定视口尺寸并做出相应的反应。例如:
// get viewport width and height
const
vw = window.innerWidth,
vh = window.innerHeight;
类似地,尽管getBoundingClientRect()方法可以返回更多信息,包括像素的分数,但是可以使用offsetWidth和offsetHeight检查单个元素的尺寸:
const
element = document.getElementById('myelement'),
rect = element.getBoundingClientRect(),
ew = rect.width,
eh = rect.height;
窗口和元素的尺寸可以随着设备旋转或调整浏览器窗口的大小而改变。该matchMediaAPI可以解析CSS媒体查询并触发更改事件:
// media query
const mql = window.matchMedia('(min-width: 600px)');
// initial check
mqTest(mql);
// call mqTest when media query changes
mql.addListener(mqTest);
// media query testing function
function mqTest(e) {
if (e.matches) {
console.log('viewport is at least 600px width');
}
else {
console.log('viewport is less than 600px width');
}
}
首先,RWD技术提供了良好的浏览器支持。当前使用的最新浏览器中,有近95%支持最新的CSS网格选项。但是,仍然有必要在各种设备,分辨率和浏览器上测试您的网站……
调整浏览器窗口的大小是几个小时的合理测试策略,但是它很快变得不准确且麻烦。大多数浏览器都提供了响应式设计模式,使您可以选择设备和用户代理,对其进行旋转,选择分辨率,更改像素密度,调节带宽,模拟触摸并拍摄屏幕截图。
在Firefox中,从Web Developer菜单中选择“响应式设计模式”或按Ctrl|Cmd+Shift+M。
在基于Chromium的浏览器中,从“更多工具”菜单中打开“开发者”工具,或按Ctrl|Cmd+Shift+I,然后单击切换设备工具栏图标,切换回浏览器选项卡以查看调整大小的站点。
在Safari中,从浏览器“偏好设置”的“高级”标签中启用“在菜单栏中显示开发菜单”选项。加载页面,然后从“开发”菜单中选择“进入响应设计模式” 。
但是,请注意,这些工具仅模仿设备的屏幕尺寸和用户代理。他们无法准确模拟以下内容:
在设备上运行Android或iOS虚拟机可让您安装和运行真正的移动浏览器并使用其实际渲染引擎。
Android模拟器包括:
Chrome是Android上明显的浏览器选择,但您也可以安装Opera Mini,这在低功率功能手机上很显眼。
iOS的选项更为有限:
这些仿真器仍有缺点:
几种在线服务使您可以通过Web在移动浏览器上测试响应页面。本质上,您在真实设备上租用时间,并且可以在浏览器中查看其屏幕。没有要设置或维护的软件。
除实时测试外,某些服务还包括自动测试API,使您可以运行脚本并检查样式回归或损坏的用户界面。
LambdaTest提供了2,000多种设备,操作系统和浏览器的组合。功能包括:
最后,没有替代品可以在真实设备上进行测试。这是评估实际处理速度,触摸控制和网站的自适应网页设计的最佳方法。
理想情况下,您应该测试尽可能多的设备,但是您自己的最新智能手机可能并不代表平均硬件水平。尝试获得一两年之久的中档设备,例如二手Moto G7或iPhone 8。
在同一网络上的设备可以通过在浏览器中输入PC的IP地址来访问PC的服务器。这可以ifconfig在macOS和Linux或ipconfigWindows上获得。
您也可以使用USB电缆将智能手机连接到PC。这使您可以远程控制设备并轻松访问其开发人员工具面板以进行调试。该技术因平台而异,但是要在桌面版浏览器上调试Android Chrome,请执行以下操作:
要调试iPhone的Safari,请执行以下操作:
响应式网页设计技术使您可以创建一个网站,无论技术限制和边界如何,任何人都可以在任何设备上查看该网站。使其具有出色的用户体验是另一回事,但是测试工具的范围和功能仍在不断提高。
eb标准:
由于不同浏览器解析出来的网页效果可能不同,所以需要通过web标准对其进行约束使其一致,主要包括三个方面:
结构标准:
结构用于对网页元素进行整理和分类,主要指的是HTML。
表现标准:
表现用于设置网页元素的版式、颜色、大小等外观样式,主要指的是CSS。
行为标准:
行为是指网页模型的定义及交互的编写,主要指的是 JavaScript。
初识HTML:
html 全称 Hyper Text Markup Language ,中文译为:“超文本标记语言” ,描述网页的一种语言。
HTML发展:
XHTML 是一个 W3C 标准,可扩展超文本标签语言(EXtensible HyperText Markup Language),更严格更纯净的 HTML 版本,作为一种 XML 应用被重新定义的 HTML。
HTML中的注释:
<!-- 注释标签:注释的内容 -->
条件注释:
条件注释的作用是:定义只有Internet Explorer才执行条件注释中的html标签。
<!--[if IE 8]>
.... some HTML here ....
<![endif]-->
HTML骨架:
<!DOCTYPE html> <!-- 声明文档类型版本为html5 -->
<html lang="en"> <!-- 网页的跟标签,lang=""用来设置网页语言,其值还有zh-CN中文简体、fr法语等,设置后当系统设置语言和网页语言发生冲突时会提示是否翻译网页 -->
<head> <!-- 网页的头部 -->
<meta charset='UTF-8'> <!-- 声明字符编码,其值还有gbk和gb2312 -->
<meta name="viewport" content="width=device-width,user-scalable=no,maximum-scale=1.0,minimum-scale=1.0,initial-scale=1.0"> <!-- 开启移动端视口 -->
<meta name="apple-mobile-web-app-capable" content="yes"> <!-- 开启ios快捷启动方式 -->
<meta name="apple-mobile-web-app-status-bar-style" content="black"> <!-- 设置iOS顶部通栏样式 -->
<meta name="format-detection" content="telephone=no"> <!-- 遇到数字不转成电话号码 -->
<meta http-equiv="X-UA-Compatible" content="ie=edge"> <!-- X-UA-Compatible是针对IE浏览器做兼容的,ie=edge表示兼容edge,若后面ie=7,则表示兼容IE7 -->
<meta name='keywords' content='This is a key words'> <!-- 网站搜索关键字 -->
<meta name='description' content='this is description'> <!-- 描述网站的信息 -->
<link rel="shortcut icon" type="image/x-icon" href="图片路径 "/> <!-- 网站的图标,如果图标是gif图,则需要改:type="image/gif",引入网站图标另一种方法:命名为favicon.ico文件放到网站根目录下 -->
<link rel="stylesheet" type="text/css" href="css文件路径"/> <!-- 引用css文件 -->
<base target="_blank"/> <!-- base标签,定义这个网页中a链接打开窗口的方式,其值还有_self -->
<title>标题</title> <!-- 网站的标题 -->
<style type="text/CSS"> /* 用来写CSS代码,type="text/CSS"可以省略 */
div{width:100px; height:100px; color:white;}
</style>
</head>
<body> <!-- 网页的主体 -->
<h1>标题</h1> <!-- 标题标签,共六个级,分别为:h1~h6,大小逐级递减,h1在一个网页中只允许出现一次。 -->
<p>段落</p> <!-- 段落标签 -->
<hr/> <!-- 单线标签,所有单标签后面的关闭符均可以省略 -->
<br/> <!-- 换行标签 -->
</div></div> <!-- 无语义化标签布局用,上面的标签是语义化标签 -->
<span>span</span> <!-- 无语义化标签分割用 -->
<strong>加粗</strong> <!-- 加粗标签 -->
<b>加粗</b> <!-- 加粗标签 -->
<i>倾斜</i> <!-- 倾斜标签 -->
<em>倾斜</em> <!-- 倾斜标签 -->
<s>删除线</s> <!-- 删除标签 -->
<del>删除线</del> <!-- 删除标签 -->
<u>下划线</u> <!-- 下划线标签 -->
<ins>下划线</ins> <!-- 下划线标签 -->
<img src="图片路径" alt="图片无法加载,提示文字" title="鼠标悬停,提示文体" border="2"/> <!-- 图像标签,border是边框属性,width和height属性设置图像的宽度和高度 -->
<a href="跳转目标" target="_self">链接的命名</a> <!-- 链接标签,target属性为链接页面打开的方式,默认值_self为自身打开;_blank为新窗口打开;_new为新窗口打开,相同页面只会打开一个;_top跳出框架-->
<ul> <!-- 无序列表 -->
<li>列表项1</li>
<li>列表项2</li>
<li>列表项3</li>
</ul>
<ol type="A"> <!-- 有序列表,属性type可以控制li序号的样式,其属性值有:1、A、a、I、i-->
<li>中国</li>
<li>美国</li>
<li>英国</li>
</ol>
<dl> <!-- 自定义列表 -->
<dt>分类1</dt> <!-- 分类名称 -->
<dd>分类1第1项</dd> <!-- 类的项 -->
<dd>分类1第2项</dd>
<dt>分类2</dt>
<dd>分类2第1项</dd>
<dd>分类2第2项</dd>
</dl>
<table> <!-- 定义表格,table标签实际就是一个四方块框框,里面有单元格才会显示出表格的样子 -->
<caption>信息表</caption> <!-- 表格标题 -->
<tr> <!-- 定义行 -->
<th>姓名</th> <!-- 定义表头,表头文本有加粗居中效果 -->
<th>年龄</th>
<th>性别</th>
</tr>
<tr> <!-- 定义行 -->
<td>小明</td> <!-- 定义单元格,表格里面没有列-->
<td>18</td>
<td>男</td>
</tr>
</table>
</body>
</html>
提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海123
其它问题可通过以下方式联系本人咨询:
QQ:810665436
微信:ConstancyMan
术上,HTML5大行其道:
1:有数据显示,截至2015,有80%的App全部或部分基于HTML5。
2:谷歌浏览器于9月1日起不在支持自动播放Flash。
3:亚马逊旗下网站(包括Amazon.com门户在内)的所有广告将不再使用flash。在可预见的未来,flash广告将被HTML5广告所取代。
移动端+HTML5,这个组合对前端工程师来说是个不小的挑战:如何让开发的页面能有更好的体验?这就是我们今天讨论的话题:移动端HTML5页面前端性能优化。
如何优化HTML5在移动设置上的性能表现,首先需要明确以下几个原则:
1、PC优化手段在Mobile端同样适用。
2、在Mobile侧我们提出三秒种渲染完成首屏指标。
3、基于第二点,首屏加载3秒完成或使用Loading。
4、基于联通3G网络平均338KB/s(2.71Mb/s),所以首屏资源不应超过1014KB。
5、Mobile端因手机配置原因,除加载外渲染速度也是优化重点。
6、基于第五点,要合理处理代码减少渲染损耗。
7、基于第二、第五点,所有影响首屏加载和渲染的代码应在处理逻辑中后置。
8、加载完成后用户交互使用时也需注意性能。
接下来先看一张小抄神图:
之所以说是神图,是因为它基本上涵盖了所有的优化方案!非常详尽!在这里,我们针对其中几个代表性方案进行探讨:
加载优化
对于移动端的网页来说,加载过程是最为耗时的过程,可能会占到总耗时的80%时间,因此是优化的重点,当然,手机站的其他前端要素优化也是不能忽略的。
1、减少HTTP请求
因为手机浏览器同时响应请求为4个请求(Android支持4个,iOS 5后可支持6个),所以要尽量减少页面的请求数,首次加载同时请求数不能超过4个,建议优化要点为以下2点:
1、合并CSS、Java
2、合并小图片,使用雪碧图
2、缓存
使用缓存可以减少向服务器的请求数,节省加载时间,所以所有静态资源都要在服务器端设置缓存,并且尽量使用长Cache(长Cache资源的更新可使用时间戳)。
1、缓存一切可缓存的资源
2、使用长Cache(使用时间戳更新Cache)
3、使用外联式引用CSS、Java
3、压缩HTML、CSS、Java
减少资源大小可以加快网页显示速度,所以要对HTML、CSS、Java等进行代码压缩,并在服务器端设置GZip。
1、压缩(例如,多余的空格、换行符和缩进)
2、启用GZip
4、无阻塞
写在HTML头部的Java(无异步),和写在HTML标签中的Style会阻塞页面的渲染,因此CSS放在页面头部并使用Link方式引入,避免在HTML标签中写Style,Java放在页面尾部或使用异步方式加载
5、使用首屏加载
首屏的快速显示,可以大大提升用户对页面速度的感知,因此应尽量针对首屏的快速显示做优化。
6、按需加载
将不影响首屏的资源和当前屏幕资源不用的资源放到用户需要时才加载,可以大大提升重要资源的显示速度和降低总体流量。
1、LazyLoad
2、滚屏加载
3、通过Media Query加载
另外,提醒大家一点:按需加载会导致大量重绘,影响渲染性能。
7、预加载
大型重资源页面(如游戏)可使用增加Loading的方法,资源加载完成后再显示页面,但Loading时间过长,会造成用户流失。
1、可感知Loading(如进入空间游戏的Loading)
2、不可感知的Loading(如提前加载下一页)
3、对用户行为分析,可以在当前页加载下一页资源,提升速度。
8、压缩图片
图片是最占流量的资源,因此尽量避免使用他,使用时选择最合适的格式(实现需求的前提下,以大小判断),合适的大小,然后使用智图压缩,同时在代码中用Srcset来按需显示。
1、使用智图
2、使用其它方式代替图片(使用CSS3;使用SVG;使用IconFont)
3、使用Srcset
4、选择合适的图片(webP优于JPG;PNG8优于GIF)
5、选择合适的大小(首次加载不大于1014KB;基于手机屏幕一般宽度不宽于640)
提醒大家一点:过度压缩图片大小影响图片显示效果。
9、减少Cookie,避免重定向以及异步加载第三方资源
Cookie会影响加载速度,所以静态资源域名不使用Cookie。另外,重定向会影响加载速度,所以在服务器正确设置避免重定向。还有,第三方资源不可控会影响页面的加载和显示,因此要异步加载第三方资源。
脚本执行优化
脚本处理不当会阻塞页面加载、渲染,因此在使用时需要注意以下几点:
1、CSS写在头部,Java写在尾部或异步。
2、避免图片和iFrame等的空Src,空Src会重新加载当前页面,影响速度和效率。
3、尽量避免重设图片大小,重设图片大小是指在页面、CSS、Java等中多次重置图片大小,多次重设图片大小会引发图片的多次重绘,影响性能。
4、图片尽量避免使用DataURL,DataURL图片没有使用图片的压缩算法文件会变大,并且要解码后再渲染,加载慢耗时长。
CSS优化
1、尽量避免写在HTML标签中写Style属性。
2、避免CSS表达式,CSS表达式的执行需跳出CSS树的渲染,因此请避免CSS表达式。
3、移除空的CSS规则,空的CSS规则增加了CSS文件的大小,且影响CSS树的执行,所以需移除空的CSS规则。
4、正确使用Display的属性,Display属性会影响页面的渲染,建议各位站长要合理使用。
(1)、display:inline后不应该再使用width、height、margin、padding以及float
(2)、display:inline-block后不应该再使用float
(3)、display:block后不应该再使用vertical-align
(4)、display:table-*后不应该再使用margin或者float
5、不滥用Float,Float在渲染时计算量比较大,尽量减少使用。
6、不滥用Web字体,Web字体需要下载,解析,重绘当前页面,尽量减少使用。
7、不声明过多的Font-size,过多的Font-size引发CSS树的效率。
8、值为0时不需要任何单位,为了浏览器的兼容性和性能,值为0时不要带单位。
9、标准化各种浏览器前缀
(1)、无前缀应放在最后。
(2)、CSS动画只用(-webkit- 无前缀)两种即可。
(3)、其它前缀为“-webkit- -moz- -ms-无前缀”四种(-o-Opera浏览器改用blink内核,所以淘汰)。
10、避免让选择符看起来像正则表达式。
高级选择器执行耗时长且不易读懂,避免使用。
Java执行优化
1、减少重绘和回流
(1)、避免不必要的Dom操作
(2)、尽量改变Class而不是Style,使用classList代替className
(3)、避免使用document.write
(4)、减少drawImage
2、缓存Dom选择与计算,每次Dom选择都要计算,缓存他。
3、缓存列表.length,每次.length都要计算,用一个变量保存这个值。
4、尽量使用事件代理,避免批量绑定事件。
5、尽量使用ID选择器,ID选择器是最快的。
6、TOUCH事件优化,使用touchstart、touchend代替click,因快影响速度快,但应注意Touch响应过快,易引发误操作。
渲染优化
HTML文档是以包含文档编码信息的数据流方式在网络间传输,页面的编码信息一般会在HTTP响应的头部信息或在文档内的HTML标记中指明,客户端浏览器只有在确定了页面编码后才能正确的渲染页面,所以在绘制页面或执行任何的java代码前,大部分的浏览器(ie6、ie7、ie8除外)都 会缓冲一定字节的数据来从中查找编码信息,不同的浏览器当中预缓冲的字节数是不一样的。
1、HTML使用Viewport
Viewport可以加速页面的渲染,请使用以下代码:
2、减少Dom节点
Dom节点太多影响页面的渲染,应尽量减少Dom节点。
3、动画优化
(1)、尽量使用CSS3动画。
(2)、合理使用requestAnimationFrame动画代替setTimeout。
(3)、适当使用Canvas动画5个元素以内使用css动画,5个以上使用Canvas动画(iOS8可使用webGL)。
4、高频事件优化
Touchmove、Scroll事件可导致多次渲染。
(1)、使用requestAnimationFrame监听帧变化,使得在正确的时间进行渲染。
(2)、增加响应变化的时间间隔,减少重绘次数。
5、GPU加速
CSS中以下属性(CSS3 transitions、CSS3 3Dtransforms、Opacity、Canvas、WebGL、Video)来触发GPU渲染,请合理使用。(PS:过渡使用会引发手机过耗电增加。)
*请认真填写需求信息,我们会在24小时内与您取得联系。