### 一. 父元素中第一个子元素margin-top无效问题
**这个问题发生的原因是根据规范,一个盒子如果没有上补白(padding-top)和上边框(border-top),那么这个盒子的上边距会和其内部文档流中的第一个子元素的上边距重叠。**
如下:
```
<div class="parent">
<div class="child"></div>
</div>
```
```
* {
padding: 0;
margin: 0;
}
.parent {
width: 200px;
height: 100px;
background: yellowgreen;
}
.child {
width: 100px;
height: 100px;
background-color: aqua;
margin-top: 30px;
}
```
显示效果如图:
![](images/bug1.png)
此时,虽然设置了`.child`margin-top为30px, 但是父元素与子元素一起往下移了。
再说白点就是:父元素的第一个子元素的上边距margin-top如果碰不到有效的border或者padding.就会不断一层一层的找自己“领导”(父元素,祖先元素)的麻烦。只要给领导设置个有效的 border或者padding就可以有效的管制这个目无领导的margin防止它越级,假传圣旨,把自己的margin当领导的margin执行。
### 二. 解决办法:
1.给父元素加一个边框或者padding-top
2.给父元素加一个overflow: auto或者hidden
3.利用`before`伪类给父元素创建空白区域,使第一个子元素变成空table伪类,既可解决(推荐)
如:
```
.parent::before {
display: table;
content: "";
}
```
![](images/bug2.png)
- 空白目录
- 1. css选择器
- 1.1 基础选择器
- 1.2 伪类
- 1.3 first-child与:first-of-type的区别
- 1.4 nth-child(:not())与nth-of-type(:not())
- 1.5 属性选择器
- 2. html标签分类&css样式继承
- 2.1 html标签分类
- 2.2 样式继承
- 2.3 font
- 3. css动画
- 1. transition
- 2. animation
- 4. 布局位置方面
- 4.1 实现图片左右垂直居中
- 4.2 父元素中第一个子元素margin-top无效问题
- 4.3 position定位
- 5. 关于浮动
- 5.1 浮动的呈现效果
- 5.2 清除浮动的三种方式
- 5.3 inline-block与block浮动的对比
- 6. 弹性布局
- 7. border
- 7.1 添加border不影响盒子大小的三种方式
- 7.2 利用border画三角形
- 8. css预处理--sass
- 8.1 变量
- 8.2 嵌套
- 8.3 导入SASS文件
- 8.4 静默注释
- 8.5 混合器@mixin
- 8.6 继承@extend
- 8.7.function
- ! element语法
- 9. grid 布局
- 10. filedset 使用
- css面试题
- 1.题目汇总
- 2.回流(重排)和重绘
- 3.浏览器渲染流程
- 4.水平垂直居中
- 5.flex布局