【问题标题】:How do I make a td element the same width as the input element within?如何使 td 元素与其中的输入元素具有相同的宽度?
【发布时间】:2017-01-17 13:01:56
【问题描述】:

我有一个表,其中包含 td 元素内的许多输入元素。

<table>
  <tbody>
    <td class="first">
      <div>
        <input type="text" /> 
      </div>
    </td>
  </tbody>
</table>

输入元素的宽度应为 20px。表格的宽度设置为 100%。第一个 td 中的输入元素应该只设置一个最小宽度,以便它会伸展(因为表格有 100% 的宽度)。我希望其他输入具有固定宽度(20px)。当我这样做时,td 元素的宽度比输入元素大得多:

https://jsfiddle.net/cbzuwyrg/

是否可以使 td 元素与输入元素的宽度相同而不在 css 中设置相同的宽度?

这个小提琴显示了我想要实现的目标,但不必将 td 的宽度设置为 20px: https://jsfiddle.net/cbzuwyrg/1/

【问题讨论】:

  • 你想让所有的 td 与输入的宽度相同吗?
  • 是的,和里面输入的宽度一样
  • 所以如果输入例如有 80px 宽度,那么 td 应该和它一样?
  • 是的,这就是我想要的
  • 查看我刚刚添加到问题中的小提琴

标签: html css width html-table


【解决方案1】:

我认为,如果您正确嵌套它,您正在编写的 scss 会更有用,只需添加一个 calc 并嵌套 scss 代码就可以了。希望对你有帮助。

在这种情况下,宽度为 20px 的 td 使用一个稳定该宽度的类,并且输入具有计算,因为当您使用 100% 宽度时,它们会使用整个空间,直到下一次输入。

萨斯:

table {
  width:100%;
  border-collapse: collapse;

  td {
   border: 1px solid #000;
   //display: inline-block;
   width: 100%;

    div {
      input {
        width: calc(100% - 4px) ;      
        &.td20 {
          width: 20px;
        }
      }
    }
  }
}

HTML:

<table>
<tbody>
  <td class="first">
    <div>
      <input type="text" /> 
    </div>
  </td>
  <td>
    <div>
      <input type="text" class="td20"/> 
    </div>
  </td>
  <td>
    <div>
      <input type="text" class="td20" /> 
    </div>
  </td>
  <td>
    <div>
      <input type="text" class="td20" /> 
    </div>
  </td>
</tbody>
</table>

在这里你可以看到它的工作:https://jsfiddle.net/javierdp/adtj2t3o/8/

【讨论】:

  • 这几乎是我想要的——但不必在 td 元素上设置宽度。我想只在输入元素上设置宽度来实现这一点。
  • 嗨@slowpoke123 jsfiddle 更新了,希望对你有帮助!
【解决方案2】:

我想这对你也有用。

编辑:我编辑了代码,所以所有tds 的大小都与输入相同。

table {
  width:100%;
  border-collapse: collapse;
}
td.first{
  width:auto;
   border: 1px solid #000;
  }
 input[type="text"] {
     width: 100%; 
     box-sizing: border-box;
     -webkit-box-sizing:border-box;
     -moz-box-sizing: border-box;
}
<table>
<tbody>
  <td class="first">
    <div>
      <input type="text" size="2"> 
    </div>
  </td>
  <td class="first">
    <div>
      <input type="text" size="7"> 
    </div>
  </td>
  <td class="first">
    <div>
      <input type="text" size=""> 
    </div>
  </td>
  <td class="first">
    <div>
      <input type="text" placeholder="last" size="" > 
    </div>
  </td>
</tbody>
</table>

代码是 html 和 CSS,没有使用 JavaScript。

【讨论】:

  • 我认为您更改了您在评论中向我展示的原始代码 - 如果您看到小提琴显示我想要的结果,这看起来不像那样。 td 应该是输入的宽度。在您的示例中,td 比输入大得多。
  • @slowpoke123 如果我记得你希望第一个 td 是自动的,其他的没有变化,那就是我所做的。
  • @slowpoke123 在代码中,如果你改变了输入的大小,你会看到td随着大小的变化而改变,而其他的还是一样的。这不是你要求的吗?
  • 如果您再次阅读我的问题,我希望 td 的宽度与输入的宽度相同。请参阅我在问题中发布的 jsfiddle。
  • 表格的宽度应该设置为 100%
【解决方案3】:
<table>
<tbody>
  <td class="first">
    <div>
      <input type="text" /> 
    </div>
  </td>
  <td>
    <div style="width:8px">
      <input type="text" /> 
    </div>
  </td>
  <td>
    <div style="width:8px">
      <input type="text" /> 
    </div>
  </td>
  <td>
    <div style="width:8px">
      <input type="text" /> 
    </div>
  </td>
</tbody>
</table>

将宽度尺寸添加到您的 div 中

【讨论】:

  • 宽度已在输入元素上设置(旧代码)。
  • 是的,但是在你的
    上设置 with 可以解决这个问题。您甚至可以取出 div 并在 上设置 with
  • 是的,但此时我无法更改旧代码,我想要一个仅使用 css 而不是 javascript 解决的解决方案。
  • 没有使用javascript?
  • 他希望第一个 td 是自动的,而其他的则保持原样,差不多。
猜你喜欢
相关资源
最近更新 更多
热门标签