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

你所不知道的margin属性

时间:2023-03-31 00:48:03 CSS

前言感谢 本文总结于张新旭老师授课的CSS深入理解margin课程。感谢张总的辛勤付出!CSS难学 作为前端狗,我们每天都要和网页打交道。当UI给你发设计稿的时候,CSS的知识就更重要了。然而,CSS这种标记语言却时常让我头疼:不合逻辑,充满潜规则,以至于每次做项目,大部分时间和精力都浪费在调整布局和样式上,详情点击知乎为什么CSS这么难学?问题说出了我的心声:( 可是谁叫我们吃这碗饭呢,不管怎么样,一定要迎难而上,学好CSS,向张老师学习!文字边距是一个属性性格很强的,下面,我将从各个方面来解释margin的恐怖元素尺寸的影响通常一个元素的尺寸可以分为:视觉尺寸和占用尺寸occupationsize-outerWidth(border-margin)margin对这两个size有什么影响首先这两个size都需要满足一定的条件visualsize的影响条件适用于没有设置width/height的块级元素(width和height设置死了,怎么影响呢?)不包括floatabsolutefixed元素,inlinelevels,table-cell元素只适用于水平维度(margin-left/margin-right)的影响条件占用尺寸适用于block/inline-block水平元素适用于任何方向,与宽度/高度值无关。内联元素只影响水平方向(后面会提到)影响示例margin影响元素的视觉水平尺寸。边距的视觉大小影响占用的大小。这可以说是缘分的本命,就不举例了。百分比单位一般来说,保证金的单位中,百分比单位是最晕的。普通元素的百分比边距是相对于容器的宽度计算的

绝对定位的百分比边距是相对于具有定位属性的第一个祖先元素的宽度计算的(relative/absolute/fixed)
overlap详解Overlap是最重要的潜规则利润。发生相邻兄弟元素parentandfirst/lastchild空块级元素(self和self)重叠条件块级元素(不包括float和absolute元素)不管writing-mode,只发生在Vertical方向(margin-top/margin-bottom)parent-childoverlappingconditionmargin-topoverlappingparentelementnon-formattingcontextelementisnotsetoverflow:hiddenparentelementhasnoborder-topsetparentelementhasnopadding-topsetparentelementandfirst没有内联元素分隔子元素之间的margin-bottom重叠父元素非格式化上下文元素无溢出:隐藏父元素没有border-bottom设置父元素没有padding-bottom设置父元素和第一个子元素没有内联元素split父元素有noheight,min-height,max-height限制空块级元素margin重叠条件1.元素没有设置边框2.元素没有设置padding3.Th里面没有内联元素4.没有高度,或者min-height计算规则是取大值两个元素之间的垂直距离为:#加上margin-top值的正负值顶部元素两个元素之间的垂直距离为:#top元素margin-top值加上#bottom元素的margin-bottom值为负且最负值两个元素的垂直距离为:#top元素的margin-top值parent与第一个/最后一个子元素重叠为子元素设置垂直边距相当于为父元素设置相同的垂直边距属性,也就是说,当父子元素之间的边距重叠时,它们共享一个margin属性Overlapping表示连续的段落或列表等,如果没有margin重叠,页面任何地方的布局都会不自然,嵌套或直接放置任何空的div都不会影响原来的布局。任意数量的空p元素都不会影响原始阅读布局。marginauto当你使用marginauto时,你应该会想到一个词:填充一个没有设置宽高的块级元素,宽度会自动填充。如果一边是固定值,一边是auto,那么auto就是剩余空间的大小如果两边都是auto,那么平分剩余空间的例子如下:margin:auto0!==在垂直中心上方,我们可以设置margin:0auto作为块级元素来实现水平居中,但是为什么margin:auto0不会垂直居中呢?答:块级元素会自动填充可用的水平尺寸,但不会自动填充垂直尺寸,因为它根本没有任何可用的垂直空间。也就是说margin:0auto,总有一个尺寸可以填充!而margin:auto0没有可以填充的尺寸。失败情况当子元素的宽度大于父元素的宽度时,无法通过margin:0auto实现居中,因为此时已经没有空间可以填充了。当宽度超过父元素时,边距就已经是负值了。垂直居中writing-mode和垂直居中绝对定位元素失败场景内联水平元素的垂直边距无效(margin-top/margin-bottom)marginoverlapabsolutelypositionedelementsnon-positionedorientationmarginvalueis"invalid"因为绝对定位元素不在文档流中,与相邻元素没有关系,所以无法设置margin和普通元素一样,推开其他元素margin是遥不可及的,因为有些元素破坏文档流,设置floatabsolute,造成假象,margin不会作为标准display:table-cell/display:table-row和基于这些损坏元素的其他声明的保证金无效!除了一些被替换的元素,这是根据每个浏览器的实现来区分的。比如为button元素声明display:table-cell,但是在chrome中,button的display属性是inline-block。inline特性导致margin无效。margin-top:负无穷大,但小于1em时无效。因为是内联元素,所以默认是基线对齐,x字母的底边对齐。无论保证金值有多大,都不起作用。margin负无穷大分析其他属性margin-start正常流向,margin-start相当于margin-left,两者重叠不相加如果水平流向是从右向左,margin-start相当于margin-在垂直流下(写作-mode:vertical-*;)margin-start相当于margin-topmargin-end和margin-start相对margin-beforedefault相当于margin-topmargin-afterdefault相当于margin-bottommargin-collapsemargin-collapse:collapse;(默认值)发生重叠margin-collapse:discard;取消重叠,margin重叠为0,没有marginmargin-collapse:separate;没有发生重叠,margin重叠为margin-top+margin-bottom,再次感谢张新旭老师的辛勤付出!深入web全栈技术,坚持原创,文章更新虽不确定,但只求质量,如果您喜欢本文,欢迎支持关注。