div成为前一个div的孩子? - CSS 的怪癖? Javascript? [复制]

Posted

技术标签:

【中文标题】div成为前一个div的孩子? - CSS 的怪癖? Javascript? [复制]【英文标题】:Div becomes child of previous div? - a quirk of CSS? Javascript? [duplicate] 【发布时间】:2015-10-31 01:29:23 【问题描述】:

它在我可以看到页面的所有浏览器上都以这种方式工作。我向你发誓,这是来自 htmlexact 代码:

<td class="bardisplay">
  <div class="bar hot" />
  <div class="bar cool" />
</td>

但是,在我引入的每个浏览器的调试器中,DOM 检查器都会显示如下内容:(Chrome,此处)

Mozilla、IE 和 Chrome 之间没有区别。当我在 Chrome 调试器中看到它时,我差点吓坏了。

这里是所有相关的 CSS:

  td.bardisplay  
      height      : 66px;
      padding     : 8px 0px;
      margin-left : 5pt;
  

  .bar  height  : 50px; 
  .hot  
    float            : left;
    background-color : red;
  
  .cool   
    float            : left;
    background-color : green; 
  

现在,真正奇怪的是:当我将所有条形显示放入主表(3 级以上)时,我没有遇到这个问题,相同的 html

我有一个六列的表格,一个带有标签,一个带有显示,一个带有比率,接下来的三个重复,但我不喜欢第二组列如何“摇摆”回来随着表格的更新。所以我将主表设置为单行的两个 td,其中包含三列表。显示现在是坚如磐石,除了 DOM 想把一个 div 放在另一个里面。

在发帖之前,我用谷歌搜索了所有我能想到的方法。

【问题讨论】:

Divs 不会自动关闭。 @Quentin,如果你调用使用错误的斜线来关闭元素“相同的问题”,是的,我猜它有。 【参考方案1】:

&lt;div&gt;cannot 自关闭,因此浏览器假定第二个是第一个的子:

<td class="bardisplay">
  <div class="bar hot"></div>
  <div class="bar cool"></div>
</td>

在 HTML 5 中,&lt;foo /&gt; 表示 &lt;foo&gt;,即开始标记。它不是“自闭标签”。相反,某些元素被指定为没有结束标签,例如&lt;br&gt;。这些统称为空元素。对于沉迷于 XML 的人来说,斜线只是语法糖。在非空元素标签中使用斜线是无效的,但浏览器无论如何都会将其解析为开始标签,导致结束标签不匹配。

Source

【讨论】:

好吧,这很奇怪。因为,当我重写表格时,我确实将它 &lt;div...&gt;&lt;/div&gt; 更改了,并且我认为我已经完成了,并进行了全局替换并将其更改回来,但没有任何改进。不过,在我阅读的有关 HTML 5 的文章中,我并不知道它们将 远离 XML。这很容易知道。【参考方案2】:

这个怎么样?

<td class="bardisplay">
    <div class="bar hot"> </div>
    <div class="bar cool"> </div>
</td>

【讨论】:

以上是关于div成为前一个div的孩子? - CSS 的怪癖? Javascript? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

div 类的最后一个孩子

CSS如何以不同方式转换(使用转换)父母和孩子

CSS规则:为所有有孩子的人赋予样式[重复]

在 IE8 中获取 div 的最后一个孩子?

第一个和最后一个孩子的CSS [重复]

如何使用 :nth-child() 来选择所有孩子中的所有其他 <div> ?