【问题标题】:HTML/CSS Display:Inline IssueHTML/CSS 显示:内联问题
【发布时间】:2023-04-02 13:51:02
【问题描述】:

我在一个 HTML 文档中有多个文本段落。此外,在不同的点,一些文本被包裹在<h6></h6> 标签中,这意味着应用某些字体效果。在我的 CSS 中,h6 标记设置为 display:inline;,因此该段落继续连续运行而没有换行符。这除了适用于每个页面上使用的 h6 的第一个实例:第一个元素之前总是有一个换行符。有谁知道为什么/如何防止这种情况发生?

CSS:

h6 {
    font-family:'Courier New',Courier,'Nimbus Mono L',monospace;
    font-size:125%;
    display:inline;
}

HTML:

As expected, not a lot was accomplished (in this plane) over a
five-day weekend when much of it was devoted tot he college
process. However, I'm down to only a handful of HTML-validation
errors. A couple of which are going to be particularly problematic,
dealing with my new <h6>Lytebox JavaScript</h6> I talked about
earlier: to enable Lytebox on an image, you give it a CSS tag
<h6>data-lyte-options</h6>...

h6的第二个精华可以正常工作,但是第一个之前有一个换行符。

【问题讨论】:

  • 张贴你的css,让我们看看
  • 请发布您的 html,至少对于 h6 部分...也许换行符属于前一个元素/标签?
  • P 中是否有 H6?您的 P 元素是否也内联?向我们展示您的 HTML 的简化示例。甚至更好:输入JSFiddle
  • 使标题内联有点滥用 - 使用具有等效格式的&lt;span&gt; 不是更好吗?
  • H6 在 P 内部,我会在稍后发布一个示例。我不认为在 P 中包含 H6 是一个问题,因为除了第一个之外,其他所有实例都可以正常工作,而 W3C 对此没有任何问题。

标签: html css styles


【解决方案1】:

标题元素不能包含在段落中,因为它们本质上被视为块级元素,因此浏览器在到达像标题这样的块级元素时会中断段落。

您的特定 HTML 会被浏览器更改为此:

<p>
As expected, not a lot was accomplished (in this plane) over a
five-day weekend when much of it was devoted tot he college
process. However, I'm down to only a handful of HTML-validation
errors. A couple of which are going to be particularly problematic,
dealing with my new
</p>                           <!-- browsers end a paragraph here!!!!! -->
<h6>Lytebox JavaScript</h6>
I talked about earlier: to enable Lytebox on an image, you give it a CSS tag
<h6>data-lyte-options</h6>
...
<p></p>

我在 HTML 规范中找到了reference to this fact

P 元素代表一个段落。它不能包含块级元素(包括 P 本身)。

还有another reference 谈论块级元素:

样式表提供了指定任意元素呈现的方法,包括元素是呈现为块还是内联。在某些情况下,例如列表元素的内联样式,这可能是合适的,但一般而言,不鼓励作者以这种方式覆盖 HTML 元素的传统解释 p>

解决方案?

问题是您使用标题作为通常的段落文本(具有自己的样式)。您应该使用 SPAN 元素来使您的 HTML 有效。

如果您只想将文本格式化为代码显示,那么您也可以使用 CODE 元素,该元素应该完全用于此目的。

【讨论】:

  • 你的 CSS,将 display:inline 设置为 h6,p 而不是 h6 就可以了。谢谢。
  • @ConnorNeville:但不要那样做。您的 h6 元素仍然不包含在段落中,即使您已将它们放在标记中。检查this example,它清楚地表明了这个问题。而是听从我的建议,不要这样做,并用固有内联的东西替换 h6...
【解决方案2】:

为什么不创建一个独特的类并根据需要将其应用于您的&lt;p&gt; 标签。你提到一些包裹在 h6 标签中以应用样式。这可以使用&lt;p class="onestyle"&gt;&lt;/p&gt; 完成,但您仍然可以拥有&lt;p&gt;&lt;/p&gt; 常规p 标签。

然后使用您的 h6,您可以将它们向左浮动,而不是使用 display:inline 或使用 inline-block,效果几乎相同。然后根据需要对所有样式应用填充边距。

【讨论】:

    【解决方案3】:

    您希望元素是内联的并应用特殊的字体格式对吗?然后您可以将它们包含在“跨度”标签中

    As expected, not a lot was accomplished (in this plane) over a five-day weekend when much of it was devoted tot he college process. However, I'm down to only a handful of HTML-validation errors. A couple of which are going to be particularly problematic, dealing with my new <span>Lytebox JavaScript</span> I talked about earlier: to enable Lytebox on an image, you give it a CSS tag <span>data-lyte-options</span>
    
    span { font-family:'Courier New',Courier,'Nimbus Mono L',monospace;font-size:125%;}
    

    【讨论】:

      【解决方案4】:

      尝试使用 CSS 选择器专门针对该实例。不是 100% 确定这会解决问题,但值得一试。

      h6:first-child { display:inline; }
      

      【讨论】:

      • 这不是 css3 选择器。 first-child 一直在使用 CSS。
      • 对不起,太习惯 jQuery 选择器了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      • 2022-07-28
      相关资源
      最近更新 更多