当前位置: 首页 > 知识库问答 >
问题:

使用CSS将一个或两个div拉伸到整个td

许彭祖
2023-03-14

我有servlet生成的HTML,它有一个表和一个或两个div,具体取决于配置。下面是一个快速示例:

table {
    table-layout: fixed;
}
td.td-div {
    width: 80%;
}
td.td-text {
    background-color: #faf0ff;
    width: 20%;
}
div#outer {
    padding: 0;
    margin: 0;
    width: 100%;
    height: 100%;
    background: #f0fffa;
    display: inline-block;
}
div.div-first, div.div-second {
    background-color: #ccc;
    margin: .1em 0 .1em 0;
    padding: 0;
    width: 100%;
}
<table>
    <tr>
        <td class="td-div">
            <div id="outer">
                <div class="div-first">first div</div>
                <div class="div-second">Second div</div>
            </div>
        </td>
        <td class="td-text">It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space.</td>
    </tr>
</table>

问题是,我需要div来填充整个td,不管是只有一个还是两个。是否有可能传播第一和第二div,(或者只是伸展第一div,如果没有第二)到只有CSS的单元格?

更新:我需要这些div(“第一div”和“第二div”)是100%的单元格宽度,当两个单元格都有时,是50%的单元格高度,当只有一个单元格时,是100%的高度。

更新:div的数量可以是动态的。

共有3个答案

邢灿
2023-03-14
<script>
function spanHeight(selectors, parents) {
  var $parents, $selectors;

  $parents = $(parents);
  $selectors = $parents.find(selectors);

  $selectors.css({
    height: (100 / $selectors.length + '%')
  });
}

spanHeight('.inner', '#outer');
</script>
table {
  table-layout: fixed;
  border-collapse: collapse;
  border: 1px solid red;
}
.td-div {
  width: 80%;
  position: relative;
  vertical-align: top;
}
.td-text {
  background: yellow;
  width: 20%;
}
#outer {
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  right: 0;
  top;
  0;
  bottom: 0;
}
.div-first,
.div-second {
  background: aqua;
}
.div-second {
  background: teal;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
  <tr>
    <td class="td-div">
      <div id="outer">
        <div class="inner div-first">
          first div
        </div>
      </div>
    </td>
    <td class="td-text">
      It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty
      space. It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill
      this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space.
    </td>
  </tr>
  </table
岳嘉悦
2023-03-14

如果您可以在项目中使用flexbox,您可能可以执行以下操作:

CSS

td.td-div
{
    width: 80%;
    position:relative; /*added*/
}

div#outer
{
    padding: 0;
    margin: 0;
    width: 100%;
    height: 100%;
    background: #f0fffa;
    display: flex; /*added*/
    flex-direction:column; /*added*/
    position:absolute; /*added*/
    top:0; /*added*/
}
div.div-first,
div.div-second
{
    background-color: #ccc;
    margin: .1em 0 .1em 0;
    padding: 0;
    width: 100%;
    height:100%; /*added*/
}

看看这个小提琴的演示。删除div秒并点击Run in the Fiddle,您将看到第一个div将占据整个td,或者添加第三个div,并看到它均匀地填满整个空间。

更新

要为旧浏览器(看看IE)实现一些功能,可以使用javascript,如(jQuery):

$(function(){
    var h =  $('table').height() / $('div#outer').children().length;
    $('div#outer > div').height(h);
});
柳才良
2023-03-14

该解决方案结合使用CSSdisplay:tabledisplay:table row,还需要在容器

JsFiddle演示

table {
    table-layout: fixed;
    border-collapse: collapse;
    border: 1px solid red;
    width: 100%;
    height: 100%;
}
.td-div {
    width: 80%;
}
.td-text {
    background: yellow;
    width: 20%;
}
#outer {
    display: table;
    width: 100%;
    height: 100%;
}
.div-first, .div-second {
    display: table-row;
    background: aqua;
}
.div-second {
    background: teal;
}
<table>
    <tr>
        <td class="td-div">
            <div id="outer">
                <div class="div-first">first div</div>
                <div class="div-second">Second div</div>
            </div>
        </td>
        <td class="td-text">It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space.</td>
    </tr>
</table>

<br/>

<table>
    <tr>
        <td class="td-div">
            <div id="outer">
                <div class="div-first">only div</div>
            </div>
        </td>
        <td class="td-text">It's just a text to fill this empty space. It's just a text to fill this empty space. It's just a text to fill this empty space.</td>
    </tr>
</table>

 类似资料:
  • 我的情况是: 所以我尝试通过单击另一个div来切换侧栏。它是一个100%高度的边栏,固定在视区的右侧。本质上,我试图将一个300px的div包装在50px宽的切换div和250px宽的侧边栏div周围,并且我想用一个负的右边距像素值来隐藏侧边栏部分。使用.toggle:active选择器(所以当单击toggle div时会发生这种情况),我想通过将边距右的像素值设置回0px来显示侧栏部分。 到目前

  • 问题内容: 我要两个紧挨着。右边大约200px;并且左侧必须填满屏幕的其余宽度?我怎样才能做到这一点? 问题答案: 您可以使用 flexbox 布置物品: 这基本上只是刮擦flexbox的表面。Flexbox可以做很多令人惊奇的事情。 对于较旧的浏览器支持,可以使用CSS float 和 width 属性来解决它。

  • 问题内容: 我在这里做错了什么? 我有一个 ,但在第一个上我想在顶部填充零,在第二个上我想没有底部边框。 我尝试为此首先和最后创建类,但我认为在某处错了: 和HTML 我猜不可能有两个不同的课程吗?如果可以,我该怎么做? 问题答案: 如果要在一个元素上使用两个类,请按以下方式进行操作: 像这样在css中引用它:

  • 老友记.我有两个DIVS。在一个div中,我有几个列表项“li”。我想做的是,每次我悬停在div 1的li上时,我想改变div 2的背景颜色。为此我需要使用css。谢谢. 你好 null 所以我想要的是,当悬停在id为“red”的li上时,将类为“contents”的div的背景颜色更改为红色。使用CSS。这是我的全部Html文件。

  • 以下图片将帮助您了解我的问题: 我想将显示在图像按钮中的图像拉伸到图像按钮的整个区域。如您所见,数字为1的图片仅占图像按钮的95%,您还可以看到图像按钮的边界。 我仍然希望保持图像按钮样式 以下是我如何使用ImageView: 我想我发现了我的问题所在,我需要一个自定义组件,它只能包含一个图像,并且具有点击效果。

  • 问题内容: 情况:我有两个固定高度的div,两个溢出都设置为隐藏,并且第一个div中包含动态文本内容。如果该内容超出了第一个div的溢出边界,我希望它自动溢出到第二个div中。 我的问题就是该怎么做?我进行了研究,发现最接近的是一个JQuery插件,该插件会自动为类似报纸的布局创建列。尽管这并不是我真正需要的,但它确实使我希望可以在一个更简单的级别上实现。 可视示例: 谢谢大家!根据所有输入,我将