webveuje/csspress/2.盒模型.md
2021-03-23 10:58:10 +08:00

277 lines
6.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# css 基础(二)
## 块级元素和内联元素
- 块级元素
- 特点:
- 盒子横向会占据父元素所有的空间,默认情况下,盒子会和父元素一样宽
- 每个盒子都会换行
- width和height 都可以发挥作用
- padding , margin, border 会将其他元素从当前盒子周围推开
- 内联元素
- 特点:
- 盒子不会换行
- width和height 不能发挥作用
- 垂直方向的内边距、外边距以及边框会被应用但是不会把其他处于 `inline` 状态的盒子推开。
- 水平方向的内边距、外边距以及边框会被应用且会把其他处于 `inline` 状态的盒子推开。
> 块级元素display默认属性值为 block
>
> 内联元素 dipslay的属性默认值为inline
>
> 块级元素和内联元素可以通过display="inline"/"block" 实现互相转换
## 盒模型 box model
css 盒模型包括如下要素
- 元素内容 content
- 内边距 border
- 边框border
- 外边距margin
![image-20201218160440679](E:\web\lessons\课件\csspress\2.盒模型.assets\image-20201218160440679.png)
![image-20210104085742577](E:\web\lessons\课件\csspress\2.盒模型.assets\image-20210104085742577.png)
> 上图中 最内层的蓝色色块是 元素内容content
>
> 蓝色外侧的 绿色的是内边距padding
>
> padding外侧的橙黄色的部分是边框border
>
> border 外侧 也就是最外侧的部分是外边框margin
盒模型计算元素的总宽度和总高度:
> 元素的总宽度= 元素的width+左右padding +左右margin+border的左右宽度
>
> 元素的总高度=元素的height+上下padding + 上下margin+border的上下宽度
## css外边距合并叠加
定义: 当两个元素垂直外边距相遇时,他们形成一个外边距,合并后的外边距等于两个发生合并的外边距较大的那个值,左右外边距不会合并
而且只在普通文档流中会发生外边距合并的状况。 行内,浮动,绝对定位的外边距不会合并
合并的结果计算:
  两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
  两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
  两个外边距一正一负时,折叠结果是两者的相加的和。
合并的原因:
  而根据w3c规范两个margin是邻接的必须满足以下条件
  4.1、必须是处于常规文档流非float和绝对定位的块级盒子,并且处于同一个BFC当中。
  4.2、没有线盒没有空隙clearance下面会讲到没有padding和border将他们分隔开
  4.3、都属于垂直方向上相邻的外边距,可以是下面任意一种情况:
    a:元素的margin-top与其第一个常规文档流的子元素的margin-top
    b:元素的margin-bottom与其下一个常规文档流的兄弟元素的margin-top
    c:height为auto的元素的margin-bottom与其最后一个常规文档流的子元素的margin-bottom
    d:高度为0并且最小高度也为0不包含常规文档流的子元素并且自身没有建立新的BFC的元素的margin-top和margin-bottom
出现的情况:
(一)
![image-20210112113853593](E:\web\lessons\课件\csspress\2.盒模型.assets\image-20210112113853593.png)
```
<html>
<head>
<style type="text/css">
* {
margin:0;
padding:0;
border:0;
}
#outer {
width:300px;
height:300px;
background-color:red;
margin-bottom:20px;
}
#inner {
width:50px;
height:50px;
background-color:blue;
margin-top:10px;
}
</style>
</head>
<body>
<div id="outer">
<div id="inner">
</div>
</div>
<p>注释:请注意,如果不设置 div 的内边距和边框,那么内部 div 的上外边距将与外部
div 的上外边距合并(叠加)。</p>
</body>
</html>
```
(二)
多个子元素外边距合并:
div11的高度为0 的时候div1的margin值由 div1,div11,div12的margin合并结果决定
如此例中div1的margin 值为30
![image-20210112114420660](E:\web\lessons\课件\csspress\2.盒模型.assets\image-20210112114420660.png)
```
<html>
<head>
<meta charset="UTF-8">
<title>
盒子模型
</title>
<style>
*{
margin:0;
padding:0;
}
body{
text-align:center;
}
div{
width:200px;
height:200px;
margin:0 auto;
}
#div1{
margin-top:10px;
background:red;
}
#div11{
margin-top:20px;
width:0;
height:0;
background:yellow;
}
#div12{
margin-top:30px;
width:50px;
height:50px;
background:blue;
}
</style>
</head>
<body>
<div id="div1">
<div id="div11"></div>
<div id="div12"></div>
</div>
</body>
</html>
```
解决措施:
给外边距加上如下属性,可以解决外边距合并的问题
border-top: 1px solid white; 给父元素加上边框
overflow: hidden; 设置超出隐藏
padding-top:50px; 给父盒子加padding-top 可以实现同样的效果
margin 复合属性
上右下左
例如:
            margin 一个值得时候定义的是上下左右四个方向的边距
           两个值得时候定义的前一个值是上下的边距  后面的值是左右的边距
            三个值得时候第一个值是上边距 第二个值是左右边距  第三个值是下边距
           四个值得时候是上右下左的边距
padding复合属性
上右下左
例如:
            padding一个值得时候定义的是上下左右四个方向的边距
           两个值得时候定义的前一个值是上下的边距  后面的值是左右的边距
            三个值得时候第一个值是上边距 第二个值是左右边距  第三个值是下边距
           四个值得时候是上右下左的边距
练习1
五环之歌 效果如下:
![image-20210118112058180](E:\web\lessons\课件\csspress\2.盒模型.assets\image-20210118112058180.png)
作业2
分类菜单 效果如下
![image-20210118112453705](E:\web\lessons\课件\csspress\2.盒模型.assets\image-20210118112453705.png)
作业三:
效果如下:
![img](E:\web\lessons\课件\csspress\2.盒模型.assets\1072590-20161225165033198-1543996399.png)
注:
左下角录制工具的水印不用做
图片可以自定义