移动端
1特点和原理:
1.解决不同手机清晰度加载不同清晰度照片的代码写法
2.布局视口
<!-- 没有以下这组代码的都是布局视口,老技术默认宽度980px -->
<!-- 有以下这组代码的是理想视口,能自动匹配各种屏幕的宽度 -->
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
3.理想视口详细介绍
1.flex布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 200px;
height: 200px;
margin: 100px auto;
background-color: aquamarine;
/* flex布局又称弹性布局,如果想要弹性布局就给父项加上 display: flex;小技巧 df 就能出来 */
/* 发生的变化:1.子项继承父项的高,宽由内容撑开
2.flex布局里面的子项不再划分为块级。行内。行内块了,都可以设置宽高 */
display: flex;
}
span {
/* 浮动无效 */
/* float: left; */
/* margin 有效 */
/* margin-top: 50px; */
/* 位移有效 */
/* transform: translateX(50px); */
/* 定位有效 */
/* position: absolute;
top: 0;
left: 0;
width: 50px;
height: 50px; */
/* 默认情况下子项的宽大于父项也不会换行,而是压缩自己,
结论:flex不会换行,之会压缩自身的宽度 */
background-color: antiquewhite;
}
</style>
</head>
<body>
<div>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
</div>
</body>
</html>
2.设置主轴对齐方式:justify-content
display: flex;
1.flex-start :左对齐
2.flex-end:右对齐
3.center:居中
4.space-beween:先两侧对齐,然后平分中间的宽 记忆方式加小技巧 sb
5.space-around:每个子项两边的间隔一样,所以中间的的间隔会比较大 记忆方式加小技巧 sd
6.space-evenly:绝对平分,每个子项的间隔都是一样大的 记忆方式加小技巧 sv
3.侧轴对齐方式之单行:align-items
display: flex;
- 侧边上对齐
align-items: start;
2. 侧边下对齐
align-items: end;
3.侧边栏居中
align-items: center
4. 默认值,如果子项没有了高度,会默认继承父项的高度
align-items: stretch;
4.侧轴对齐方式之多行:align-content
display: flex;
- 多行:上对齐
align-content: flex-start;
2.多行:下对齐
align-content: flex-end;
- 多行:居中
align-content: center;
4.多行:先两侧对齐,然后平分中间的宽 记忆方式加小技巧 sb
align-content: space-between;
- 多行:每个子项两边的间隔一样,所以中间的的间隔会比较大 记忆方式加小技巧 sd
align-content: space-around;
6. 多行:绝对平分,每个子项的间隔都是一样大的 记忆方式加小技巧 sv
align-content: space-evenly;
(总结:侧轴多行的书写方式和主轴对齐的属性差不多,关键在于前面的属性)
5.水平垂直居中
display: flex;
- 水平居中
justify-content: center;
- 垂直居中
align-items: center;
两行代码实现水平垂直居中
5.换行:
flex只有这一种方法, flex-wrap: wrap;在父项设置,当一行装不下的时候会自动换行,无法具体选中换行
6.修改主轴方向:
7. 每个子项占父项宽度的份额
flex: 1;
8.子项侧轴单独选中对齐方式:align-self
span:nth-child(3) {
/* 子项单独选择居中 */
/* align-self: center; */
/* 子项单独选中靠上 */
/* align-self: start; */
/* 子项单独选中靠下 */
align-self: end;
/* (总结:就是单独选中某个子项, 给他设置对齐方式, 代码:align-self +方位代码) */
}
9.随堂案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
/* 清除默认的内外边距 */
margin: 0;
padding: 0;
/* c3盒子模型防止盒子被撑大 */
box-sizing: border-box;
}
ul {
/* 讲ul变为flex布局 */
display: flex;
/* 设置可以换行 */
flex-wrap: wrap;
/* 设置垂直方向的上下对齐方向 */
align-content: space-around;
/* 设置水平方向的左右对齐方向 */
justify-content: space-around;
width: 1000px;
height: 600px;
background-color: #ccc;
margin: 100px auto;
list-style: none;
}
li {
/* 将li变为flex布局,使里面的子项宽高可以生效 */
display: flex;
/* 改变主轴方向,因为flex盒子不会换行,所以主轴反过来 */
flex-direction: column;
/* 主轴方向反了,垂直方向的居中变成水平方向的居中 */
align-items: center;
/* 主轴方向反了,水平方向的对齐变换成侧边也是垂直方向的对齐 */
justify-content: space-evenly;
/* 用内边距挤压内容,使其贴合 */
padding: 30px 0;
/* 一个li占父项宽度的百分比 */
width: 23%;
/* 一个li占父项高度的百分比 */
height: 47%;
background-color: skyblue;
}
span {
background-color: red;
width: 50px;
height: 50px;
}
</style>
</head>
<body>
<ul>
<li>
<span></span>
<h5>好看的</h5>
<p>玛卡巴卡玛卡巴卡玛</p>
</li>
<li>
<span></span>
<h5>好看的</h5>
<p>玛卡巴卡玛卡巴卡玛</p>
</li>
<li>
<span></span>
<h5>好看的</h5>
<p>玛卡巴卡玛卡巴卡玛</p>
</li>
<li>
<span></span>
<h5>好看的</h5>
<p>玛卡巴卡玛卡巴卡玛</p>
</li>
<li>
<span></span>
<h5>好看的</h5>
<p>玛卡巴卡玛卡巴卡玛</p>
</li>
<li>
<span></span>
<h5>好看的</h5>
<p>玛卡巴卡玛卡巴卡玛</p>
</li>
<li>
<span></span>
<h5>好看的</h5>
<p>玛卡巴卡玛卡巴卡玛</p>
</li>
<li>
<span></span>
<h5>好看的</h5>
<p>玛卡巴卡玛卡巴卡玛</p>
</li>
</ul>
</body>
</html>
总结:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
display: flex;
/* 宽度不够自动换行 */
flex-wrap: wrap;
/* 主轴对齐方式 */
/* 主轴靠左对齐,默认方式 */
/* justify-content: start; */
/* 主轴靠右对齐 */
/* justify-content: end; */
/* 主轴居中 */
/* justify-content: center; */
/* 主轴靠边对齐 */
/* justify-content: space-between; */
/* 主轴两边留空,中间缝隙比两边大*/
/* justify-content: space-around; */
/* 主轴绝对平分 */
/* justify-content: space-evenly; */
/* 主轴居中 */
/* justify-content: center; */
/* 侧轴对齐方式 */
/* 侧轴单行上对齐 ,默认方式(子项没高度会出问题)*/
/* align-items: flex-start; */
/* 侧轴单行下对齐 */
/* align-items: flex-end; */
/* 侧轴单行居中 */
/* align-items: center; */
/* 侧轴多行上对齐 */
/* align-content: start; */
/* 侧轴多行下对齐 */
/* align-content: end; */
/* 侧轴多行居中 */
/* align-content: center; */
/* 侧轴多行上下靠边对齐 */
/* align-content: space-between; */
/* 侧轴多行上下留边对齐 */
/* align-content: space-around; */
/* 侧轴绝对平分 */
align-content: space-evenly;
/* 主轴变换方向 */
/* 默认值,从左到右 */
/* flex-direction: row; */
/* 从右到左 */
/* flex-direction: row-reverse; */
/* 从上到下 */
/* flex-direction: column; */
/* 从下到上 */
/* flex-direction: column-reverse; */
width: 600px;
height: 400px;
border: 1px solid #000;
margin: 100px auto;
}
span {
width: 300px;
/* 子项不设高度默认拉伸值父项的高度 */
height: 100px;
background-color: blue;
border: 1px solid #000;
}
</style>
</head>
<body>
<div>
<span></span>
<span></span>
<span></span>
</div>
</body>
</html>