目前,在实际用户使用习惯中,会有不少的用户并不会直接下载APP进行使用,而是采起移动端浏览器直接搜索。对于移动端web页面,有哪些小细节须要注意?对于五花八门的屏幕如何适配?且听下文慢慢道来。。。css
在本人移动端开发学习中总结了一下几个特色:html
移动端的主流浏览器主要有:QQ浏览器、百度浏览器、safair浏览器、UC浏览器。 这些浏览器的内核都是webkit(或者比这个更高级的内核) ==>这就意味着咱们只须要作webkit的兼容便可,没必要像PC端兼容那么多的浏览器。 另外移动端浏览器对 H5 和 css3兼容很好。css3
如今移动端的屏幕都是高清显示屏,或者称为视网膜屏(retina屏),这种屏幕会将更多的物理像素挤压到一块屏幕里。web
物理像素:设备上真实的物理单元。数组
设备独立像素 :屏幕上1px真实显示的大小。浏览器
设备像素比(DPR) :物理像素和设备独立像素的比值。简单的说就是一个设备独立像素能够塞进几个物理像素。框架
因为高清屏的出现,随之给页面显示带来一个问题:图片失真。为何会出现图片失真的状况呢?举个例子:有个10px10px的图片进行展现,你若是在高清屏中仍然将这张图片展现为10px10px的大小,若是该屏幕是个2倍屏,那么咱们其实是以20px20px的物理像素展现的以前10px10px的图片。显然图片被分散到更多的物理像素点上展现,图片质量降低,图片失真。如何解决这个问题呢?且听下文分晓。less
目前市面上流行的设计稿主要有两种。移动端web
固然也有一些设计稿宽度大于1000px。当你使用百分比布局的时候,小于1000px的通常除以2,大于1000px的除以3。函数
因此,对图片失真咱们的解决方案是:将图片进行压缩:
若想适配移动端浏览器,咱们还须要知道,PC端浏览器和移动端浏览器对xxx.html展现时的区别。区别在于:移动端会在页面结构外包裹一层虚拟容器----viewport,而PC端则是直接加载页面的。
那咱们如何验证呢?当咱们给根元素设置width:100%,在移动端展现的时候,发现页面的宽度并非浏览器的宽度,页面出现了滚动条。显然根元素的width:100%并非相对于浏览器的100%。
其实,如今它是相对于viewport的width:100%
viewport的特色以下:
viewport常见参数:
《meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0"/》
这种适配方案,是将width使用百分比,而高度进行写死。具体作法就是,对宽度使用百分比布局,高度的则针对设计稿进行2倍或者3倍的压缩后写死。
缺点:这种适配方案只作到了,宽度的自适应,对于高度并作不到自适应,不一样屏幕显示的内容多少是不同的。
1、rem和em的区别
相同点 : rem和em都是相对单位。
区别 : rem是基于根元素html的字体大小来的,而em是基于父容器的字体大小来的。
2、css3的媒体查询
响应式开发:随着不一样的终端愈来愈多,人们针对不一样终端都要开发相对应的一套页面。而响应式开发则是一套页面适配多个终端的开发方案。
如今屏幕划分 :
超小屏也就是手机--->768px--->小屏(iPad)---> 992px---> 中屏(老式的台式电脑)--->1200px--->如今的笔记本,台式电脑
媒体查询语法 :
@media screen and (min-width:1200px) and *** {
// 能够写样式 (选择器)
}
复制代码
注意 :
简写 :
@media (min-width:1200px){
}
复制代码
等比例布局的核心思想就是:等比例缩放。即将设计稿定比例缩放到你屏幕能够显示的程度。
比例 : 设计稿宽度 : 100px = 屏幕宽度 :X
x = 屏幕宽度 * 100 / 设计稿宽度
这里100px 是一个基准值, 写为100px的缘由无非是为了方便计算。而这里获得的X将做为HTML的fon-size的属性值。
很明显这里涉及到了计算,传统的css并不能知足需求,在这里咱们使用less来完成适配。固然,使用JS也能够实现,但本人推荐使用媒体查询来完成。
在全局的less文件中,代码以下 :
//定义变量
@psdWidth : 750 ; // 设计稿的宽度
@baseSize : 100 ; // 基准值
@deviceWidthList : 320px , 360px , 375px , ...., 750px ; // 所须要配置的主流设备
// 定义less数组
// 由于媒体查询条件,
// 须要从小排列到大
.adapterFuc(@index) when (@index <= length(@deviceWidthList)){
@media (min-width:extract(@deviceWidthList,@index)){
html{
font-size : extract(@deviceWidthList,@index)/@psdWidth * @baseSize;
}
}
.adapterFuc(@index + 1);
}
.adapterFuc(1);
复制代码
注释 :
绑定事件建议
addEventListener('事件名',回调函数)
1、touch事件(触屏支持)
touch事件的回调函数,第一个参数会接受touchEvent事件对象。包含触摸的相关数据。
触摸点集合,这是一种伪数组
2、click事件
移动端click点击事件,并不灵敏,有300ms的延迟。这样的缘由是由于,移动端须要时间判断是滑动仍是点击。可是这样形成的影响是:响应过慢,用户体验降低。
解决方案 :
3、滑动事件(也是基于touch事件实现的)
小记一下本人新了解的原生事件 :
1、版心容器
.contain{
width : 100%;
max-width:640px;
min-width:320px;
margin : 0 auto;
height : xxx
}
复制代码
2、实现满屏效果
.contain{
position : fixed;
width : 100%;
height : 100%;
}
复制代码
原理:固定定位时,宽高相对于浏览器。
3、实现移动端左右布局
方案一 :
页面结构以下 :
<div class="wrap">
<div class="left"></div>
<div class="right"></div>
</div>
复制代码
样式以下 :
*{
margin: 0;
padding: 0;
}
.wrap{
position: fixed;
width: 100%;
height: 100%;
background: red;
}
.left{
height: 100%;
width: 100px;
float: left;
background: pink
}
.right{
height: 100%;
background: green;
overflow: hidden;
}
复制代码
使用的小技巧就是BFC模式。
若是不添加overflow属性的时候,.left盒子会影响.right盒子内容的显示的,这种影响并非遮挡,而是占用了.right盒子内容显示的空间。
而使用overflow属性将.right盒子设置为绝缘容器,这种容器至关于本身是一块独立的空间,即我不影响你,那么你也别想影响我。。。
方案二 :
页面结构以下 :
<div class="wrap">
<div class="left"></div>
<div class="right"></div>
</div>
复制代码
样式以下 :
*{
margin: 0;
padding: 0;
}
.wrap{
position: fixed;
width: 100%;
height: 100%;
background: red;
}
.left{
height: 100%;
width: 100px;
background: pink;
}
.right{
position: absolute;
left: 100px;
right: 0;
top: 0;
bottom: 0;
background: gray
}
复制代码
小技巧,position绝对定位,设置四个方向的距离,会将盒模型拉开。
感谢你们阅读,本文主要是本人,工做学习的总结,若有错误,欢迎指出,共同进步。