V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wencan
V2EX  ›  前端开发

一个前端样式样式既要又要的问题

  •  
  •   wencan · 22 小时 59 分钟前 · 358 次点击

    网页是 SPA

    祖先元素样式:min-height:100%
    这样,PC 下大部分场景,可以刚好拉伸主要部分占满屏幕; mobile 大部分场景下,祖先元素自动超出 100%的高度
    这点之前一直工作得很好

    但特例出现了
    一个场景,需要祖先元素高度刚好 100%,不能再多,也不能更少
    如果子元素内容太少,填充高度,不能减少祖先元素的高度
    如果子元素内容太多,展示垂直滚动条,不能增加祖先元素的高度

    chatgpt 和 claude 给的方案:flex-grow: 1; overflow-y: auto;。实际试过了,不行。其中一个例子放下面了,大家可以试着改下

    也想到了两个可行方案:

    1. 当需要这个特例时,发个事件通知祖先元素加上:max-height:100%;当不需要时,再发个事件……
    2. 将这个特例作为一个单独的 url/页面,换一个 height 固定为 100%的祖先元素……

    求教,有没有更好的方案

    下面是 claude 给的一个不可行的例子

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <style>
            html, body {
                height: 100%;
                margin: 0;
                padding: 0;
            }
    
            .container {
                display: flex;
                min-height: 100%;
                flex-direction: column;
            }
    
            .content {
                flex: 1;
                overflow-y: auto; /* 内容超出时显示垂直滚动条 */
                display: flex;
                flex-direction: column;
            }
    
            .text-wrapper {
                flex-shrink: 0; /* 防止内容被压缩 */
                overflow-y: auto; /* 文本内容超出时显示滚动条 */
            }
        </style>
    </head>
    <body>
        <div class="container">
            头部应该保持不动
            <div class="content">
                <div class="text-wrapper">
                    这是一段测试文本。这里可以添加很长很长的文本,
                    当文本内容超过容器高度时,会自动出现垂直滚动条。
                    同时,容器高度会保持在 100%,不会被限制。
                    (重复文本以模拟长内容)
                </div>
            </div>
        </div>
    </body>
    </html>
    
    第 1 条附言  ·  18 小时 1 分钟前
    问题解决
    最后在文本元素用绝对定位实现,四个方向都是 0
    6 条回复    2024-11-28 08:56:59 +08:00
    jackple
        1
    jackple  
       22 小时 38 分钟前
    简单粗暴点可以在子元素设置 height: calc(100vh - 22px);
    wencan
        2
    wencan  
    OP
       22 小时 14 分钟前
    @jackple
    想过这个方法
    一来祖先元素的子元素分布在不同的文件
    二来窗口会 resize
    jackple
        3
    jackple  
       22 小时 10 分钟前
    跟其他子元素已经无关了吧, 不是只管当前这个子元素就可以了么? 不是很明白你的场景了 @wencan
    jackple
        4
    jackple  
       22 小时 9 分钟前
    而且跟 resize 有什么关系呢
    wencan
        5
    wencan  
    OP
       22 小时 0 分钟前
    @jackple 你那个例子中,22px 就是其它子元素的高度吧?
    jackple
        6
    jackple  
       7 小时 3 分钟前
    @wencan 22 是`头部应该保持不动`的高度
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5422 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:00 · PVG 16:00 · LAX 00:00 · JFK 03:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.