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

margin-padding百分比值的计算

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

1。百分比介绍当一般元素的宽度用百分比值表示时,该元素包括外边距在内的总宽度取决于父元素的宽度,所以有可能得到一个“流”的页面,即元素的边距增大或缩小以适应父元素的实际大小。如果为该文档设置该样式,使其子元素使用百分比边距,当用户修改浏览器窗口的宽度时,边距将相应扩大或缩小。margin-right/margin-left的百分比值是相对于父元素的宽度计算的,这个比较容易理解;为什么margin-top/margin-bottom也是基于父元素的宽度?2.为什么?CSS权威指南中的解释:如果高度计算是相对于父元素,就会形成死循环。“我们认为正常流中的大多数元素都会足够高以包含其后代(包括边距)。如果一个元素的顶部和底部边距是父元素高度的百分比,则可能会导致无限循环。父元素的高度会增加以适应后代元素上下边距的增加,相应的,上下边距也会因为父元素高度的增加而增加,形成死循环。”还有一种说法,根本原因不是死循环。例如,张新旭认为,相对于高度计算,大多数情况下计算出的值为0,这与装修没什么区别。最好计算相对宽度,因为CSS默认是水平流,计算出来的值永远有效,我们也可以利用这个属性来实现一些有趣的布局效果。即面向场景、面向需求的设计,这样的设计让我们很容易实现自适应等比例矩形效果。总之,一言以蔽之:在默认水平文档流向下,CSSmargin和padding属性的垂直百分比值是相对于父元素的宽度计算的。3.小栗子1

#container{padding-top:50%;//保证金顶部:50%;background-color:pink;}当div中没有??内容时,实现一个宽高1:2的小矩形。填充顶部:50%;表示元素的高度是宽度的一半。填充顶部:100%;可以实现宽高为1:1的小矩形。(改为padding:50%`,实现了一个宽高1:1的小矩形,因为50%+50%=100%;)从盒模型可以看出,虽然内容高度为container为0,由于Withpadding与内容宽度一致,整体视觉效果好像被拉长了。使用方法:padding-top用于设置元素的纵横比;当父元素的宽度发生变化时,该元素将保持其自身固定的纵横比。4.对于大多数应用来说,布局并不要求有固定的比例,但是有一个例外,就是图片,因为图片的原始大小是固定的。在传统的定宽布局中,我们会为图片设置特定的宽高值,以保证我们图片所占的区域是稳定的;但是在移动端或者响应式开发的情况下,图片最终的宽度很小。可能不确定。这时候需要的不是设置图片的固定尺寸,而是设置比例。为了保持图片的纵横比不变,即保持原来的尺寸比例不变,元素的高度必须随元素自适应变化。对于复杂的布局,如果图片的宽度不是固定自适应的,我们通常会想到这样一个取巧的做法,就是只设置图片的宽度,比如img{width:100%;},图片高度不限。图片的内容是用来展开的,这样图片所占的高度会从0变为计算出的高度,视觉上会有明显的元素跳跃,代码层面会有布局重新计算。即使图片加载速度很快,容器在图片加载前后也会有一个变形过程,也就是俗称的“闪烁”。如果图片加载不出来,整体布局会更加难看。所以还是需要限制图片的高和宽,但同时要保证宽度自适应。为子元素/伪元素设置margin/padding以扩展容器由于添加子元素违反HTML语义,因此建议使用伪元素(:after)来实现此解决方案。
#container{position:relative;背景色:粉色;溢出:隐藏;//使用margin-top时,需要触发BFC来消除其他元素可能出现的marginfolding问题}.placeholder:after{content:'';显示:块;保证金顶部:100%;}如何向容器内添加内容那么,打开容器后,如何向容器中添加内容(图片、文字等)呢?使用position:absolute;#container{position:relative;背景色:粉色;溢出:隐藏;}.placeholder:after{内容:'';显示:块;保证金顶部:100%;}img{位置:绝对;顶部:0;width:100%;}参考CSSpercentagepadding实现固定比例图片自适应布局使用margin/padding的百分比值实现高度自适应(多用于placeholders避免闪烁)