HTML元素默认显示为:inline-block?


77

<div> 默认为 block

<span> 默认为 inline

有没有默认的inline-block

如果不是,那么什么特殊的标记名称适合我使用CSS来应用“内联块”?
还是我应该坚持使用课程?


我认为只有一个<img>
2014年

4
@ jack-tuck这是错误的,请参阅答案。
Jocelyn delalande '02

Answers:


41

据我所知,<img>标签是inline-block默认情况下唯一的标签。为了安全起见,我建议您上一堂课,您永远都不知道何时更改某个特定类型的所有元素会再次咬住您。或者,您始终可以组成自己的标签并为其分配标签display:inline-block;。这样,您就不会更改标准元素的默认功能...

编辑

还可以看出buttontextareainput,和select元素也inline-block

资料来源:

根据这个imginline-block http://dev.w3.org/html5/markup/img.html#img-display

这里声称buttontextarea等等都还有:http://www.w3.org/TR/CSS2/sample.html

编辑#2

尽管以上消息来源声称img标签是inline-block(由于Alohci所致)标签只是inline http://jsfiddle.net/AQ2yp/

以下在Fi​​refox中进行了测试:

buttoninline-blockhttp : //jsfiddle.net/GLS4P/

textareainlinehttp : //jsfiddle.net/235vc/

inputinlinehttp : //jsfiddle.net/RFKe8/

selectinline-blockhttp : //jsfiddle.net/5B4Gs/


12
它显示了关于img的神话被内联块传播的广泛性。然而,这很容易测试。只需在未CSS的img上使用任何浏览器的dom检查器,您就会看到它是display:inline。或查看此JS小提琴:jsfiddle.net/AQ2yp
Alohci 2014年

@Alohci我猜你是对的,刚刚在Chrome,FF和IE中进行了测试,所有这三个都作为inline
Dryden Long

@DrydenLong您应该考虑Web浏览器的区别
Guilherme Nascimento

7
@DrydenLong为清楚起见,请删除错误的信息。
Jocelyn delalande '02

1
@Esger-不能为内联元素设置高度和宽度是不正确的。您不能为未替换的嵌入式元素设置高度和宽度。img是替换的元素,因此限制不适用。“ inline-block”字面意思是“ inline level,块容器”。替换的元素不是块容器,因为被替换的元素不包含任何内容。也不能以任何方式将它们描述为类似于块容器的行为。它们与内联块元素的相似性仅限于其外部显示行为,即内联级别。
Alohci

22

有没有默认的inline-block

严格来说,没有。W3 HTML规范从未为任何元素指定默认的CSS属性值。他们的确为HTML 4提供了“默认样式表”,但是仅鼓励开发人员使用它-这不是要求,也不是任何强制性要求。HTML 5规范指示“典型的默认显示属性”,但同样,这些属性不是必需的(还要记住,HTML 5仍然是有效的草案)。

这样一来,所有默认值都将留给浏览器,以及开发人员实际如何将元素显示给用户。没有人可以保证特定元素会inline-block在某人的浏览器中显示为或以其他方式显示。如果您希望发生这种情况,则应始终明确设置。不要依赖“默认值”。

如果不是,那么什么特殊的标记名称适合我使用CSS来应用“内联块”?还是应该坚持使用课程?

这取决于您以及您如何设计页面。您应该始终使用语义上适合其中包含的内容的元素。如果该元素将始终在需要inline-block显示的上下文中使用,请务必将其设置为样式表中的元素。否则,您将不得不诉诸类或更具体的选择器,以使元素正确显示。


7

这是一个Fiddle,它获取大多数HTML标签的默认显示值。

小提琴

在chrome中,默认的内联块元素为: "INPUT", "BUTTON", "TEXTAREA", "SELECT"


不错,+ 1。在Firefox中,只有buttonselect。IE 11的所有4个均​​为inline-block
Dryden Long

4

默认情况下,您可以检查所有HTML元素及其属性的codependisplay有些标签语法已损坏,但这对我们的目的并不重要。

目前,有5个元素与display: inline-blockFF

  1. <button>
  2. <select>
  3. <meter>
  4. <progress>
  5. <marquee>

以及Chrome中的其他2个 (包括上述5个)

  1. textarea
  2. input

3

原则上,它取决于浏览器的默认值 display每个元素属性是。即使HTML5草案也没有规定必须使用什么值,尽管它以CSS的形式呈现了元素的“预期呈现”。

根据该默认样式表中的CSS 2.1规范的HTML,该具备的要素display: inline-block在默认情况下是buttoninputselect,和textarea。浏览器使用此类设置,但在Firefox中除外,该设置仅适用于buttonselect

在HTML5 CR的“渲染”部分中,meterprogress元素还被描述为具有内联块作为“预期的渲染”,并且实现了这些元素的浏览器似乎具有这种行为。该keygen元件也被描述为是内联块,但Firefox没有做到这一点(它实现keygen在内部作为select在DOM); IE完全不支持keygen。Chrome根据建议实施。

由于所有这些元素都具有相当特殊的含义,功能和渲染特质,因此它们都不适合作为通用元素使用,默认情况下它是一个内联块,并且可能具有各种含义。对于此类元素,您可以正常使用spandiv,具体取决于您是希望将内联还是块作为默认呈现。


2

我对此的解决方案是声明我所说的slice

的CSS

sl {
    display: inline-block;
}

用法

<sl>inline block stuff</sl>

1

buttontextareainput,和select默认inline-block

在事件中,你会想要inline-block一个div你给它一个类名。

.inline-block {
    display: inline-block
}

然后...

<div class="inline-block"></div>

更正

我误会了img。这似乎默认为inlineinline-block


1

现在,您可以创建一个Custom元素(例如:<inline-block>或其他),其CSS属性默认display设置为inline-block

customElements.define( 'inline-block', class extends HTMLElement {
    constructor() {
        super()
        this.attachShadow( { mode: 'open' } )
            .innerHTML = `<style> :host { display: inline-block } </style>
                          <slot></slot>`
    }
} )
#hw { background-color: lightblue }
<inline-block id="hw">Hello World</inline-block>


0

目前,这并不是对这个问题的真正答案,但是有足够的支持,也许有一天会如此。

<seg>“段”的缩写。如,线段。

使用polyfill:

<style> seg { display: inline-block; } </style>

如果有一个正式的名称,那真的很好,但是没有一个,所以这是我所知道的这种元素的最佳(IMO)建议名称。


-10

是的,有一个默认为内联的元素。

答案是span元素。

<span>

1
OP要求inline-block不要inline
Dryden Long

啊,没听懂。
httpgio 2014年

1
如果您使用内联块元素,请当心IE!您需要应用zoom:1使其跨浏览器与IE兼容。您已被警告
httpgio 2014年

1
除了显示错误的值外,这还是毫无用处的。在浏览器的默认样式表中未设置显示属性的所有元素都将内联显示-这是该属性的初始值。
animuson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.