div 中两个 hr 标签之间的表格。表格不会从 div 中获取所有属性

Posted

技术标签:

【中文标题】div 中两个 hr 标签之间的表格。表格不会从 div 中获取所有属性【英文标题】:Table between two hr tags in a div. Table doesn't take all attributes from div 【发布时间】:2021-06-11 04:55:01 【问题描述】:

全新的 html/CSS 和实验。

我试图在两条 hr 标记行之间放置一个表格(一个在顶部,一个在底部)。我想让表格的宽度与线条的宽度相匹配,将页面上的所有内容水平居中,并具有粘性定位。

发生的情况是,线条遵循我设置的宽度,居中,并具有我想要的定位。表格有定位,但没有宽度,并且与线条左对齐(不与页面或任何东西对齐)。

<div style="width:100%; max-width: 800px; margin:auto; position:sticky; top:0px; ">
  <hr>
  <table style="border:1px solid black; background-color:Coral">
    <tr>
      <th><u>Section 1</u></th>
      <th><u>Section 2</u></th>
      <th><u>Section 3</u></th>
      <th><u>Section 4</u></th>
      <th><u>Section 5</u></th>
      <th><u>Section 6</u></th>
    </tr>
    <tr style="text-align:center">
      <td><a href="S1WordFormatting.html">Word<br/>Formatting</a></td>
      <td><a href="S2Lists.html">Lists</a></td>
      <td><a href="S3Tables.html">Tables</a></td>
      <td><a href="S4ImagesandVideos.html">Images and<br/>Videos</a></td>
      <td><a href="S5Linking.html">Linking</a></td>
      <td><a href="S6InputTypes.html">Input Types<br/>(Text Boxes)</a></td>
    </tr>
  </table>
  <hr>
</div>

为什么表格会从 div 中获取定位,而不是宽度或边距?另外,为什么它会与线条左对齐?

我知道我可以通过将宽度和边距添加到 table 标签来解决这个问题,但是它可以在 div 标签中修复吗?还是我误解/遗漏了关于 div 标签如何工作的一些东西?我认为它会将任何样式应用于标签之间的任何元素。

非常感谢您的帮助!

【问题讨论】:

为什么首先在元素的结尾和开头使用&lt;hr&gt; 标签。这就是你有边界顶部和底部的东西。 &lt;hr&gt; 用于将 2 个元素分开,例如在 2 个段落之间。不标记元素的顶部或底部。 margin 是元素外部的空间。内部空间称为padding。因此,表格不受 div 的边距影响,因为表格在 div 内部而不是在外部。表格的宽度比 div 小。除非受到限制,否则 div 将占用 100% 的文档空间。除非发生溢出,否则该表将占用 div 空间的 100%。如果表格的内容更小,那么它当然不会占用整个可用空间,而只会占用所需的空间。 除此之外没有任何问题,您不应该使用表格来进行样式设置。对于像你这样的布局,你有 flexboxes 和 css-grid。 主要用于测试目的。在学习过程中,试图了解所有这些事情是如何工作的,以及改变参数的作用。从字面上看,我才几天就开始学习 HTML/CSS 哈哈。 【参考方案1】:

而不是:

<div style="width:100%; max-width: 800px; margin:auto; position:sticky; top:0px; ">

做:

<div style="flex-direction: column;width:100%;display: flex;max-width: 800px;margin:auto;position:sticky;top:0px;">

【讨论】:

【参考方案2】:

默认情况下,表格不会占用父级宽度的 100%。默认情况下,表格的宽度将取决于content。因此,只需将width: 100%; 添加到表格样式中,它将占用父母宽度的 100%。

<div style="width:100%; max-width: 800px; margin:auto; position:sticky; top:0px; ">
  <hr>
  <table style="width: 100%; border:1px solid black; background-color:Coral">
    <tr>
      <th><u>Section 1</u></th>
      <th><u>Section 2</u></th>
      <th><u>Section 3</u></th>
      <th><u>Section 4</u></th>
      <th><u>Section 5</u></th>
      <th><u>Section 6</u></th>
    </tr>
    <tr style="text-align:center">
      <td><a href="S1WordFormatting.html">Word<br/>Formatting</a></td>
      <td><a href="S2Lists.html">Lists</a></td>
      <td><a href="S3Tables.html">Tables</a></td>
      <td><a href="S4ImagesandVideos.html">Images and<br/>Videos</a></td>
      <td><a href="S5Linking.html">Linking</a></td>
      <td><a href="S6InputTypes.html">Input Types<br/>(Text Boxes)</a></td>
    </tr>
  </table>
  <hr>
</div>

【讨论】:

【参考方案3】:

内联样式(使用style= 设置是一次性定义。

内联 CSS 用于将独特的样式应用于单个 HTML 元素 https://www.w3schools.com/html/html_css.asp

如果您想多次重复使用相同的样式,请使用 css 类

<style>
.commonWidthAndMargin 
width:100%;
max-width: 800px;
margin:auto;

</style>
<div class="commonWidthAndMargin" style="position:sticky; top:0px; "> 
    <hr>
      <table class="commonWidthAndMargin" style="border:1px solid black; background-color:Coral">
        ...etc
      </table>
    <hr>
</div> 

此外,表的默认行为是不扩展到其父级。默认情况下,子 div 将占用其父 div 的 100%。见:link

【讨论】:

内联样式或 css 样式或头部样式之间没有区别,具体权重除外。除此之外,这不是这里的问题。你完全错过了这个问题,而不是试图回答这个问题本身。因此,您的 anwser 不适合作为 anwser 作为评论。 它们的继承方式有所不同。表格不会从其父级的内联样式继承宽度。 表也不会继承 css 文件中的空间。表的内容更小。默认情况下,表只会占用所需的空间。 在这种情况下,使用一个类来使表调整与其父级的共享值更有意义 也许可以,但这仍然不能解决实际问题。 css-style 或 inline 样式对表格默认宽度没有影响。你所说的每一句话都错过了实际的问题和问题。

以上是关于div 中两个 hr 标签之间的表格。表格不会从 div 中获取所有属性的主要内容,如果未能解决你的问题,请参考以下文章

在HTML中

css怎样让div里的表格居中对齐

html中如何让两个表格紧挨在一起

在表格单元格内的两个图像之间放置一个 Div

2019.4.2 HTML相关

如何使用ajax刷新刷新div?