关于margin与padding设置百分比的问题

本文探讨了在CSS布局中,当元素的margin-top、margin-bottom、padding-top和padding-bottom属性设置为百分比时,这些百分比实际上是相对于父元素的宽度进行计算的,而非高度。此外还介绍了通过设置writing-mode属性为纵向书写时,百分比会根据父容器的高度来计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

margin 与 padding 设置为百分比

之前一直认为 margin-topmargin-bottom 设置百分比以父容器的高度计算,而 margin-leftmargin-right 设置百分比以父容器的宽度计算,直到今天群里一个群友问

boostrap 中的栅格系统是如何设置 margin-top 百分比以宽度计算的?

原因是他发现设置的 margin: 10% 10%; 中 top 和 bottom 值是以父容器的宽度计算得到的结果。

经过一番测试及网上查找,才发现:原来 margin-topmargin-bottom 并不是以父容器的高度计算百分比的,而是同样以父容器宽度来计算,同样的 padding 内边距也是一样。

如按照以下样式设置

  .father {
    width: 200px;
    height: 100px;
    border: 1px solid #000;
  }
  .son {
    width: 80%;
    height: 50%;
    margin: 10% 10%;
    background-color: #ff0000;
  }
<div class="father">
  <div class="son"></div>
</div>

得到的结果是:

margin-top百分比盒模型

不过也不是绝对这样,如果设置了 writing-mode 为纵向书写,比如 -webkit-writing-mode: vertical-lr; 此时按百分比书写的margin就会参照容器的高度来计算了。

在上例中的 father 中添加 -webkit-writing-mode: vertical-lr;

  .father {
    width: 200px;
    height: 100px;
    border: 1px solid #000;
    -webkit-writing-mode: vertical-lr;
  }

得到的结果就是:

竖向的margin盒模型

以上内容查找来自于:
cxxsn的博文:margin-top百分比问题

感谢!

### CSS MarginPadding 的用法及区别 #### 定义作用范围 MarginPadding均用于控制元素间的间距,但其应用位置不同。Margin定义了元素其他外部元素之间的距离[^1];而Padding则设定了元素内部内容其边界之间的空间大小[^2]。 #### 设置方式及其特性 对于两者而言,皆可通过四个方向分别设定数值来调整布局效果: - **单值声明**:应用于四面相同的情况; ```css div { margin: 10px; padding: 20px; } ``` - **双值声明**:第一个值代表上下边缘,第二个值表示左右两侧; ```css p { margin: 1em .5em; padding: 8px 16px; } ``` - **三值声明**:依次对应上、水平(即左/右)、下的顺序; ```css span { margin: 7px 9px 11px; padding: 3px 6px 9px; } ``` - **四值声明**:按照顺时针方向——顶、右侧、底端以及左侧逐一赋值。 ```css article { margin: 4px 8px 12px 16px; padding: 2px 4px 6px 8px; } ``` 值得注意的是,在某些情况下,如未正确处理浮动等问题时,可能会遇到意想不到的行为,例如子元素顶部外边距塌陷现象[^5]。 #### 特殊情况说明 除了常规的长度单位之外,还可以采用百分比形式指定尺寸,此时百分比基于父容器宽度计算得出。另外,“auto”作为特殊的取值选项可用于让浏览器自动决定合适的内外边距量度,常被用来实现居中对齐等功能[^3]。 #### 实际案例展示 考虑如下HTML结构片段: ```html <div class="container"> <p>一段文字。</p> </div> ``` 配合相应的样式表可以直观感受两者的差异: ```css .container { border: solid black 1px; } p { background-color: lightgray; } /* 应用不同的marginpadding */ .margin-example p { margin: 20px; } .padding-example p { padding: 20px; } ``` 通过上述例子可以看出,`margin`使得段落四周出现了额外的空间,并且这些空间位于`.container`盒子模型之外;相反地,设置了`padding`之后,则是在保持原有矩形轮廓不变的前提下增加了内侧填充区域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值