## 1.网页布局核心原理<搭建架子,布局盒子,填充内容>
### (1)搭建框架
就是创建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>
</head>
<body>
</body>
</html>
```
### **(2)布局盒子(不同样式)**
定义的盒子:就是嵌套div可以嵌套多个,然后接着设置样式
```
代码分析:
<!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 type="text/css">
#one{
background-color: aquamarine;
}
#two{
background-color: green;
}
</style>
</head>
<body>
<div>
<div id="one">
</div>
<div id="two">
</div>
</div>
</body>
</html>
```
### (3)填充内容
```
代码分析:
<!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 type="text/css">
#one{
background-color: aquamarine;
}
#two{
background-color: green;
}
</style>
</head>
<body>
<div>
<div id="one">
one
</div>
<div id="two">
two
</div>
</div>
</body>
</html>
```
## 2.盒子模型组成部分
### (1)border(代表边框)<里面的属性值可以任意更换>
边框的属性有上下左右四个:
格式:border-上下左右:大小(npx)solid(颜色);
```
border-top
border-bottom
border-left
border-right
```
```
代码分析:
<!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 type="text/css">
#one{
background-color: green;
height: 100px;
width: 100px;
border-top: 20px solid palevioletred;
border-bottom:20px solid black;
border-left:20px solid blue;
border-right:20px solid blanchedalmond;
}
</style>
</head>
<body>
<div id="one">
one
</div>
</body>
</html>
```
一般情况我们用一个border来概括整体
格式:border:大小(npx)solid(颜色)
```
代码分析:
<!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 type="text/css">
#one{
background-color: green;
height: 100px;
width: 100px;
border: 20px solid blue;
}
</style>
</head>
<body>
<div id="one">
one
</div>
</body>
</html>
```
border-collapse: collapse;<复选框合并为一个单选框>
```
<!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 type="text/css">
table,th{
border: 2px solid blue;
border-collapse: collapse;/*复选框合并为一个单选框*/
}
</style>
</head>
<body>
<table style="width: 600px; height: 150px;" cellspacing="0">
<tr>
<th>水果</th>
<th>进价</th>
<th>零售</th>
</tr>
<tr>
<td>香蕉</td>
<th>1.5元</th>
<th>1.5元</th>
</tr>
<tr>
<td>苹果</td>
<th>2元</th>
<th>3元</th>
</tr>
<tr>
<td>橙子</td>
<th>3.5元</th>
<th>5元</th>
</tr>
</table>
</body>
</html>
```
border大小问题 :
width10px(相当于左右各10px) hight20px(上下个20px,也就是40px)
### (2)margin
### (3)padding
![1631586745672](0914盒子.assets/1631586745672.png)
## 3.border
### 3.1案例1
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
div{
width:100px;
height: 100px;
border: 1px solid red; /**无顺序
border-top: 1px solid red;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
```
### 3.2案例2
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
table,td{
border: 1px solid red;
border-collapse: collapse;
}
</style>
</head>
<body>
<table style="width: 600px;height: 150px;" cellspacing="0">
<tr>
<th>Month</th>
<th>Savings</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
<td>$100</td>
</tr>
<tr>
<td>January</td>
<td>$100</td>
<td>$100</td>
</tr>
<tr>
<td>January</td>
<td>$100</td>
<td>$100</td>
</tr>
</table>
</body>
</html>
```
### 3.3案例3(border影响盒子大小)
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
div{
width: 100px;
height: 100px;
background-color: red;
border: 10px solid yellowgreen;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
```
#### 3.3.1解决A
```
不测量边框宽度
```
#### 3.3.2解决B
```
测量的时候width/height出去边框宽度
<style type="text/css">
div{
width: 80px;
height: 80px;
background-color: red;
border: 10px solid yellowgreen;
}
</style>
```
## 4.padding
### 4.1 定义
```
设置内边距,即边框与内容之间的距离。
```
### 4.2案例1
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
div{
width: 100px;
height: 100px;
background-color: red;
/*padding-top: 10px;
padding-left: 10px;*/
padding: 5px;/**(4种表示方式)
}
</style>
</head>
<body>
<div>范德萨发生大师傅的师傅大师傅</div>
</body>
</html>
```
### 4.3案例2(padding影响盒子大小)
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
div{
width: 100px;
height: 100px;
background-color: red;
padding: 20px;
}
</style>
</head>
<body>
<div>
最近,有消费者在使用顺丰速运寄快递时才能签收快递
</div>
</body>
</html>
```
#### 4.3.1解决方案
```
width/height减去多出来的内边距
```
### 4.4案例3(盒子未指定width/height属性,则padding不会撑开盒子大小)
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
div{
/** width: 100%;
height: 100px;
background-color: red;
padding: 20px;
}
</style>
</head>
<body>
<div>
最近,有消费者在使用顺丰速运寄快递时才能签收快递
</div>
</body>
</html>
```
## 5.margin
### 5.1定义
```
margin:10px 5px 15px 20px;
上外边距是 10px
右外边距是 5px
下外边距是 15px
左外边距是 20px
```
### 5.2案例1
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
div{
width: 200px;
height: 200px;
background-color: green;
}
.first{
margin-bottom: 20px;
}
</style>
</head>
<body>
<div class="first">aa</div>
<div>bb</div>
</body>
</html>
```
### 5.3案例2(水平居中)
#### 5.3.1前提:块级元素水平居中
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.the{
width: 200px;
height: 200px;
background-color: green;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="the"></div>
</body>
</html>
```
#### 5.3.2前提: 行内/行内块元素水平居中
```
步骤:给其父元素添加text-align:center即可
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.the{
width: 200px;
height: 200px;
background-color: green;
margin: 0 auto;
text-align: center;
}
/**無效
/*span{
margin: 0 auto;
}*/
</style>
</head>
<body>
<div class="the">
<span>呵呵</span>
</div>
</body>
</html>
```
### 5.4案例3(父元素塌陷-外边距合并)
[出现场景:嵌套块元素]()
```
如果margin定义块级元素外边距的时候,可能会出现外边距的合二为一,例如对于父子关系的
块元素,父元素和子元素同事具有外边距,父元素会塌陷较大的外边距。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.father{
width: 200px;
height: 200px;
background-color: red;
margin-top: 50px;/** 1 **/
}
.son{
width: 100px;
height: 100px;
background-color: yellow;
margin-top: 20px;/** 2**/
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
```
**解决塌陷**
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.father{
width: 200px;
height: 200px;
background-color: red;
margin-top: 50px;/** 1 **/
/**3**/
border: 1px solid green;
padding: 1px;
overflow: hidden;
}
.son{
width: 100px;
height: 100px;
background-color: yellow;
margin-top: 20px;/** 2**/
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
```
### 5.5案例4(默认内外边距)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
abcdefghijlmn
</body>
</html>
```
**企业级解决方案:**
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
padding:0;
margin:0;
}
</style>
</head>
<body>
abcdefghijlmn
</body>
</html>
```
### 5.6案例6(特殊场景:行内元素建议只设置左右的内外边距)
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
padding:0;
margin:0;
}
span{
margin: 20px;
}
</style>
</head>
<body>
<span>fdsafddfdaf</span>
</body>
</html>
```
解决方案:
```
行内元素转换为块级和行内块元素
```
使用的是display:行内元素转换为块级和行内块元素
display:none元素不会被显示 bock元素会被显示为块元素 inline元素会被显示为行内元素
inline-bock行内块元素
ul ;li:nth-child(数字)这个数字代表的ul里面的第几个li的属性加以改变的
组合选择器:
第一种:后代选择器,空格分开 比如ul li 说的是ul里面的li都是同一个属性值
第二种:子代选择器>分开,div>p 只是对其中一个p的属性值加以改变,其他p不会变