如何阻止单元格内容用于计算列宽

时间:2015-09-22 17:18:08

标签: javascript html css

我有一个动态宽度的表,每个列都是该宽度的动态部分,具体取决于单元格内容。

在该表的标题中,我将输入设置为100%宽度,最初是隐藏的。触发时,将显示输入。不幸的是,如果列的单元格内容非常窄,则会重新计算列宽并跳过宽度。

如何将输入设置为仅填充单元格的宽度&不要把它推得更宽?

我不相信有解决方案,但我认为在放弃之前我会问更大的社区。我的猜测是我不能没有硬编码宽度,但这是不可能的。

编辑: 我的解决方案是让浏览器进行单元格宽度计算,然后使用Javascript,将列宽显式设置为计算的值。这允许单元格内容确定宽度,但我仍然得到设置宽度行为。



function toggleInput(){
  var target = document.querySelector('.hidden')
  var newStyle = (target.style.display == 'block') ? 'none' : 'block';
  document.querySelector('.hidden').style.display = newStyle;
}

document.querySelector('th').addEventListener('click',toggleInput);

table,td,th{
  border:1px solid red;
}
*{
  box-sizing:border-box;
}

table,
input{
  width:100%;
}

.hidden{
  display:none;
}

<table>
  <thead>
    <tr>
      <th>
        Click me
        <div class="hidden">
          <input />
        </div>
      </th>
      <th>
      </th>
      <th>
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        Blah
      </td>
      <td>
        Some longer text to stretch
      </td>
      <td>
        More text
      </td>
  </tbody>
</table>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

使用以下CSS:

table { table-layout:fixed }

您的代码包含修复程序:

function toggleInput(){
  var target = document.querySelector('.hidden')
  var newStyle = (target.style.display == 'block') ? 'none' : 'block';
  document.querySelector('.hidden').style.display = newStyle;
}

document.querySelector('th').addEventListener('click',toggleInput);
table,td,th{
  border:1px solid red;
}
*{
  box-sizing:border-box;
}

table,
input{
  width:100%;
}

table { table-layout:fixed; }

.hidden{
  display:none;
}
<table>
  <thead>
    <tr>
      <th>
        Click me
        <div class="hidden">
          <input />
        </div>
      </th>
      <th>
      </th>
      <th>
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        Blah
      </td>
      <td>
        Some longer text to stretch
      </td>
      <td>
        More text
      </td>
  </tbody>
</table>