当前位置: 首页 > Web前端 > HTML

margin

时间:2023-04-02 19:00:11 HTML

1.margin移动的参考基线分析:盒子的实际尺寸=盒子的物理尺寸+正margin(物理尺寸是指没有margin的盒子的尺寸,也就是框的大小,包括边框)如果为负值top或left值将导致框向上或向左移动,负bottom或right将影响下方框的显示指南。2.负margin-bottom没有设置高度的块元素,它的高度是自动的,具体由它里面文档流的最终位置决定。如果margin-bottom为负值,会导致元素的边框缩小,其效果只会影响文档流的边框。文档流边界的减少将产生以下两个效果。1.后面的元素会占据收缩产生的那部分文档流,从而形成后面的元素覆盖前面的元素的效果。2.当父元素没有指定高度时,父元素的边界会向上收缩,即它的父元素的边界在子元素的边界之上。总之:margin-bottom为负值只会影响父元素的高度(前提是父元素没有明确指定高度),而不能影响子元素本身的高度!3.负的margin-rightmargin-right只会改变元素本身的高度宽度(前提是父元素的大小固定,子元素的宽度没有设置),父元素的宽度不会被修改。在这种情况下,负的margin-left也会改变元素本身的宽度。为什么负margin-right/margin-left改变元素宽度?因为如果P是块元素,没有指定宽度,那么p的width+padding+border+margin=父div的宽度(这里说的是水平方向)。这里假设padding和border为0,父div宽度为400px。p的宽度是继承的。如果不设置margin,p的宽度为400px。当margin-left:-100px;时,p.width+(-100px)=400px。因此,p的宽度变为500px。这里说的p假设是inheritwidth。如果指定了p的宽度,margin-left和margin-top为负值会导致p元素的位置发生变化。4、负边距的应用多列等高布局(原理:负边距-底部)body,p{margin:0;填充:0;}#testdiv{溢出:隐藏;宽度:660px;margin:0auto;}#left,#center,#right{margin-bottom:-400px;padding-bottom:400px;}#left{float:left;宽度:180px;背景:#777;}#center{浮动:左;宽度:300px;背景:#888;}#right{浮动:正确;宽度:180px;背景:#999;}p{颜色:#FFF;文本对齐:居中style="height:50px"

style="height:100px"

style="height:200px"

不设置padding-bottom和margin-bottom属性时,高度不同,外层DIV的高度就是内层最高的DIV高度。当设置了padding-bottom和margin-bottom属性,并且没有设置testdiv的overflow属性时,外层DIV的高度仍然是200,内层div的边界低于外层div的边界。设置好testdiv的overflow属性后,外层div的高度为200,也就是内层最高div的高度。如果每列的高度小于200,则padding不够。去掉列表的右边距(原理:负margin-right/margin-left)实现中间有一些空隙的布局。ul,li{列表样式:无;填充:0;边距:0;}.container{高度:210px;宽度:490px;边框:5px实心#000;overflow:hidden;/*隐藏多余的内容*/}ul{height:210px;背景色:红色;右边距:-30px;/*负的margin-right相当于ul的宽度向右增加30px*/}li{height:100px;宽度:100px;背景:#eee;向左飘浮;margin-right:30px;如果ul不加margin-right:-30px;,那么一行放不下ul加margin-right:-30px;,会导致父元素要被超越,所以需要在父元素上加上overflow:hidden;5.marginfolding折叠是指相邻普通流中的两个或多个块元素垂直方向的margin会折叠1个或2个或更多表示数量必须大于1,同时也说明折叠是相互之间的行为元素,A和B之间没有折叠,B也没有和A折叠。2.相邻是指它们没有被非空内容、padding、border或clear隔开,表示它们的位置关系。注意父元素的margin-top如果不分开,在其正常流中将与第一个子元素(非浮动元素等)的margin-top相邻;只有父元素的高度是“auto”的情况下,它的margin-bottom会在其正常流中与最后一个子元素(非浮动元素等)的margin-bottom相邻。3.垂直方向指的是具体的方位。只有垂直方向的页边会被折叠,也就是说水平方向的页边不会被折叠。折叠发生1.相邻兄弟元素上的元素的margin-bottom与下一个元素的margin-top重叠。2.父元素和first/last子元素父元素的margin-top与子元素的margin-top重叠,或者父元素的margin-bottom与子元素的margin-bottom重叠。3、空块元素的margin-top和margin-bottom重叠(内容为空,垂直方向的border和padding为0)。-block元素、absolute和fixed定位元素的边距在垂直方向上不会与其他元素的边距折叠。(这里指的是上下相邻的元素)创建块级格式化上下文的元素不会与其子元素进行边距折叠。BFC可以被以下触发:float(none除外),overflow(visible除外),display(table-cell/table-caption/inline-block),position(static/relative除外)2、使元素不相邻添加border或padding或lineboxsmargin重叠计算规则1.取正和正中较大的值(如果都是正,取最大的正值)2.正负值相加(一正一负,然后取两者相加后的值)3.negative和negative的最负值(如果都是负数,取绝对值最大的负值)。深入理解marginoverlap和负margin对元素尺寸的影响,参考:W3C官方介绍collapsing-margin。