发表于: 2018-11-08 22:45:41
1 849
今天完成的事情:今天学习了负margin:
首先依照我的理解,负margin就是缩小了自己的所占的空间,但是自己本身还可以显示,:
如图可以看到,父级b2没有设置高度,当子级b1margin-bottom为负值时,他的高度也跟着收缩。
我们再来看它本身,在margin属性中一共有两类参考线,top和left的参考线属于一类,right和bottom的参考线属于另一类。top和left是以外元素为参考,right和bottom是以元素本身为参考。
这里就涉及到浏览器最原始的属性,浏览器是以左上角为基准开始渲染、布局排列;所以在文档流,元素都是向左上角汇聚,然后就会出现下面的情况:
如果是margin-left则不会:
这里还涉及到一个知识点,当块级盒子没有设置宽度的时候,他的负margin-left/right,会增大自身的宽度,当然这段宽度是不占实际空间的,如果他左右有相邻的同级元素,是会跟他重叠的。
至于为什么只有自适应宽度才会增加宽度,我的理解是,这个div由于没有具体宽度,默认填满这一行,这是块级元素的基本属性,而当它两边出现负margin时,会告诉浏览器这个div原本显示的区域有一段是不占空间的,浏览器就会增加他的宽度以填满这行区域,所以从显示上看就会多出一块负值的宽度,但是其不会占有空间。
我们在上面说过,由于浏览器自身属性,都是相对左上角排列,负margin-left/top,是相对最近的边框为基准,向其移动;而负margin-right/bottom,由于元素左上角没有移动,所以自身不会相对运动,则以自身为基准,对相邻的同级元素作用,使其向它运动,如果没有他自身属性也是改变过的,只是没有表现出来,这就是经常有人出现设置负值right,没有变化的原因。
其实margin0正值的时候也是一样,左上自己动,右下后续元素动。
通过这个属性,就可以解释下面的布局了:
蓝色div left定宽,红色div父级right-fix与蓝色div同级宽度100%,他俩都浮动,但是right-fix宽度100%不能同行,只能换行,然后当right-fix设置负margin-left:-100px(div left宽度)时,它上浮了,与蓝色重叠并排了:
这里就可以解释为负margin缩小了right-fix的时间所占空间,正好可以让蓝色 left塞进去,所以根据浮动属性,他俩就并排了。
然后红色div right设置margin-left:100px;就可以与蓝色div分隔开显示。
这就形成了左面定宽右面自适应布局
明天计划的事情:继续学习 多列布局,然后学习其中涉及的知识。
遇到的问题:不好理解,进度慢
收获:负margin的具体属性。
评论