padding和margin设置成百分比

Margin和Padding是我们在网页设计经常使用到的CSS样式,他们分别是间距和填充,一个作用于盒子外面,一个作用于盒子里面,默认的情况下,这些属性的值都会被计算在盒子的面积里面,在网页开发中的流体布局或者是响应式布局中,经常将Margin和Padding设置成百分数,那么到底这个百分数是多少,他是如何计算的呢?

Margin

假设我们有这样的一段HTML代码,外面一个DIV宽度980px,高度500px,里面有一个子元素DIV,宽度和高度都不设置,然后给他设置margin:10% 5%,这个属性相当于margin:10% 5% 10% 5%

HTML代码

<div class="demo1">
    <div>这个div设置:margin:10% 5%</div>
</div>

CSS代码

.demo1{ height:500px; width:980px; margin:0 auto; background:#EEE; overflow:hidden;}
.demo1 div{margin:10% 5%; background:#666;}

为了方便查看效果,我们还分别为他们设置了不同的背景。

这里还出现了一个小的hack,就是demo1盒子不会紧挨着body,也就是不会定格布局,而且body元素上面还有一段空白,这段空白的高度刚好是.demo1 div元素的margin-top,demo1和.demo1 div元素都是顶格对其的,只要给demo1元素设置overflow:hidden,即可解决这个问题,点击这里查看示例

我们根据以往的理解,.demo1 divmargin应该是:50px 49px 50px 49px,但是运行以后,通过查看盒模型示意图,却发现是:98px 49px 98px 49px,这是怎么回事呢

这个98px是如何得到的呢,其实就是宽度的10%,等等,我们设置TOP为10%,不是应该参考元素的高度么,不信你可以点击这个示例页面看看效果。

总结

从上面的示例和代码,我们可以发现当margin设置成百分数的时候,其top right bottom left的值是参照父元素盒子的宽度进行计算,在w3c的规范中也是这样描述的: margin 的百分比值参照其包含块的宽度进行计算,同样的padding如果设置成百分数的话,其盒子模型和margin是一样的。

这只发生在默认的 writing-mode: horizontal-tb; 和 direction: ltr; 的情况下,当书写模式变成纵向的时候,其参照将会变成包含块的高度。

为什么要选择宽度做参照而不是高度呢?

这其实更多的要从CSS设计意图上去想,因为CSS的基础需求是排版,而通常我们所见的横排文字,其水平宽度一定(仔细回想一下,如果没有显式的定义宽度 或者强制一行显示,都会遇到边界换行,而不是水平延展),垂直方向可以无限延展。但当书写模式为纵向时,其参照就变成了高度而不再是宽度了。

原文地址:https://www.cnblogs.com/juicy-initial/p/8410383.html

时间: 2024-10-21 07:15:51

padding和margin设置成百分比的相关文章

浅谈Margin和Padding值设置成百分数的布局

转自:问说网http://www.uedsc.com/discussion-margin-and-padding-values.html Margin和Padding是我们在网页设计经常使用到的CSS样式,他们分别是间距和填充,一个作用于盒子外面,一个作用于盒子里面,默认的情况下,这些属性的值都会被计算在盒子的面积里面,在网页开发中的流体布局或者是响应式布局中,经常将Margin和Padding设置成百分数,那么到底这个百分数是多少,他是如何计算的呢? Margin 假设我们有这样的一段HTML

行内元素和块级元素的具体区别是什么?行内元素的padding和margin可设置吗?

块级元素(block)特性: 总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示; 宽度(width).高度(height).内边距(padding)和外边距(margin)都可控制; 内联元素(inline)特性: 和相邻的内联元素在同一行; 宽度(width).高度(height).内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变(也就是paddin

padding 和 margin 不为人知的一面 ---(深度整理)

一说起盒模型,大家都会说,content+padding+margin+border. 恩,就这么几个,概念网站都写得清清楚楚了,但是你对他们的理解又有多少? 经常遇到“这里怎么回事?”“明明写了怎么会不起作用?”一找就是半天╮(╯▽╰)╭(我也发生过).归根结底还是对本质不够理解. 这里我就查找了许多资料,整理了一下,现在让我们来挖挖padding和margin的坟吧 ! 在了解padding和margin之前 ,我们先要知道什么是块元素,什么是内联元素(行内元素).一个表格搞定.   块级元

[ jquery 效果 slideDown([speed,[easing],[fn]]) slideUp([speed,[easing],[fn]]) ] 此方法用于滑动显示隐藏的被选元素:动画效果只调整元素的高度,可以使匹配的元素以“滑动”的方式显示出来。在jQuery 1.3中,上下的padding和margin也会被有动画,效果更流畅

此方法用于滑动显示隐藏的被选元素:动画效果只调整元素的高度,可以使匹配的元素以“滑动”的方式显示出来.在jQuery 1.3中,上下的padding和margin也会被有动画,效果更流畅 实例: <!DOCTYPE html><html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my

为什么padding和margin在span中不好用

为什么padding和margin在span中不好用:可能标题的问题并不被所有人认同,有的可能觉得padding和margin是好用的,而有的却认为是不好用的.下面通过实例分别介绍一下两个属性在span中到底好不好用.一.padding属性: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content=&quo

HTML中行内元素的竖直方向的padding和margin是否真的无效

参考资料:Inline elements and padding 今天写一个导航栏时遇到了一个问题:行内元素的padding-top,padding-bottom和margin-top,margin-bottom是不是真的是无效的? 接下来就这个问题将具体分析: 1.行内元素拥有盒子模型么 答案是是的.没错,行内元素跟块级元素一样,同样拥有盒子模型. 2.行内元素的padding-top,padding-bottom和margin-top,margin-bottom是否无效 答案同样是是的.盒子

gravity与layout_gravity//padding与margin

1.gravity与layout_gravity: android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在 view的靠左,靠右等位置.该属性就干了这个. android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayo ut里,你想把该button放在靠左靠右等位置就可以通过该属性设置. 这样就解释了,有什么我们弄个最外布局,然后里面包了几个布局,如果

padding和margin的区别,以及其存在的bug和消除方法!

margin是盒模型的外边距,padding是盒模型的内边距: 用margin时,最好给父级元素加上overflow:hidden:(溢出隐藏) 用padding时,最好给自身加上box-sizing:border-box:(固定边框) margin的bug: 1. IE6中浮动元素3px间隔Bug: 发生场合:发生在一个元素浮动,然后一个不浮动的元素自然上浮与之靠近会出现的3px的bug. 解决方法:右边元素也一起浮动;或者为右边元素添加IE6 Hack _margin-left:-3px;从

padding和margin的区别和作用及各种场合出现的bug

一.padding Padding: 包括padding-top, padding-right, padding-bottom, padding-left, 控制块级元素内部, content与border之间的距离 1.语法结构 (1)padding-left:10px; 左内边距 (2)padding-right:10px; 右内边距 (3)padding-top:10px; 上内边距 (4)padding-bottom:10px; 下内边距 (5)padding:10px; 四边统一内边距