【问题标题】:CSS ONLY: <div> that fills up <th> parent仅限 CSS: <div> 填充 <the> 父级
【发布时间】:2014-04-25 00:10:14
【问题描述】:

我需要红色 div 用蓝色背景填充父级。 http://jsfiddle.net/jiantongc/kyR8q/

.rowlevel2-deco 上尝试了各种修复,但没有奏效: height:100%;box-sizing: border-box;

类似的问题:Chrome doesn't honor row height if rowspan is present 但没有实际的工作解决方案。

【问题讨论】:

    标签: html css


    【解决方案1】:

    您可以将height="1" 添加到th

    <th rowspan="2" class="rowlevel2" height="1">
    

    比有一个小的填充,通过添加padding:0;去掉它:

    .rowlevel2 {
         background: blue; /* don't want to see blue */
         padding: 0;    
     } 
    

    更新 Chrome 和 FireFox

    Short:为所有从内容高度获取高度并且没有明确定义高度的父元素显式指定高度。

    Long:Thisthis 让我觉得这是不可能的。但是this test 在 FF 中有效,在 Chrome 中无效。此代码适用于以下两种情况:

    * { padding:0; } /* All paddings be gone! This is not a padding problem */
    
    table { height: 1px; } /* FF needs a height */
    
    .foo {
        background: blue; /* Don't want to see blue */
        height: 100%; /* FF needs a height agian */
    }
    
    .bar {
        background: red;
        height:100%;
        width: 100px;
        display:inline-block; /* Chrome needs inline-block, FF doesn't care. */
    }
    
    .bar:before {
        content:'';
        display:inline-block;
        height:100%;
        vertical-align:middle;
    }
    
    .ni {
        background: gray;
        width:120px;
        height:40px;
    }
    

    HTML:

    <table>
        <thead>
            <tr>
                <th rowspan="2" class="foo">
                    <div class="bar">Bar</div>
                </th>
                <th>
                    <div class="ni">Knight 1</div>
                </th>
            </tr>
            <tr>
                <th>
                    <div class="ni">Knight 2</div>
                </th>
            </tr>
        </thead>
    </table>
    

    http://jsfiddle.net/allcaps/V7jzL/2/

    它也适用于your class names ;)。

    &lt;percentage&gt; 指定百分比高度。百分比是 根据生成框的高度计算 包含块。如果包含块的高度不是 明确指定(即,它取决于内容高度),并且这个 元素不是绝对定位的,值计算为'auto'。

    表格高度取决于内容高度 == auto。因此 Mozilla 希望在父元素上明确定义高度。 table { height: 1px; }.foo { height: 100%; } does that.1px;` 是一个小于任何普通表格的值,并且无论如何内容高度优先。将表格推到合适的大小。

    感谢@bjb568 提供display:inline-block;
    感谢@KingKing .bar:before { content:''; ... }

    【讨论】:

    • 不知道:D。卡在我的脑后。 jsfiddle.net/allcaps/kyR8q/6
    • @bjb568:我认为你的回答是正确的(赞成),而不是像我这样的黑客:P
    • @bjb568 和@Jian:我发现了它的工作原理。您需要在所有从内容中获取高度的父元素上设置显式高度。所以table { height:1px; }.rowlevel2 { height:100%; }。查看更新。
    • 哦。这个答案现在似乎更好了。
    • 无法做到:stackoverflow.com/questions/5998500/… 您必须解决问题并提出下一个最佳方案。 &lt;!--[if IE 8]&gt;Stylesheet for IE 8 here.&lt;![endif]--&gt;
    【解决方案2】:

    为什么不使用 jQuery?

    $(document).ready( function() {
        $('.rowlevel2-deco').
          css({
            'width': $('.rowlevel2').width(),
            'height': $('.rowlevel2').height()  
        });
    });
    

    在红色div中垂直对齐:

    .rowlevel2-deco {
        background: red;
        display:table-cell;
        vertical-align: middle;
    }
    

    View it here

    【讨论】:

    • "有什么理由不使用 JavaScript 吗?"因为这是一个 CSS 问题? …
    • 为什么要投反对票?通常,Web 编码有一个任务要解决,而且大多数任务不是“使用 CSS”,而是以最语义化和最有效的方式做某事。从语义上讲,表格用于显示表格数据。任何需要“拉伸以适应表格数据”的“装饰”都可以说属于 JavaScript。
    • 没有。样式属于样式表。
    • @niennte 我理解你的意思,但如果我可以使用 js,我会使用它,我正在渲染一百万个表格单元格,性能问题是关键原因之一。这就是为什么我在标题中明确表示:)
    【解决方案3】:
    .rowlevel2-deco{
        display: inline-block;
        padding: 0;
    }
    

    似乎有效。 http://jsfiddle.net/kyR8q/27/ 另外,垂直居中使用:

    .rowlevel2-deco:before {
        content: '';
        display: inline-block;
        height: 100%;
        vertical-align: middle;
    }
    

    【讨论】:

    • 看起来 outer 标签应该垂直居中(正如 OP 所希望的那样),为了实现这样的事情,我们需要使用 :before 伪元素对其进行更多调整,这里是完整的小提琴作为参考jsfiddle.net/kyR8q/10
    • @Jian 哦天哪...... allcaps 的回答也没有......呃。
    【解决方案4】:

    100% 高度适用于绝对定位的元素。所以 CSS 将是:

    th.rowlevel2{
        background: blue; /* don't want to see blue */
        width: 100px;
        position: relative;
    }
    
    .rowlevel2-deco{
        background: red;
        height:100%;
        width: 100px;
        position: absolute;
        top: 0;
    }
    

    但在这种情况下,父级必须定义宽度。

    http://jsfiddle.net/aLQh7/1/

    【讨论】:

    • 如果您将position: absolute 用于除从流程中删除之外的任何其他操作,那么您做错了(或者他们这么说)。
    猜你喜欢
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2011-01-15
    • 2012-12-01
    • 2011-07-31
    相关资源
    最近更新 更多