Html和CSS学习
自己正经开始学编程的第一门语言!
20. 移动端布局实战上篇
20.1 移动端主流方案
- 单独移动端页面(主流)

- 响应式兼容PC移动端

- 两种页面选型布局方式

20.2 移动端技术解决方案
20.2.1 CSS初始化 normalize.css
官网地址: http://necolas.github.io/normalize.css/


20.2.2 CSS3 盒子模型 box-sizing


去除高亮:
在用a元素的时候在pc端没事,但是在手机端一点会有颜色背景,去除的方式是
-webkit- tap-highlight-color: transparent;
20.3 流式布局(百分比布局)

20.4 流式布局案例
注意点:
移动端在进行大盒子中左右两个盒子大小固定不变,中间盒子随着大盒子的放大而变大,变小而变小,此时可以一定要学会使用定位,定位非常非常重要,如果想让大盒子不动,不随着页面向下的滑动而改变,此时对大盒子使用固定定位,并将宽度设置为100%,高度自己定,左右两个盒子设置为固定定位,并给定其确定的宽和高,让它不会随意浏览器的缩放而改变,对中间盒子采用标准流做法,给它设定一个magin,让它与左右盒子相隔,宽度设为100%,高度设为确定值,设置magin是因为那两个左右盒子是绝对定位,它会盖住中间盒子两边的部分的。
也可以使用flex布局来实现,给左右盒子设置好宽高,对大盒子使用flex布局,然后中间剩余部分全给中间盒子即可实现!
图片格式:

效果:

结构代码:
<img src="images/pic.jpg" alt="描述文字" title="悬停提示">
样式代码:
<img src="images/pic.jpg" alt="描述文字" title="悬停提示">
20.5 flex布局

20.5.1 布局原理
flex 是 flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为 flex 布局
- 当我们为父盒子设为 flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效
- 伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局
- 采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"
- 总结来说就是:就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式
- flex可以直接将行内元素变成类似于浮动的效果,就有宽高了
父盒子被设置为弹性布局后,如果不给它设置宽度的话,父盒子的宽度就是子盒子撑开的宽度,如果有两个子盒子,第一个子盒子设置了宽高,第二个盒子宽度设为100%,则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开
在弹性布局中如果是个单选标签,可以使用下边的方式进行布局:
/* Flex 弹性布局 */
.container {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
样式:
.form-item .male-label {
margin-right: 20px;
display: inline-flex;
align-items: center;
}


20.5.2 常见父项属性
- flex-direction:设置主轴的方向
- justify-content:设置主轴上的子元素排列方式
- flex-wrap:设置子元素是否换行
- align-content:设置侧轴上的子元素的排列方式(多行)
- align-items:设置侧轴上的子元素排列方式(单行)
- flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap
- flex-direction:设置主轴的方向


- justify-content:设置主轴上的子元素排列方式

space-evenly:所有间距都完全相等(包括两端和元素之间)
跟着主轴走
- flex-wrap:设置子元素是否换行

flex布局中是默认不换行的,当父亲盒子宽100px,高100px,内部的5个四盒子设置 宽为30px,高30px,如果排列方式按照默认,则按照x轴来进行排,从左到右的方式来进行排列,则子盒子不会换行,子盒子的宽度将会失效,然后会自动调整宽度以适应这个父盒子,会将父盒子沿这个轴塞满
- align-content:设置侧轴上的子元素的排列方式(多行)

搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作
stretch:沿着侧轴拉伸,但是要首先去掉侧轴方向的宽或高:若侧轴为y轴,则去掉高度大小
- align-items:设置侧轴上的子元素排列方式(单行)

align-items与align-content之间的区别:
单找items,多找content

- flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap

20.5.3 flex布局子项常见属性
- flex 属性
flex 属性定义子项目分配剩余空间,用flex来表示占多少份数

可以理解为没站位的剩余空间 ,数字表示的含义理解为:数字/总元素
flex后边也可以跟百分比,通常用于父盒子不给高度,宽度为100%,想让子盒子换行和撑开的情况,li没有宽度,此时用flex:1;是不太起作用的,他不会换行,这是因为没有宽度,此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了,就可以实现换行了
- align-self 控制子项自己在侧轴上的排列方式

单个子盒子在父盒子侧轴上的排列方式
- order 属性定义项目的排列顺序

20.5.4 背景线性渐变

必须要添加浏览器的私有前缀
20.5.5 携程网首页案例
学到最重要的知识:
flex处理这样的布局思路

.container {
display: flex;
justify-content: center;
align-items: center;
}
对上述的布局思路的多个多个背景图片替换的方式如下:一定要学会思路!!!
使用属性选择器

结构:
<!-- 携程网移动端案例结构 -->
<div class="container">
<!-- 搜索栏 -->
<div class="search-index">...</div>
<!-- 焦点图 -->
<div class="focus">...</div>
<!-- 主导航 -->
<div class="local-nav">...</div>
<!-- 子导航 -->
<div class="nav-common">...</div>
</div>
样式:
input[type="text"] {
border: 1px solid #999;
}
总代码和效果展示:

结构:
<!-- 携程网移动端案例结构 -->
<div class="container">
<!-- 搜索栏 -->
<div class="search-index">...</div>
<!-- 焦点图 -->
<div class="focus">...</div>
<!-- 主导航 -->
<div class="local-nav">...</div>
<!-- 子导航 -->
<div class="nav-common">...</div>
</div>
样式:
<!-- HTML 代码示例 -->
<div class="example">
示例内容
</div>