博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
padding和margin设置成百分比
阅读量:6147 次
发布时间:2019-06-21

本文共 1298 字,大约阅读时间需要 4 分钟。

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

 

Margin

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

HTML代码

    
这个div设置:margin:10% 5%

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

你可能感兴趣的文章
openstack4j
查看>>
Velocity初探小结--Velocity在spring中的配置和使用
查看>>
Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext
查看>>
C# 获取本机的所有ip地址,并过滤内网ip
查看>>
Sqoop 产生背景(一)
查看>>
Oracle Redo Log
查看>>
js-JavaScript高级程序设计学习笔记14
查看>>
std::bind和std::function
查看>>
2016总结
查看>>
指令周期 机器周期 状态周期 振荡时钟周期(时钟周期)(转)
查看>>
恶意程序入侵 dbuspm-session 发现了新的方法制这种恶意程序
查看>>
JavaWeb应用出现HTTP 500-Unable to compile class for JSP 错误 的解决
查看>>
六种微服务架构的设计模式
查看>>
Unity Remote 5 使用
查看>>
swift开发多线程篇 - 多线程基础
查看>>
《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)...
查看>>
Selenium2+python自动化37-爬页面源码(page_source)
查看>>
pm2-web
查看>>
011-Spring Boot 运行流程分析SpringApplication.run
查看>>
[解决方案]sql server复制需要有实际的服务器名称才能连接到服务器
查看>>