【问题标题】:hr within table but full widthhr 在表格内但全宽
【发布时间】:2017-02-13 18:20:53
【问题描述】:

我制作了这段代码

  <table>
    {item.awards.map((obj,i) => 
    <tbody>
        <tr>
            <td>Name</td>
            <td>:</td>
            <td>{obj.title}</td>
        </tr>
        <tr>
            <td>Date</td>
            <td>:</td>
            <td>{obj.award}</td>
        </tr>
        {i !== item.awards.length-1 ? <hr /> : ''}
    </tbody>
    )}
  </table>

它起作用了,每个块都有一个分隔符 (&lt;hr/&gt;),但现在的问题是 hr 长度不是全宽。我不能让表格 100%,因为它会影响 td。

【问题讨论】:

  • 我们可以提供一个小提琴或任何链接来查看您的问题吗?
  • 我认为这是无效的 HTML。 &lt;tbody&gt; 的孩子必须是 &lt;tr&gt;,你不能在那里有 &lt;hr&gt;
  • &lt;tr border-bottom="1px solid black"&gt;
  • 和以前一样,runnable minimal reproducible example 使用 Stack Snippets([&lt;&gt;] 工具栏按钮)会更容易为您提供帮助。 (和以前一样:请注意,Stack Snippets 支持 React,包括 JSX;here's how to do one。)
  • @Barmar 那么你的解决方案是什么?

标签: javascript html css reactjs


【解决方案1】:

hr 作为tbody 的直接子代是无效的。 tbodycontent model 只允许 tr 元素(和脚本)。即使它似乎可以在一个浏览器中运行,也不能保证它可以在另一个浏览器中运行,甚至在它曾经运行的那个浏览器的下一个 dot rev 中也不能保证。

所以你需要将hr 放在tr 中,这意味着将它放在tdth 中:

{i !== item.awards.length-1 ? <tr><td colspan="3"><hr /></td></tr> : null}

然后,您可以根据需要使用 CSS 设置 hr 的样式,使其尽可能宽。例如(注意分隔行上的 sep 类和它应用于行的 CSS 和 hr):

table {
  border: 1px solid #ddd;
}
.sep hr {
  position: absolute;
  width: 100%;
  margin-top: -0.1em;
}
.sep {
  position: relative;
  overflow: hidden;
  height: 1em;
}
<table>
  <tbody>
    <tr>
      <td>Name</td>
      <td>:</td>
      <td>{obj.title}</td>
    </tr>
    <tr>
      <td>Date</td>
      <td>:</td>
      <td>{obj.award}</td>
    </tr>
    <tr class="sep">
      <td colspan="3">
        <hr />
      </td>
    </tr>
  </tbody>
  <tbody>
    <tr>
      <td>Name</td>
      <td>:</td>
      <td>{obj.title}</td>
    </tr>
    <tr>
      <td>Date</td>
      <td>:</td>
      <td>{obj.award}</td>
    </tr>
    <tr class="sep">
      <td colspan="3">
        <hr />
      </td>
    </tr>
  </tbody>
  <tbody>
    <tr>
      <td>Name</td>
      <td>:</td>
      <td>{obj.title}</td>
    </tr>
    <tr>
      <td>Date</td>
      <td>:</td>
      <td>{obj.award}</td>
    </tr>
  </tbody>
</table>

(旁注:对于该条件运算符的第三个操作数,null'' 更好。)

【讨论】:

  • 她希望&lt;hr&gt; 是窗口的整个宽度,而不仅仅是桌子。
  • @Barmar:正如我所说,根据需要应用 CSS 样式。我已经添加了一个可能的 CSS 设置的示例,但是当然,这取决于她真正想要的东西,这只是模糊地暗示。 :-)
猜你喜欢
  • 2013-05-09
  • 2014-03-22
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2021-12-06
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多