padding ,margin百分比赋值时(无论竖,横)都是相对于容器宽度的

37 篇文章 1 订阅

你未必知道的CSS小知识:元素竖向的百分比设定是相对于容器的宽度,而不是高度!

这是一个很让人困惑的CSS特征,我之前也谈到过它。我们大家都知道,当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,但是,对于一些表示竖向距离的属性,例如padding-top,padding-bottom,margin-top,margin-bottom等,当按百分比设定它们时,依据的也是父容器的宽度,而不是高度。

下面是一个实例演示,你可以调整容器的宽度,但你会发现,黄块块的padding-bottom的距离也会随之宽度而变大或变小。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="{CHARSET}">
        <title></title>
        <style type="text/css">
            body {
                font-family: Arial, sans-serif;
                padding-top: 30px;
                text-align: center;
            }

            .wrapper {
                width: 400px;
                margin: 0 auto;
                border: solid 1px black;
            }

            .box {
                width: 100px;
                height: 100px;
                background: gold;
                margin-left: auto;
                margin-right: auto;
                padding-top: 10%;
                padding-bottom: 10%;
                margin-bottom: 5%;
            }

            .range {
                display: block;
                margin: 20px auto;
            }

            output {
                text-align: center;
                display: block;
                font-weight: bold;
                padding-bottom: 20px;
            }

            output span {
                font-weight: normal;
            }
        </style>
    </head>

    <body>
        <div class="wrapper" id="w">
            <div class="box" id="b"></div>
        </div>

        <input type="range" min="120" max="400" value="400" class="range" id="r">
        <output>宽度是: <span id="op">400px</span></output>
        <output>黄块块的Padding bottom是:<br><span id="op2">10%</span></output>
    </body>
    <script type="text/javascript">
        var cw = document.getElementById('w'),
            r = document.getElementById('r'),
            b = document.getElementById('b'),
            op = document.getElementById('op'),
            op2 = document.getElementById('op2');

        r.onchange = function() {
            cw.style.width = this.value + 'px';
            op.innerHTML = this.value + 'px';
            op2.innerHTML = window.getComputedStyle(b, null).getPropertyValue('padding-top');
        };
    </script>

</html>

这里写图片描述
上面的代码中,我们对内部子元素声明了3个竖向的距离,都是百分比形式。当移动滑块时,我们的js代码只需修改了容器的宽度。但是,这个这三个属性高度都跟随着变化,可以看出,它们的百分比计算是基于容器的宽度,而不是高度的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值