一、视口
1.概念
-ViewPort是移动Web开发中一个重要的概念,最早是由苹果公司在推出iPhone手机时发明的。其目的时为了让iPhone的小屏幕尽可能的完整显示整个网页。通过设置视口,不管网页原始分辨率尺寸有多大,都能将其缩小显示在手机浏览器上,这样保证网页在手机上看起来更像在桌面浏览器中的样子,视口简单来说就是浏览器显示页面内容的屏幕区域。在移动端浏览器中,存在着3种视口,分别是布局视口(layout viewport)、视觉视口(visual viewport)和理想视口(ideal viewport)
布局视口
布局视口是指网页的宽度,一般移动端浏览器都默认设置了布局视口的宽度。根据设备的不同,布局视口的默认宽度有可能是768px、980px或1024px等,这个宽度并不适合在手机屏幕中展示。移动端浏览器之所以采用这样的默认设置,是为了解决早期的PC端页面在手机上显示的问题。
视觉视口
视觉视口是指用户正在看到的网站的区域,这个区域的宽度等同于移动设备浏览器窗口的宽度
理想视口
理想视口是指对设备来讲最理想的视口尺寸。采用理想视口的方式,可以使网页在移动浏览器上获得最理想的浏览和阅读的宽度。
<!-- 理想视口 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
二、百分比布局
1.特点
1.流式布局概念
-
流式布局是一种等比例缩放布局方式,在css代码中使用百分比来设置宽度,又叫做百分比自适应布局。流式布局实现方式是将像素宽度换算为百分比宽度。公式:目标元素宽度/父盒子宽度=百分数宽度
-
经典流式布局方式
1.左侧固定 右侧自适应
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style>
.father {
display: flex;
height: 800px;
background-color: red;
}
.left {
width: 200px;
height: 300px;
background-color: green;
}
.right {
flex: 1;
height: 500px;
background-color: blue;
}
</style>
<body>
<div class="father">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
2.右侧固定,左侧自适应
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style>
.father {
height: 800px;
background-color: pink;
position: relative;
padding-left: 200px;
}
.left {
height: 500px;
background-color: red;
}
.right {
width: 200px;
height: 600px;
background-color: green;
padding-left: 200px;
position: absolute;
top: 0;
right: 0;
}
</style>
<body>
<div class="father">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
3.两侧固定,中间自适应(圣杯布局)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.father {
height: 800px;
background-color: red;
display: flex;
flex: 1;
}
.left {
width: 200px;
height: 400px;
background-color: green;
}
.middle {
width: 100%;
height: 400px;
background-color: #6cf;
flex: 1;
}
.right {
width: 200px;
height: 400px;
background-color: blue;
}
</style>
</head>
<body>
<div class="father">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>
</body>
</html>
4.等分布局 根据数量判断百分比
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
ul {
overflow: hidden;
}
li {
width: 25%;
float: left;
list-style: none;
background-color: pink;
height: 200px;
border: 1px solid #000;
}
</style>
</head>
<body>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</body>
</html>
2.总结:特点:流式布局 宽度自适应,高度固定。 布局方式:宽度为百分比写法
三、Flex布局
1.优势和特点
1.浏览器提倡的布局模型,页面渲染性能更高
2.布局简单、方便
3.避免浮动带来的脱标影响
4.兼容性较差(不兼容低版本浏览器)
2.组成部分
1.弹性容器(父元素,添加display:flex)
2.弹性盒子(子元素)
3.确定主轴方向 flex-direction(默认值:row主轴方向水平从左到右 column主轴方向垂直从上到下)
4.主轴(justify-content: ;)
5.侧轴(单行侧轴 align-items: ; 多行侧轴 align-content: ;)
3.主侧轴对齐方式
1.主轴(justify-content)
- center 居中
- space-between 左右靠边线 中间产生间距
- space-evenly 父子级间距都相同 平均分配空间
- space-around 每个项目左右两侧间距相同
2.侧轴(align-items)(align-content)
- center 居中
- strech 默认值:拉伸
3.align-self(控制某个弹性盒子)
4.弹性伸缩比 1.flex:整数数字 2.占用父元素剩余尺寸的分数
<!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,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<title>Document</title>
<style>
.father{
height: 600px;
background-color: #6cf;
/* 父元素设定弹性布局 */
display: flex;
/* 确定主轴方向 */
/* flex-direction: column; */
/* 主轴对齐方式 */
/* justify-content: center; */
/* justify-content: space-evenly; */
/* justify-content: space-around; */
/* justify-content: space-between; */
/* 侧轴对齐方式 */
/* align-items: center; */
}
.left{
width: 200px;
height: 200px;
background-color: red;
}
.center{
width: 200px;
height: 200px;
/* 弹性伸缩比 */
/* 给中间设置flex 1 两侧固定 拉伸时只有中间改变大小 */
/* flex: 1; */
background-color: green;
}
.right{
width: 200px;
height: 200px;
background-color: blue;
}
</style>
</head>
<body>
<div class="father">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
</div>
</body>
</html>