html中父子元素的解释,CSS 子绝父相 理解

首先你必须知道的是:top、right、bottom、left这四个属性要生效的话,必须得设置相对定位/绝对定位,即position:relative;或者position:absolute;,也就是说top、right、bottom、left是为相对定位/绝对定位而生的。

子绝父相就是:子元素为绝对定位(position:absolute;),父元素为相对定位position:relative;。例如A为子元素,那么父元素B必须包含A,也就是说AB一定是嵌套关系(父子关系),不可以是兄弟关系。

A为浏览器(可以理解为窗口、可视区域、代码中的body标签) 浏览器中有B, B嵌套了C,C嵌套了D,D设置了绝对定位:

情况一:如果B设置了相对定位,C也设置了相对定位,那么在D中设置的位置(top\right\bottom\left)是相对于C来说的,此时和B一点关系都没有

情况二:如果B设置了相对定位,C没有设置相对定位,那么在D中设置的位置(top\right\bottom\left)是相对B来说的,此时和C一点关系都没有

情况三:如果B没有设置相对定位,C设置了相对定位,那么在D中设置的位置(top\right\bottom\left)是相对C来说的,此时和B一点关系都没有

情况四:如果B没有设置相对定位,C也没有相对定位,那么在D中设置的位置(top\right\bottom\left)是相对于浏览器A来说的。

以上内容总结:D设置的位置(top\right\bottom\left) 只和 距它最近的设置了相对定位的父类有关,如果父类没有设置相对定位,则和浏览器(body标签)产生关系。即:子绝父相符合就近原则

情况一:事例

事例代码

子绝父相

/*清除浏览器默认间距 */

* {

margin: 0;

padding: 0;

}

.b{

position: relative;

background-color: red;

width: 400px;

height: 400px;

margin: 100px 0px 0px 100px;

/*解决外边距塌陷的问题: 父元素嵌套子元素,子元素设置了上或下外边距。

例如margin-top:10px或者margin-bottom:10px或者margin:10px 0 20px 0,

就会造成父元素也跟着子元素向下或者向上移动的问题,实际上父元素并没有写任何上或下外边距边距的代码。*/

overflow: hidden;

}

.c{

position: relative;

background-color: blue;

width: 200px;

height: 200px;

margin: 50px 0 0 50px;

}

.d{

position: absolute;

background-color: orange;

width: 40px;

height: 40px;

top:100px;

left: 100px;

}

我是D

事例效果截图

ee4909360904

image.png

情况二:事例

事例代码

子绝父相

/*清除浏览器默认间距 */

* {

margin: 0;

padding: 0;

}

.b{

position: relative;

background-color: red;

width: 400px;

height: 400px;

margin: 100px 0px 0px 100px;

/*解决外边距塌陷的问题: 父元素嵌套子元素,子元素设置了上或下外边距。

例如margin-top:10px或者margin-bottom:10px或者margin:10px 0 20px 0,

就会造成父元素也跟着子元素向下或者向上移动的问题,实际上父元素并没有写任何上或下外边距边距的代码。*/

overflow: hidden;

}

.c{

background-color: blue;

width: 200px;

height: 200px;

margin: 50px 0 0 50px;

}

.d{

position: absolute;

background-color: orange;

width: 40px;

height: 40px;

top:100px;

left: 100px;

}

我是D

事例效果截图

ee4909360904

image.png

情况三:以为遵循就近原则,所以和情况1效果一样。

事例代码

子绝父相

/*清除浏览器默认间距 */

* {

margin: 0;

padding: 0;

}

.b{

background-color: red;

width: 400px;

height: 400px;

margin: 100px 0px 0px 100px;

/*解决外边距塌陷的问题: 父元素嵌套子元素,子元素设置了上或下外边距。

例如margin-top:10px或者margin-bottom:10px或者margin:10px 0 20px 0,

就会造成父元素也跟着子元素向下或者向上移动的问题,实际上父元素并没有写任何上或下外边距边距的代码。*/

overflow: hidden;

}

.c{

position: relative;

background-color: blue;

width: 200px;

height: 200px;

margin: 50px 0 0 50px;

}

.d{

position: absolute;

background-color: orange;

width: 40px;

height: 40px;

top:100px;

left: 100px;

}

我是D

事例效果截图

ee4909360904

image.png

情况四:

事例代码

子绝父相

/*清除浏览器默认间距 */

* {

margin: 0;

padding: 0;

}

.b{

background-color: red;

width: 400px;

height: 400px;

margin: 100px 0px 0px 100px;

/*解决外边距塌陷的问题: 父元素嵌套子元素,子元素设置了上或下外边距。

例如margin-top:10px或者margin-bottom:10px或者margin:10px 0 20px 0,

就会造成父元素也跟着子元素向下或者向上移动的问题,实际上父元素并没有写任何上或下外边距边距的代码。*/

overflow: hidden;

}

.c{

background-color: blue;

width: 200px;

height: 200px;

margin: 50px 0 0 50px;

}

.d{

position: absolute;

background-color: orange;

width: 40px;

height: 40px;

top:100px;

left: 100px;

}

我是D

事例效果截图

ee4909360904

image.png

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值