【问题标题】:How to set content area div height with dynamic header div如何使用动态标题 div 设置内容区域 div 高度
【发布时间】:2014-12-09 08:23:43
【问题描述】:

我正在设计一个包含标题和内容区域的容器,如下所示。

  widget control
------------------
| header text    |  <----- header area
------------------
| item1          |
| item2          |  <---- content area
| item3          |
|                |
------------------

我以前使用绝对位置,将上、下、左、右设置为 0 来填充空间和 如果添加了更多项目,则在内容区域中显示滚动条。

但是,当标题文本太长导致 2 行或更多行时,就会出现问题:

 widget control

------------------
| header text    |
| long text here |  <----- header area
------------------
| item1          |
| item2          |  <---- content area
| item3          |
|                |
------------------

现在标题区域变高了,我的绝对定位失败导致内容区域被标题区域重叠。

我在小提琴上设置了简单的例子。此示例不使用绝对位置方法,因此重叠消失了,但随后 由于无法预测标题区域的大小,我有时间弄清楚如何为内容区域设置高度,以便滚动条适合剩余的内容区域。 (小提琴显示滚动条被切断,因为内容区域高度设置为 100%,即控件本身的 100% 高度(即 100px)

http://jsfiddle.net/Lguwvwou/13/

请注意,我正在寻找使用 仅 CSS不允许设置静态内容区域高度(例如 50 像素)的解决方案。原因是这是小部件控件,用户可以设置控件的高度,但他们无法控制设置标题或内容区域的高度。

因此,如果用户为控件设置了 300 像素的高度,那么长的标题文本可能会占用 100 像素。那么内容区域高度的剩余高度为200px。

提前致谢。

【问题讨论】:

    标签: html css


    【解决方案1】:

    我知道如何做到这一点的唯一方法是使用 flexbox:

    .container { 
        width: 300px;
        height: 100px;
        border: 1px solid red;
        display: flex;
        flex-direction: column;
    }
    
    .head {
        border: 1px solid blue;
        width: 100%;
        flex-shrink: 0;
    }
    
    .content {
        border: 1px solid green;
        overflow-x: hidden;
        overflow-y: scroll;
    }
    
    
    <div class='container'>
        <div class='head'> this is head second line asdlkfj aslkf j;alksdj f;laksdjf;laksdjf;laskdf</div>
        <div class='content'>
            <div class='item'>item1</div>
            <div class='item'>item2</div>
            <div class='item'>item3</div>
            <div class='item'>item4</div>
            <div class='item'>item5</div>
            <div class='item'>item6</div>
        </div>
    </div>
    

    更新的 JSFiddle:http://jsfiddle.net/Lguwvwou/19/

    【讨论】:

    • 优雅的解决方案,您是否有理由对不得不使用 flex 感到失望?
    • 好的,我明白了,它会在一些浏览器中中断,包括 safari(可能是 webkit?),当然还有 IE(即使是 IE10)
    • 哦,我猜是这样的……很多人在他们不能使用 Flexbox 的网站上工作,因为旧版浏览器不支持它。我也对自己很恼火,因为我找不到非 CSS3 的答案。
    • 它应该在带有供应商前缀的 IE 10 中工作。如果您使用 CSS autoprefixer 插件,那么它会减轻您的头痛:github.com/postcss/autoprefixer-core
    • 感谢 edendramis,如果能支持 IE9 就好了。我忘了提,但是 +1 是现代浏览器的工作解决方案。我一直在寻找 CSS 解决方案,因为它比编写 javascript 来设置成为内联样式的样式更干净,但我开始认为没有完美的解决方案,只有 CSS 也可以支持 IE9。
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2011-02-20
    • 2012-04-04
    相关资源
    最近更新 更多