maigin塌陷、margin合并两大问题分析及解决方法

编程之前要先初始化。
*{
margin:0;
padding:0;


两栏布局:步骤:1.先让两元素分布在一行(下面的元素上去)
2.再让左边的(或右边的)元素给右边的(左边的)元素让出右边的元素的距离。

代码示例:

maigin塌陷、margin合并两大问题分析及解决方法

效果:

maigin塌陷、margin合并两大问题分析及解决方法

注意:要先写right,再写left。
因为right先出生,然后left再出生,这样粉色在第一行,而黑色在第二行,当设置粉色为绝对定位时,黑色就可以串上去;
而如果使黑色先出生,粉色后出生,此时粉色在第二行,接下来设置粉色为绝对定位,也只对黑色起作用,而黑色在初始化位置,所以不作任何改变。

代码如下:

 maigin塌陷、margin合并两大问题分析及解决方法

效果:

 maigin塌陷、margin合并两大问题分析及解决方法


 ---------------------------------------------分割线-------------------------------------------------------


两大问题分析及解决办法:

maigin塌陷:
理解:我们给子元素设置距离顶层的距离为100px,它却不动,就像顶层不存在(塌陷)了一样。
过程:父子嵌套的元素垂直方向的margin,父子会基本粘合在一起,取他俩的最大值。

 maigin塌陷、margin合并两大问题分析及解决方法

解决办法:
bfc
block format context
如何触发一个盒子的bfc:
1.position:absolute设置定位后盒子自然就变成bfc元素了
2.display:inline-block
3.float:left/right向左向右浮动
4.overflow:hidden溢出盒子部分隐藏

--1.--2.--3.
直接写到父级元素里面面就可以解决塌陷问题
--4.改变大盒子的渲染规则(bfc),塌陷问题就可以解决。
以上问题都能触发bfc,那我们用哪个?

 maigin塌陷、margin合并两大问题分析及解决方法

maigin塌陷、margin合并两大问题分析及解决方法


解决塌陷问题时都会带来新的问题:
--1.如果只想让元素好好地固定在原有位置,使用绝对定位,下面的元素会窜上来。
--2.有时候展示形式想呈现独占一行的样式,可是现在设置成inline-bolck也是不行的。
--3.需要清除浮动
--4.如果现在想保持原有样式,但此时外面的部分会被隐藏。

所以当我们使用这些解决办法时,要视我们的需求而定。

 

margin合并问题:
demo1和demo2是兄弟结构,兄弟结构垂直方向的margin是重合的。
图示中,红绿本应该间隔200px,可是现在因为合并,间隔为100px。

 maigin塌陷、margin合并两大问题分析及解决方法

 

解决办法:
bfc
但是为了解决此问题就加一个无用的结构是不可行的(margin塌陷问题中没有加HTML来解决,是直接在右边的文件里写的),所以这个问题我们不解决,直接通过计算的方法来弥补。

 maigin塌陷、margin合并两大问题分析及解决方法

 

 

浮动模型:
使元素站队

 maigin塌陷、margin合并两大问题分析及解决方法

 

 

可以直接在上面加边距:

 maigin塌陷、margin合并两大问题分析及解决方法

 

也可以去掉边距:

 maigin塌陷、margin合并两大问题分析及解决方法

 

特点:
1.浮动元素产生了浮动流
所有产生浮动流的元素,块级元素看不到他们;
产生了bfc的元素和文本类属性(inline)的元素以及文本都能看到(在外面,不覆盖)浮动元素。

 

产生问题:边框包不住浮动元素:下边框消失了,父级元素不能包住子集元素
产生原因:因为里面的浮动元素产生了浮动流,浮动流对块级元素有影响,使块级元素看不到了


解决办法:

方法1:

在元素的最后一行,加一个p元素,给它的class加一个clear,目的是消除浮动,就能使下边框出现。

clear只作用于块级元素,如果不是块级元素,则要加display:block使其显示方式变成块级元素。

当使用position:absolute、float:left/right时,从内部把元素转换成inline-block。

 

如图:

 maigin塌陷、margin合并两大问题分析及解决方法

 maigin塌陷、margin合并两大问题分析及解决方法

方法2:

给后面的伪元素加clear

 maigin塌陷、margin合并两大问题分析及解决方法

也可以实现:

 maigin塌陷、margin合并两大问题分析及解决方法

 

一个标签从他诞生的时候,它的前标签的后面、后标签的前面就会随之产生两个伪元素。

 maigin塌陷、margin合并两大问题分析及解决方法


伪元素:它的元素结构是存在的,但它不在html里面。


选出伪元素:span::before选出标签前面的伪元素
span::after选出标签后面的伪元素


当在伪元素里添加背景之类的属性时,要加display:inline-block。因为伪元素是一个行级属性,所以当给它设置宽高时,就要加display:inline-block。

 

伪元素就像一个正常的元素,可以加所有属性,包括定位等等。

 maigin塌陷、margin合并两大问题分析及解决方法

maigin塌陷、margin合并两大问题分析及解决方法


关于元素:

一个标签从他诞生的时候,它的前标签的后面、后标签的前面就会随之产生两个伪元素。

伪元素:它的元素结构是存在的,但它不在html里面。

选出伪元素:

span::before选出标签前面的伪元素

span::after选出标签后面的伪元素

当在伪元素里添加背景之类的属性时,要加display:inline-block。因为伪元素是一个行级属性,所以当给它设置宽高时,就要加display:inline-block。

伪元素就像一个正常的元素,可以加所有属性,包括定位等等。