博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSS——对position定位和margin-top的理解
阅读量:7090 次
发布时间:2019-06-28

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

一、常见定位方式

1.positon:absolute (脱离文档流)

  生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位 (这里的父元素是指定位方式为relative和absolute的父元素)。 如果一直没找到 relative或者absolute定位的第一个父元素,则父元素为body。  绝对定位元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

2.positon:fixed(脱离文档流)

  生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

3.position:relative(未脱离文档流,正常位置仍在)

  生成相对定位的元素,相对于其文本流原始正常位置进行定位。例如,"left:20px" 会使元素相对于原始正常位置向左移动20像素。

比如:

            

结果:

把上面代码中的 下面两行代码 的注释去掉,

position: relative;top: 20px;

结果:

再比如:在上面的代码中,再加入一个div

            

结果:

结论:可以看出,class='b'的div设置为relative后,并没有脱离文档流,该div在文档流中的原始位置仍然存在。因此在加了class='c'的div块后,class='a'的div和class='c'的div之间的空隙就是class='b'的div大小,设置为relative的class='b'的div并没有脱离文档流,原始位置依然存在,占了一定空间。

 

4.position:static

  默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。

 

二、margin-top的理解

  margin-top意思是设置元素的上外边距,这个很好理解,但是在实际使用过程中,却有一些新的理解体会。

1.给div1内部的div2设置一个margin-top,结果它的父级div1跟着div2一起下移了。或者给一个div1设置一个margin-top,不给div1内部的div2设置margin-top,结果div2跟着div1一起下移了。

例如:

            

结果:

将上面代码中div嵌套顺序换一下,发现仍然是整体下移。

结果:

这里只是因为class="b"的div更小,被class="a"的div覆盖了,所以会看不到绿色div(其实是藏在红色div下)。

 

2.两个同级元素div1和div2(先div1再div2),给div1设置一个margin-top,结果div1和div2整体一起向下移动。(当div1在div2后面,给div1设置一个margin-top,不会出现两个div整体下移情况)。这里不再举例说明。

3.margin-top的值为百分数时,情况不一样。比如 margin-top:10%,是按照父亲宽度的10%计算,而不是父亲高度的10%。

 

注: 以上的情况的position是relative或者static,对于absolute结果会有些变化,尝试了一下,设置为absolute(或者设置float,比如float:right)会使margin-top独立,不会共享。

 

结论:所有毗邻的两个或更多盒元素的margin将会合并为一个margin共享之。毗邻的定义为:同级(按顺序,前面的设置margin,后面的会共享margin)或者嵌套(没有顺序,子元素或者父元素任意一个设置margin,所有元素都会共享margin)的盒元素,并且它们之间没有非空内容、Padding或Border分隔。

 

转载于:https://www.cnblogs.com/FHC1994/p/10038353.html

你可能感兴趣的文章
Consul安装使用
查看>>
tomcat事件处理机制
查看>>
JS BUG 传递数字过大,数据值会变化
查看>>
橡皮筋进度条ElasticProgressBar
查看>>
spring boot引入json,jsonobject,需要指定jdk15
查看>>
企业架构 - 涉众管理(Stakeholder Management)
查看>>
Ubuntu11.10 解决rar文件解压错误
查看>>
sqlplus: error while loading shared libraries: /u01/app/lib/libclntsh.so.11.1
查看>>
ORACLE等待事件:enq: TX - row lock contention
查看>>
使用Fiddler2录制HTTP操作脚本
查看>>
响应activex事件
查看>>
Winform 进程之间通讯的几种方法
查看>>
Google LOGO现代舞舞蹈动画
查看>>
有人3见解
查看>>
[python]decimal常用操作和需要注意的地方
查看>>
Ubuntu 网卡信息2
查看>>
android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明...
查看>>
java中处理字符编码(网页与数据库)(转)
查看>>
[leetcode]Path Sum II
查看>>
NTFS For Mac 如何简单操作
查看>>