为什么不使用vertical-align:middle在表格单元格中使用输入元素?

d_l*_*nen 2 html css html-table input vertical-alignment

这是我的代码:

*               { vertical-align: top; margin: 0; }
td              { vertical-align: middle; border: 1px solid red; }
td:nth-child(1) { line-height: 3em; }
td:nth-child(2) { line-height: 4em; }
td:nth-child(3) { line-height: 0.1em; }
p, input        { outline: 1px solid green; }
Run Code Online (Sandbox Code Playgroud)
<table>
    <tr>
      <td>
        <p>
          Some vertically centered text.
        </p>
      </td>
      <td>
        <input type="text">
      </td>
      <td>
        <input type="text">
      </td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

如可以看到的,p被整齐地垂直居中,以及在inputline-height: .1em,而inputline-height: 4em被移动到顶部.

经过漫长的研究,我没有找到这种行为的解释.

我设置了一个jsfiddle:https://jsfiddle.net/dlenne/8xapwz11/14/ .

Mic*_*l_B 6

你已经设置vertical-align: middletd,每个都是input元素的父元素.

但该vertical-align属性不是继承的().

因此,一种解决方案是将规则直接应用于输入:

*               { vertical-align: top; margin: 0; }
td              { vertical-align: middle; border: 1px solid red; }
td:nth-child(1) { line-height: 3em; }
td:nth-child(2) { line-height: 4em; }
td:nth-child(3) { line-height: .1em; }
p, input        { outline: 1px solid green; }
input           { vertical-align: middle; }               /* new */
Run Code Online (Sandbox Code Playgroud)
<table>
  <tr>
    <td>
      <p>Some vertically centered text.</p>
    </td>
    <td>
      <input type="text">
    </td>
    <td>
      <input type="text">
    </td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

另一种解决方案简单地绕过所述line-height通过切换的规则display从输入值inlineblock.

*               { vertical-align: top; margin: 0; }
td              { vertical-align: middle; border: 1px solid red; }
td:nth-child(1) { line-height: 3em; }
td:nth-child(2) { line-height: 4em; }
td:nth-child(3) { line-height: .1em; }
p, input        { outline: 1px solid green; }
input           { display: block; }               /* new */
Run Code Online (Sandbox Code Playgroud)
<table>
  <tr>
    <td>
      <p>Some vertically centered text.</p>
    </td>
    <td>
      <input type="text">
    </td>
    <td>
      <input type="text">
    </td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

参考文献: