h5前端其实很简单(你必须要掌握的技能)
前端技术面现在越来越广,从PC的浏览器,桌面客户端程序,到移动端的h5、微信小程序开发; 如果你是一名前端开发者,那么仅仅掌握了前端的技术,你就能很快速的去做其他端的开发。
本文将介绍如何使用前端技术去开发移动端h5,掌握之后,开发移动端so easy。
准备工作1、 在开始之前我们首先要了解几个概念(px、rpx、em、rem)。pxpx像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。(引自CSS2.0手册)
rpxrpx其实是微信对于rem的一种应用的规定,或者说一种设计的方案,官方上规定屏幕宽度为20rem,规定屏幕宽为750rpx。
emem是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
浏览器默认的字号是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就可以了。
em的特点:
- em的值并不是固定的;
- em会继承父级元素的字体大小。
因为这两个特点,所以我们用em的时候,需要注意三点:
- body选择器中声明Font-size=62.5%;
- 将你的原来的px数值除以10,然后换上em作为单位;
- 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。
rem是相对于根元素<html>,也就是说,我们只需要在根元素确定一个参考值,其他子元素的值可以根据这个参考值来转换。具体这个参考值设置为多少,完全可以根据我们自己的需求来定。
浏览器默认的字号是16px,我们来看一些px单位与rem之间的转换关系:
为了方便计算,我们经常在<html>元素中设置font-size值为62.5%,相当于在<html>中设置font-size值为10px,此时,上面示例中所示的值将会改变:
如果css里面没有设定html的font-size,则默认浏览器以1rem=16px来换算。
rem是CSS3新增的一个相对单位(root em,根em)。目前,除了IE8及更早版本外,所有浏览器均已支持rem。对于不支持它的浏览器,我们只要多写一个绝对单位的声明,这些浏览器就会忽略用rem设定的字体大小。
2、关于css flex知识,这里就不做仔细介绍,可以看下阮一峰的博客,非常详细。3、vw、vh、vmin、vmax 的含义3.1 vw、vh、vmin、vmax(1)vw、vh、vmin、vmax 是一种视窗单位,也是相对单位。它相对的不是父节点或者页面的根节点。而是由视窗(Viewport)大小来决定的,单位 1,代表类似于 1%。
视窗(VIEwport)是你的浏览器实际显示内容的区域—,换句话说是你的不包括工具栏和按钮的网页浏览器。
(2)具体描述如下:
vw:视窗宽度的百分比(1vw 代表视窗的宽度为 1%
vh:视窗高度的百分比
vmin:当前 vw 和 vh 中较小的一个值
vmax:当前 vw 和 vh 中较大的一个值
3.2、vw、vh 与 % 百分比的区别(1)% 是相对于父元素的大小设定的比率,vw、vh 是视窗大小决定的。
(2)vw、vh 优势在于能够直接获取高度,而用 % 在没有设置 body 高度的情况下,是无法正确获得可视区域的高度的,所以这是挺不错的优势。
3。3、vmin、vmax 用处做移动页面开发时,如果使用 vw、wh 设置字体大小(比如 5vw),在竖屏和横屏状态下显示的字体大小是不一样的。
由于 vmin 和 vmax 是当前较小的 vw 和 vh 和当前较大的 vw 和 vh。这里就可以用到 vmin 和 vmax。使得文字大小在横竖屏下保持一致。
实战篇掌握了以上概念后,开始移动端h5之旅;
1、初始化项目2、css 中为根节点添加font-size:62.5%;样式,方便后面其他单位计算。
/* 移动端 */
html {
font-size: 62.5%;
}
html,
body {
height: 100%;
}
<script>
function isMobile() {
var result = navigator.userAgent.match(
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
);
return result !== null;
}
window.onload = function () {
// 判断是否是IE,如果不是,添加DetectRTC脚本
// if (browserType.indexOf('IE') < 0) {
// var s = document.createElement('script');
// s.type = 'text/script';
// s.src = './player/detectrtc.js';
// document.getElementsByTagName('head')[0].appendChild(s);
// }
var height = document.documentElement.clientHeight;
function setBodyHeight() {
if (isMobile()) {
// 解决在移动端软键盘出现影响整体body高度的问题
var _body = document.getElementsByTagName('body')[0];
var _height = document.documentElement.clientHeight;
_body.style.height = _height 'px'
}
}
setBodyHeight();
window.addEventListener('resize', () => {
setTimeout(setBodyHeight, 500)
}, false);
document.addEventListener('visibilitychange', () => {
setTimeout(setBodyHeight, 500)
}, false);
};
</script>
4、到这里,基本的工作就做完了,剩下的就是写css的时候根据设计稿的宽度来计算应该是多少像素,假如设计稿的font-size为32px,那么我们就写font-size:3.2rem;
是不是非常简单,其实最主要就是掌握rem的用法,这种移动端的方案基本可以满足多数需求;
有时候有些项目还需要支持横屏,可以这样设置一下,然后在横屏样式表中完成横屏适配。
<link rel="stylesheet" media="all and (orientation:portrait)" href="css/index.css">//竖屏
<link rel="stylesheet" media="all and (orientation:landscape)" href="css/landscape.css">//横屏
#创作挑战赛#
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com