html margin百分比,CSS margin 百分比

本文详细解释了CSS中使用百分比定义margin时的行为特点。包括不同书写模式下百分比参照对象的变化及其背后的逻辑,帮助理解为何会出现看似不符合直觉的现象。

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

CSS margin 百分比

假设一个块级包含容器,宽 1000px,高 600px,块级子元素定义 margin:10% 5%; 大家说说 margin 的 top, right, bottom, left 计算值最终是多少?

CSS 代码:

#demo{

width: 1000px;

height: 600px;

}

#demo p{

margin: 10% 5%;

}

HTML 代码:

恩,注意看我所在的位置。

结果为:100px 50px 100px 50px

为什么会这样?

诧异吗?不用怀疑浏览器出了问题,因为这是正确的实现。

规范中注明 margin 的百分比值参照其包含块的宽度进行计算。但这只发生在默认的 writing-mode: horizontal-tb; 和 direction: ltr; 的情况下。

当书写模式变成纵向的时候,其参照将会变成包含块的高度。我们改变一下上面例子中的 CSS 书写模式:

CSS 代码:

#demo{

-webkit-writing-mode: vertical-rl; /* for browsers of webkit engine */

writing-mode: tb-rl; /* for ie */

}

这时的结果为:60px 30px 60px 30px

也就是说书写模式影响 margin 百分比的参照对象。

顺带再说说

你是否觉得这不符合常规的感性认知?感性认知更多感觉应该横向参照包含块宽度,纵向参照包含块高度。

其实这是为了要横向和纵向2个方向都创建相同的 margin,如果它们的参照物不一致,那就无法得到两个方向相同的留白。

你可能会问那为什么要选择宽度做参照而不是高度呢?

这其实更多的要从 CSS 设计意图上去想,因为CSS的基础需求是排版,而通常我们所见的横排文字,其水平宽度一定(仔细回想一下,如果没有显式的定义宽度或者强制一行显示,都会遇到边界换行,而不是水平延展),垂直方向可以无限延展。但当书写模式为纵向时,其参照就变成了高度而不再是宽度了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值