css height width padding margin 百分比取值的基准问题

新地址:https://github.com/jimwmg/JiM-Blog
标准流下

一 首先,明确width height padding margin 取值可能的四个值:

可能的值
值 描述
auto 浏览器计算内边距。
length 规定以具体单位计的内边距值,比如像素、厘米等。默认值是 0px。
inherit 规定应该从父元素继承相应属性。

% 重点理解:width 是 基于父元素的 width 计算的值
height 是基于父元素的 height 计算的值
padding 和 margin 的无论上下左右 值 都是基于父元素的宽度
二 直接撸代码吧

    <style>
    .box {
        width: 800px;
        height: 500px;
        background-color: pink;
        overflow: hidden;
        /*这行代码解决垂直外边距塌陷问题*/
    }
    .one {
        width: 500px;
        height: 200px;
        padding: 50px ;
        margin: 100px;
        background-color: green;
    }
    .two {
        width: 50%;
        /*相对于父元素的宽度 500*50%*/
        height: 50%;
        /*相对于父元素的高度 200*50%*/
        background-color:yellow;
        padding-left: 10%;
        /*相对于父元素的宽度 500*10%*/
        padding-top: 10%;
        /*相对于父元素的宽度 500*10%*/
        margin-left: 10%;
        /*相对于父元素的宽度 500*10%*/
        margin-top: 10%;
        /*相对于父元素的宽度 500*10%*/
    }
</style>
</head>
<body>
<div class="box">
    <div class="one">
        <div class="two"></div>
    </div>
</div>
</body>

具体效果大家可以复制代码拿到自己电脑上看,这里不再细说了。一会要去约个饭,有点上火

三 如果元素设置了定位呢,这个时候,定位的子元素的百分比的值相对于哪个元素呢?
第一种情况:子元素设置了定位:
给 box 添加 position :relative ;
给 two 添加 position : absolute;

.two {
        width: 50%;
        /*相对于定位了的父元素的宽度 800*50%*/
        height: 50%;
        /*相对于定位了的父元素的高度 500*50%*/
        background-color:yellow;
        padding-left: 10%;
        /*相对于定位了的父元素的宽度 800*10%*/
        padding-top: 10%;
        /*相对于定位了父元素的宽度 800*10%*/
        margin-left: 10%;
        /*相对于定位了的父元素的宽度 800*10%*/
        margin-top: 10%;
        /*相对于定位了的父元素的宽度 800*10%*/
        position: absolute;

    }

也就是说,如果子元素设置了定位,那么其 height width padding margin 等值如果以百分比来计算是相对于已经定位了的父元素,(没有定位的父元素会跳过)为基准的。

第二种情况,如果子元素没有设置了定位:

.two {
        width: 50%;
        /*相对于父元素的宽度 500*50%*/
        height: 50%;
        /*相对于父元素的高度 200*50%*/
        background-color:yellow;
        padding-left: 10%;
        /*相对于父元素的宽度 500*10%*/
        padding-top: 10%;
        /*相对于父元素的宽度 500*10%*/
        margin-left: 10%;
        /*相对于父元素的宽度 500*10%*/
        margin-top: 10%;
        /*相对于父元素的宽度 500*10%*/
    }

此时无论父元素是否设置定位,子元素的width height padding margin 通过百分数取值的时候,都是相对于其直接父元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值