1. 移动布局
2. 视口 viewport
2.1. 布局视口 layout viewport
布局视口分辨率设置为980px,但一般元素很小,可以通过手动缩放网页
2.2. 视觉视口 visual viewport
我们可以通过缩放来操作视觉视口,但不会影响布局视口
2.3. 理想视口 ideal viewport
通过meta视口标签,告知网页,设备有多宽网页有多宽
3. meta视口标签
<meta
name="viewport"
content="width=device-width, initial-scale=1.0,user-scalable=no,maxium-scale=1.0,minimum-scale=1.0"
/>
- width: 宽度设置是viewport宽度,特殊值为device-width 宽度为设备宽度
- initial-scale: 初始缩放比 大于0的值
- maximum-scale:最大缩放比 默认为1
- minimum-scale:最小缩放比 默认为1
- user-scaleable:用户是否可以缩放,yes或no (1或0)
4. 二倍图
pc端1px为1个物理像素
而手机一般都为1px为2个物理像素
一般移动端都给一个2X再给一个1倍的盒子装
5. 背景缩放 background-size
background-size: 背景图片的宽度 高度;
- 如只写一个参数会等比例缩放
- 里面可以写百分百,相当于父盒子的尺寸
- cover:把图扩展到足够大直到填满盒子,等比缩放,会丢失部分图像
- contain:拉伸到高或宽直到填满高或宽就停止拉伸,可能会有部分空白图像无法填充
- 移动端的2X图一般用一个1X的盒子装,缩小到1X放置到背景
6. 移动端 CSS初始化
http://necolas.github.io/normalize.css/
7. CSS3 盒子模型 box-sizing
box-sizing:border-box; 把传统盒子转为CSS3盒子
传统盒子 = width +border +padding 的值
CSS3盒子 = padding和border不会影响盒子大小
8. 移动端特殊样式
如:移动端转为css3模型
box-sizing:border-box;
-webkit-box-sizing:border-box;
a标准在移动端点击会有高亮提示,我需要清除
-webkit-tap-highlight-color:transparent;
清除ios的按钮样式
-webkit-appearance:none;
禁止长按弹出菜单
img,a {
-webkit-touch-callout:none;
}
9. 移动端技术选型
单独制作移动端页面
流式布局(百分百布局)
- max-width:最大宽度 或 max-height
- min-width:最小宽度 或min-height
- flex 弹性布局
- less+rem+媒体查询布局
- 混合布局
响应式页面兼容移动端
- 媒体查询
- botstarp
10. flex布局
当父盒子设为flex布局后,子元素的float、clear和vertical-align属性失效
通过给父盒子添加flex属性 来控制子盒子的位置和排列方式
10.1. 父项属性
10.1.1. flex-direction:设置主轴的方向
主轴与侧轴 x轴和y轴
row:(默认值) 从左到右 默认主轴为x 侧轴为y 子元素是跟着主轴来排列的
display: flex;
flex-direction: row;
row-reverse:从右到左
column:从上到下 主轴为y 侧轴为x
display: flex;
flex-direction: column; /* 将主轴设置为y轴 元素从上到下排列 */
- column-revers:从下到上
10.1.2. justify-content 设置主轴上的子元素排列方式
使用这个属性前一定要确认好主轴是哪个
flex-start:(默认值) 从头部开始排列 如果主轴是x轴,则从左到右
flex-end: 从尾部开始排列
center:在主轴居中对齐 (如果主轴x轴则是水平居中)
space-around:平分剩余空间
display: flex;
justify-content: space-around; /* 将父盒子平均切分给n个子盒子的空间 */
space-between: 先两边贴边 再平分剩余空间
10.1.3. flex-wrap:设置子元素是否换行
默认情况下,项目都是在轴线上.由flex-wrap定义,默认不换行,如果装不开,会缩小 子元素宽度,加入到轴线上排列
nowarp:(默认值) 不换行
warp:换行,当父盒子装不下后,自动换行
display: flex;
flex-wrap: wawrp; /* 子元素需要先设置大小才会换行 不然会自动分配大小 */
10.1.4. align-items:设置侧轴上的子元素排列方式 (单行)
- flex-start: 默认值 从上到下
- flex-end:从下到上
- center:挤在一起居中(垂直居中)
- stretch:拉伸 (子盒子不要给高度,不然没效果)
10.1.5. align-content:设置侧轴上的子元素的排列方式(多行)
要配合flex-wrap:warp 使用,不然flex项目无法多行排列
- flex-start: 默认值 在侧轴的头到尾排列
- flex-end:尾到头排列
- center:在侧轴中间排列
- space-around:子项在侧轴平分剩余空间
- space-between:子项在侧轴先在头和尾,再平分剩余空间
- stretch:设置子项元高度平分父元素高度
10.1.6. flex-flow 简写属性
可以将设置主轴与是否换行进行简写
如:flex-flow: column warp;
10.2. 子项属性
10.2.1. flex 属性
定义子项分配剩余空间,占多少份
flex: n; 默认为0 如:flex:2;
也可以写百分百 为父盒子大小的多少
如:flex:20%;
10.2.2. align-self 控制子项自己在侧轴上的排列方式
让子项单独自己一个排列方式
继承侧轴上的排序方式属性
- flex-start: 默认值 从上到下
- flex-end:从下到上
- center:挤在一起居中(垂直居中)
- stretch:拉伸 (子盒子不要给高度,不然没效果)
10.2.3. order 属性定义项目的排列顺序
数值越小,排名越靠前,默认值为0
order:n; 可以为负数 如:order:-1;
11. rem布局
flex缺陷:文字和高度无法自适应 因为是按父盒子切份来分配的 而rem可以更好自适应文字和高度
em相对应父元素 的字体大小 来等比缩放 font-size =12 px; 10em =120px 1em =12px;
rem 相对应根元素(html) 设置font-size=12px ; 10rem=120px 1rem=12px
rem的优点就是通过修改html里面的文字大小来
rem 配合媒体查询 修改html中font-size 大小
11.1. 媒体查询
@media 媒体类型 关键字 (媒体特征) {
CSS-Code;
}
媒体类型
- all:用于所以设备
- print:用户打印和打印预览
- screen:用于电脑屏幕,平板电脑,智能手机等
关键字
- and:可将多个媒体特性连接到一起
- not:排除某个媒体类型
- onle:指定某个媒体类型
媒体特性
- width:页面可见宽度
- min-width:页面最小可见区域宽度
- max-width:最大可见区域宽度
@media screen and print (max-width:800px){
body {
/*当max-width小于等于800时 背景颜色为粉色*/
background-color:pink;
}
}
11.2. rem和结合媒体查询
rem单位是跟着html变化的 媒体查询+rem 就可以实现不同设备宽度 实现自适应
@media screen and (min-width:320px){
html {
font-size: 50px;
}
}
@media screen and (min-width:640px){
html {
font-size: 100px;
}
}
.div{
height: 1rem;
font-size: .5rem;
background-color: green;
}
11.3. px转rem插件
vscode下载px to rem & rpx (cssrem)
11.4. 引入资源
当我们样式比较多 我们可以针对不同的设备使用不同的css文件
根据link中判断设备的尺寸 引用不同的css文件
<link rel="stylesheet" href="style320.css" media="screen and (min-width: 320px)">
<link rel="stylesheet" href="style640.css" media="screen and (min-width: 640px)">
12. Less
Less 是 一门 css 扩展语言 是CSS的预处理器
常见的CSS预处理器: Sass Less Stylus
12.1. Less 安装
node.js环境下
先安装node.js
npm install -g less
lessc -v
浏览器环境使用
<link rel="stylesheet/less" type="text/css" href="styles.less" />
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/3.11.1/less.min.js" ></script>
12.2. Less 变量
必须@为前缀 不能包含特殊字符 不能以数字开头 大小写敏感
/* @变量名:值 */
@color: pink;
@font14: 14px;
body {
background-color: @color; /* 使用变量 */
font-size: @font14;
}
12.3. Less编译
我们需要把我们的less文件编译成css文件 才能在页面中使用
我们可以在vscoe中下载 Easy LESS插件 保存less文件后自动生成css文件
12.4. Less嵌套
Less中可以进行嵌套选择器 可以减少我们重复书写后代类选择器父类的名称
后代选择器
.div{
width: 200px
a{
color: red;
}
}
伪类 交集选择器 伪元素选择器 我们需要在前面加上&拼接
伪类选择器
a{
color: red;
&:hover{
color: blue;
}
}
伪元素
a{
color: red;
&::before{
content: "";
}
}
12.5. Less运算
任何数字 颜色 或 变量都可以参与四则运算
@font14: 14px;
body {
background-color: #666 - #222;
font-size:(@font14 + 5) / 2;
width: 1.6rem + 5px; /* 如果两个数单位不相同 结果以第一数的单位为准 */
}
12.6. Less导入其他less
导入common.less
@import 'common'