User:RainSlide/CSS Boxes
This page is mainly for showing why Template:Hint, Template:Note and Template:Warning uses display: table
to archive compatibility for both adaptive width and floating sibling(s).
If a set of style is not compatible with adaptive width, it span to its full width even when it don't need to.
If a set of style is not compatible with floating sibling(s), the element may still work well with some short content in it; in another word, it may still looks fine when its content width + margin + padding + border is lower than the "remaining width" lefted by the floating sibling(s). So we have to use Lorem ipsum (as well as a floating box, for sure) to test it.
Ideally, you may just set the widths to fixed values, and pretend nothing happens and CSS is awesome. However, the content container of MediaWiki got adaptive width, and maybe you are maintaining a MediaWiki Template, with only inline styles.
is
Awesome
Table
display: table
This is a floating box.
This is a floating box.
This is a floating box.
This is a floating box.
The border-collapse & padding problem
This is a wikitable |
---|
No padding when it's in a wikitable.
|
This is beacuse .wikitable
has border-collapse: collapse
on it, and our box inherits it from .wikitable
. border-collapse: collapse
Disables padding on the table itself, allowing only padding on the table cells, to collapse the outer table borders.
To fix this padding problem in .wikitable
s, one must apply border-collapse: separate
to the box.
However, if one day, someone REALLY need to use the box as a CSS table,
the border of its cell will be separated by default, which may affect the visual.
This is another wikitable |
---|
The padding is back with
border-collapse: separate ! |
Here inside a border-collapse: collapse table... |
|
---|---|
Every thing is fine. | Just fine |
But, here inside a border-collapse: separate table... |
|
---|---|
The separated border... | Maybe that's not what we want. |
For those who are interested,
to use the box or other elements with display: table
as a CSS table and actually do something,
or to work around with this padding problem with an additional div,
see ungrid.
But, don't use two elements when you can just use one element + one CSS rule to archive the exact same result.
Since I don't think the Hint, Note and Warning boxes should be put into a .wikitable
,
and it seems no one will use them as CSS tables any time sooner,
I'm not favouring either of those two usage, and keep those templates minimal.
display: table-cell
This is a floating box.
This is a floating box.
This is a floating box.
This is a floating box.
Table cells are not blocky! Without this sentence, they are in the same row by now.
Table cells have no margin.
This is a floating box.
This is a floating box.
This is a floating box.
This is a floating box.
There can only be one table caption per table, or, per anything.
display: table-row
This is a floating box.
This is a floating box.
This is a floating box.
This is a floating box.
Table rows have no margin, padding or border.
display: table-others
Other table display values works just like table rows, (table-row-group
, table-header-group
and table-footer-group
), or won't even display its contents (table-column
and table-column-group
).
A new block formatting context
See guide Block formatting context on MDN.
float: left
Will everything go right with float set to left?
This is a floating box.
This is a floating box.
This is a floating box.
This is a floating box.
No, something falls down.
display: inline-block
This is a floating box.
This is a floating box.
This is a floating box.
This is a floating box.
display: flow-root
This is a floating box.
This is a floating box.
This is a floating box.
This is a floating box.
And…
This is the end of part one. Part two will feature contain: content
, width: fit-content
, width: max-content
, box-sizing: border-box; max-width: 100%
, display: flex
, display: grid
, and more, if I ever got time to work on the part two.