上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: 李恒道 - 

关于ipad的flex-grow:1属性失效问题

[复制链接]
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5961

    回帖

    6760

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6760

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2021-1-13 01:09:03 | 显示全部楼层 | 阅读模式

    w3c手册

    这里参考的是

    10.5 Content height: the height property

    percentage
    Specifies a percentage height. The percentage is calculated with respect to the height of the generated box's containing block. If the height of the containing block is not specified explicitly and this element is not absolutely positioned, the value computes to auto.

    auto
    The height depends on the values of other properties.

    百分比

    如果指定高度百分比。则百分比是根据生成的框的包含块的高度计算的。如果未明确指定包含块的高度,并且此元素未绝对定位,则该值将计算为“auto”。

    自动

    高度取决于其他属性的值。

    我们flex-grow无法生效因为这个问题

    问题推演

    警告:这里我只是简单对着大佬的博客进行了一个梳理和学习,实际的内部机制可能更为复杂!

    假设现在有顶级,父级,子级

    如果要使上级的百分比高度流入下级,那父级根据w3c规定必须具有一个设定的高度

    在第三级有固定高度height:100%,第一级也具有固定的高度

    但是由于第二级设定的是 flex-grow:1

    第二级没有设定固定的高度,导致webkit第二级的高度对于第三级是缺失的

    早期的Chorme和Firefox都有类似的反馈

    但是现在根据更新Firefox和Chorme都已经接受了以父级的弹性高度作为子级的百分比高度作为参考

    解决方案

    在flex-grow:1加上flex:1 1 0

    主要问题的解决方案在于flex-basis上

    当flex-basis为auto的情况下,使用弹性高度的元素的高度根据其内容高度来决定,flex-grow分配剩余的空间,但是这是一个伪分配,flex-grow是一个最小的高度

    由于是最小的高度,所以100%被直接归零了,但是我们在内部书写文字依然会撑开一点

    当flex-basis为0的情况下,会将剩余空间给弹性高度的元素,来增加高度

    问题来源

    这里的问题来源我认为是苹果完全遵守W3C规则导致子元素无法获取弹性高度的父元素高度的问题。

    相信随着逐步的改进,会修复这个问题(可能这是我的问题?)

    参考链接

    https://ruirui.me/2018/12/07/flex-grow-child-not-filling-height-of-parent/

    https://stackoverflow.com/questions/33636796/chrome-safari-not-filling-100-height-of-flex-parent

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表