V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Can I use?
http://caniuse.com/
Less
http://lesscss.org
Cool Libraries
Bootstrap from Twitter
Jetstrap
jmyz0455
V2EX  ›  CSS

如果父元素宽高使用了百分比来表示数值,那么子元素再使用百分比来设置属性的话,百分比判断的依据是什么?

  •  
  •   jmyz0455 · 2016-12-30 10:51:29 +08:00 · 3059 次点击
    这是一个创建于 2884 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果一个父元素(比如 body )使用了百分比来表示宽高,例如 height:100%;width:100%; ,然后子元素(比如 div )使用固定宽高,再设置百分比外边距,例如 margin-top:100%; ,这个子元素的外边距一定是个错误的值,大家可以试一试。

    这种错误在各种前端教程都会提到:“属性百分比的依据是父元素宽高,父元素如果不是用固定的宽高,该属性将会无效”之类的话。

    但是,我把这个 Demo 做出来之后,子元素的还是有外边距的,只不过是错误的而已, Chrome 的开发者工具没有显示删除线,外边距也是有的,所以我想深入地问一下:

    如果子元素设置了 margin-top:100%,而该元素的所有父元素都设置了百分比的宽高,那么这个显示出来的,错误的外边距的依据究竟是什么?为什么它还能显示出外边距(即便是错误的)?

    8 条回复    2016-12-31 01:04:15 +08:00
    learnshare
        1
    learnshare  
       2016-12-30 11:06:12 +08:00
    我记得大概有两种不同的表现:
    1. 子元素的值根据父元素 /或自己的宽度计算;
    2. 子元素的值根据父元素 /或自己的高度计算。

    没有仔细研究过,待我写写看。
    learnshare
        2
    learnshare  
       2016-12-30 12:54:31 +08:00
    应该是这样的:
    1. 子元素的宽度( width: x%;)根据父元素的宽度计算;
    2. 子元素的高度( height: y%;)有两种:
    1) 父元素未指定高度( height: auto;)时,根据内容计算( auto );
    2) 父元素已指定高度时,根据父元素的高度计算。
    3. 子元素的 margin-(left|right) ( x%;)以及 margin-(top|bottom)( y%;) 根据自己的宽度计算。

    自己写写 demo 验证吧。
    ChefIsAwesome
        3
    ChefIsAwesome  
       2016-12-30 13:20:45 +08:00
    你得看规范了。很复杂的
    Septembers
        4
    Septembers  
       2016-12-30 13:35:46 +08:00
    计算规则自行阅读规范

    至于触发取值无效问题的话看看这个 http://www.zhangxinxu.com/wordpress/2016/09/talking-about-css-infinite-endless-loop/
    jmyz0455
        5
    jmyz0455  
    OP
       2016-12-30 14:23:11 +08:00
    @learnshare 我就是写过 Demo 才提出这个问题的,我又重新比划了一下,似乎“父元素未指定高度( height: auto;)时,根据内容计算( auto ); ”不成了立,我一个自身高 200px 的子元素 margin-top:100%; 出了约四百多的像素,父元素设置的是 height:100%;

    我晚点找个地方贴 Demo 效果和代码,我以为这个问题很简单就没贴
    learnshare
        6
    learnshare  
       2016-12-30 15:19:32 +08:00
    @jmyz0455 你要看清楚,我写的三条指的是不同的属性:

    1. 子元素的宽度;
    2. 子元素的高度;
    3. 子元素的 margin 。

    你引用的这一条指的是 子元素的高度
    marsLeo
        7
    marsLeo  
       2016-12-30 16:10:10 +08:00
    这个问题也挺复杂的。查了 MDN ,关于 margin-top 的百分比值是跟父元素——宽度有关的:
    developer.mozilla.org/zh-CN/docs/Web/CSS/margin

    DEMO: codepen.io/anon/pen/LbwqyG?editors=1100
    P233
        8
    P233  
       2016-12-31 01:04:15 +08:00
    百分比的 margin 不都是取父层的宽度吗?不论哪个方向。跟父层的高度没有关系。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5335 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:56 · PVG 14:56 · LAX 22:56 · JFK 01:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.