移动端布局
一. 移动端布局基础
为什么要专门学习移动端布局
- 手机设备分辨率各不相同,不能使用和pc端相同的方法去直接设置页面
- 移动端使用场景极广,不仅可以用于制作移动端网页,还可以用于制作小程序,app
移动端调试方法
- chrome浏览器直接模拟
- 使用本地web服务器,通过手机访问服务器直接调试
二. 视口
什么是视口
视口就是浏览器显示内容的屏幕区域
视口分类
-
布局视口
早期使用,直接将PC端缩小放到移动端
-
视觉视口
用户直接看到 的网站区域
-
理想视口(重点)
需要手写meta视口标签通知浏览器操作,设备有多宽,我们布局就有多宽
这也是我们移动端主要学习的内容
视口的meta标签
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>视口</title>
</head>
标准配置如上
| 属性 | 作用 |
|---|---|
| width | 宽度设置的是viewport宽度,可以设置device-width特殊值 |
| initial-scale | 初始缩放比,大于0 |
| maximum-scale | 最大缩放比,大于0 |
| minimum-scale | 最小缩放比,大于0 |
| user-scalable | 用户是否可以缩放(yes/no,0/1) |
三. 二倍图
什么是二倍图,二倍图的用处在哪?
- 移动端和PC端不同,PC端1px就是一个物理像素,但是移动端1px可能不止一个物理像素
- 这是因为移动端设备为了更好的显示效果,使用了retina技术,将更多物理像素压缩到一块屏幕内
- 准备一张100*100的图片,将其强行设置成50*50,以提高清晰程度,这就是二倍图
实例:
/* 我们需要一个50*50像素(css像素)的图片 直接放到手机里面会放大2倍 100* 100 就会模糊 */
/* 我们采取的是 放一个 100* 100 图片 然后手动的把这个图片 缩小为 50* 50 (css像素),强行提高像素密度 */
/* 我们准备的图片 比我们实际需要的大小 大2倍,这就方式就是 2倍图 */
img:nth-child(2) {
width: 50px;
height: 50px;
}
多倍图
由于并不是所有移动端都是2倍像素密度,所以也有要用到三倍图四倍图的情况
CSS3属性:background-size
用于背景缩放
div {
width: 500px;
height: 500px;
border: 2px solid red;
background: url(images/dog.jpg) no-repeat;
/* background-size: 图片的宽度 图片的高度; */
background-size: 500px 200px;
/* 1.只写一个参数 肯定是宽度 高度省略了 会等比例缩放 */
background-size: 500px;
/* 2. 里面的单位可以跟% 相对于父盒子来说的 */
background-size: 50%;
/* 3. cover 等比例拉伸 要完全覆盖div盒子 可能有部分背景图片显示不全 */
background-size: cover;
/* 4. contain 高度和宽度等比例拉伸 当宽度 或者高度 铺满div盒子就不再进行拉伸了 可能有部分空白区域 */
background-size: contain;
}
四. 移动端开发方案
- 单独制作移动端页面(主流方案)
- 流式布局
- flex弹性布局
- less+rem+媒体查询布局
- 混合布局
- VW和VH布局
- 响应式页面兼容移动端
- 媒体查询
- bootstrap
五. 常见技术解决方案
CSS初始化 normalize.css
优势:
- 保护了有价值的默认值
- 修复了浏览器bug
- 模块化
- 文档详细
官网地址: necolas.github.io/normalize.c…
CSS3盒子模型
使用box-sizing:border-box可以防止由于内边距和边框的设置撑大盒子影响布局
移动端可以随意使用CSS3新特性,PC端需要考虑兼容性
特殊样式
/*CSS3盒子模型*/
box-sizing: border-box;
-webkit-box-sizing: border-box;
/*点击高亮我们需要清除 设置为transparent 完成透明*/
-webkit-tap-highlight-color: transparent;
/*在移动端浏览器默认的外观在iOS上加上这个属性才能给按钮和输入框自定义样式*/
-webkit-appearance: none;
/*禁用长按页面时的弹出菜单*/
img,a { -webkit-touch-callout: none; }