冷知识:反常识的margin-top与padding-top与%,你被坑过吗?

摘要:
10%“>margin:相当于<margin-bottom:margin-top和padding-top是以margin-and-padding的格式编写的。]然而,margin,无论是左还是右,还是上还是下,都与父元素的宽度有关!父元素的宽度!%用于填充,也与父元素宽度有关。]现在。
前言

之前本人写页面的时候,发现总是不能达到想要的效果,例如:

<html>
<div style="100%;height:100%">
  <div style="100%;height:10%">head</div>
  <div style="100%;height:60%;margin:10% 0 10% 0;">body</div>
  <div style="100%;height:10%">foot</div>
<div>
</html>

本来设想的是占满整个页面的3个div,分别高10%、60%、10%,再加上间隔有两个10%,正好100%。

【PS:<margin:10% 0 10% 0> 等价于 <margin-top:10%; margin-bottom:10%> 】

【为了简便,margin-top与padding-top就采用margin与padding的格式写了】

然而,页面莫名其妙地多出了滚动条,高度超出了100%;(横屏模式下)

本人的微信小程序也用了类似的语句,结果就是foot部分的元素比预期的要高一些,导致底部出现留白(竖屏模式下)

这是怎么回事?今天本人通过测试与百度,终于找到了原因。

结论

重要的话说三遍:

margin无论left还是right还是top还是bottom都是相对于父元素的width的!

是相对于父元素的width的!

父元素的width!

【PS:padding使用%也是相对于父元素的width】

就在现在,网上仍有许多文章认为margin-top使用%是相对于父元素的height,但并不是这样,只要自己试试就知道了;

由于"10%"相对于父元素的width,"height:10%"相对于父元素的height,

导致人们惯性地认为,

"margin-left:10%"相对于父元素的width,"margin-top:10%"相对于父元素的height(我开始也是这么想的),

然后就被坑了!

不得不说margin和padding相对于父元素的width这个设定真的很迷,但是我们改变不了语言,只能适应语言了。

解决方法

为了实现页面效果,可以将前言中的代码块修改为:

<html>
<div style="100%;height:100%">
  <div style="100%;height:10%">head</div>
  <div style="100%;height:10%"></div>
  <div style="100%;height:60%;">body</div>
  <div style="100%;height:10%"></div>
  <div style="100%;height:10%">foot</div>
<div>
</html>

由于margin不太好用,因此可以使用空白div代替间隔,这样就实现了3个div占满整个页面的效果了,分别高10%、60%、10%,还有两个间隔10%,加起来正好100%。

/*

目前,margin与padding使用%都是相对于父元素width的,如果将来语法改变了,本文也就过时了,还请大家留言给本人,本人会修改或删除此文,谢谢!

2020.6.29

*/

免责声明:文章转载自《冷知识:反常识的margin-top与padding-top与%,你被坑过吗?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇javascript 中数组的创建 添加 与将数组转换成字符串 页面三种提交请求的方式hibernate(三) 一对多映射关系下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

asp.net 生成静态页 自动分页

template.html 代码 <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xh...

es6中class类的全方面理解(二)------继承

继承是面向对象中一个比较核心的概念。ES6 class的继承与java的继承大同小异,如果学过java的小伙伴应该很容易理解,都是通过extends关键字继承。相较于ES5当中通过原型链继承要清晰和方便许多。先上代码: class Cucurbit{ constructor(name,color){ console.log("far...

css中div透明度有几种方法设置?

css设置div背景透明有两种方法:第一种使用opacity:0~1,这个方法有个缺点,就是内容也会跟着透明;第二种方法就是rgba(0,0,0,0~1),使用这个方法就只会设置div背景透明,而不会影响到div里的内容。 一、css rgba()设置颜色透明度 语法: rgba(R,G,B,A); RGBA 是代表Red(红色) Green(绿色) Bl...

Maven 多模块父子工程 (含Spring Boot示例)

 一、为什么要用Maven多模块 假设有这样一个项目,很常见的Java Web应用。在这个应用中,我们分了几层: Dao Service Web 对应的,在一个项目中,我们会看到一些包名: org.xx.app.dao org.xx.app.service org.xx.app.web org.xx.app.util 但随着项目的进行,你可能会遇...

微信内置浏览器在使用video标签时(安卓)默认全屏的原因及解决办法

根据X5论坛得到的答案是:设计如此。   腾讯真是越来越嚣张了,一家独大后用户体验都不注重了(不给程序员留活路)。   听说有个申请加入vdeo白名单的,域名验证后就可以解决默认全屏(反正我是没见过申请入口,不给钱,想进来没门。) 最终的解决办法:   将video转化为canvas,逐帧播放,不过canvas貌似最高可以达到60帧/s,不过页够用了(扯淡...

【spring】jdbcTemplate之sql参数注入

demo @Repository("jdbcDao") public class JdbcTemplateDao { @Autowired private JdbcTemplate jdbcTemplate; @Autowired private NamedParameterJdbcTemplate namedTe...