置換インライン要素とインラインブロック要素って同じですか?
似ている部分(たとえば、内在サイズを持つ、上下マージンを設定できる)はありますが、CSS3において明確に違うと言えます。
- 定義が全く別にされています。
14.4 Replaced elements | HTML Standard
replaced element | CSS Display Module Level 3
inline-block | CSS Display Module Level 3
-
inline-block
は子要素を持ちますが、置換要素の多くは空要素で、子要素を持つものもそのコンテンツに置換されます。そのため、内部に別のコンテンツを持つことができず、置換要素の内容物はCSSでコントロールできません。つまり、video source{ display: none; }
のようなルールは適用できません。
-
inline-block
は、CSS3においてinline flow-root
と同義なので、ブロック整形コンテキストを持ち、ブロックコンテナとなります。
置換要素がinline-block
と同じであるならば、置換要素もブロック整形コンテキストを持つブロックコンテナになることになりますが、置換要素は前述の通り内容をCSSでコントロールできません。
これは私見ですが、そもそも整形コンテキストにあまり意味はなく、<display-inside>
について論ずる必要が不明だと思います。
<display-inside>
について論ずる必要がないのであれば、inline-block
でもinline
でも、あるいはinline-table
であっても差異は出ないはずですから、「置換インライン要素とインラインブロック要素が同じ」という主張は、「置換インライン要素とインライン要素が同じ」という主張と特段の違いがありませんから、あまり意味がないと感じます。
img要素にdisplay: block;を指定して、border: solid;を指定すると、borderの横幅が親要素いっぱいまで広がっていないのですが、これはimg要素が置換インライン要素であることと関係ありますか?
display: block;
を指定しているので「置換ブロック要素」の間違いだと思いますが、
The used value of 'width' is determined as for inline replaced elements.
10.3.4 Block-level, replaced elements in normal flow | Visual formatting model details
If 'height' and 'width' both have computed values of 'auto' and the element also has an intrinsic width, then that intrinsic width is the used value of 'width'.
10.3.2 Inline, replaced elements | Visual formatting model details
となっており、置換要素はインラインでもブロックでも、height
とwidth
の両方がauto
である時は、内在サイズに従うことになっています。
(もちろん、フレックス整形コンテキスト下などにおいては、別の制約を受けます。ブロック整形コンテキストとインライン整形コンテキストにおいては、ということです)
余談ですが。
初期値でインラインブロック要素の物はない
ある意味で正しいです。
なぜならば、全ての要素の初期値はinline
と決まっているからです。
初期値 inline
display - CSS: カスケーディングスタイルシート | MDN
では、なぜdiv
がblock
として表示されるかというと、デフォルトCSSによるものです。
Default style sheet for HTML 4
リセットしてやればinline
になります。
サンプル
なので、ある意味では正しいのですが、「初期値」がデフォルトCSSのことならば、input, select { display: inline-block }
というルールがあるので、間違っています。