[csswg-drafts] [css-lists] Should collapsible space after inside ::marker be preserved? (#4891)

Loirooriol has just created a new issue for https://github.com/w3c/csswg-drafts:

== [css-lists] Should collapsible space after inside ::marker be preserved? ==
In https://github.com/w3c/csswg-drafts/issues/4448#issuecomment-567144044 we resolved that ::marker should have `white-space: pre` in UA origin. That is needed for outside markers, and we decided to keep it simple and also apply it to inside markers.

But consider this case:

```html
<ol style="list-style-position: inside">
  <li>Text</li>
  <li>
    Text
  </li>
</ol>
```

For block container elements like `<li>`, leading and trailing space doesn't matter. So just looking at the HTML, some authors may think that both `Text` will be aligned equally.

However, the ::marker is inserted at the very beginning of the `<li>`, and since it's inside, it behaves as a normal inline. So the leading space is no longer at the beginning of the line, and is not trimmed in [§4.1.2](https://drafts.csswg.org/css-text/#white-space-phase-2).1.

Since the ::marker has a trailing space, both list items could still look the same via [§4.1.1](https://drafts.csswg.org/css-text/#white-space-phase-1):

> Any collapsible space immediately following another collapsible space [...] is collapsed

But that doesn't apply if the ::marker has `white-space: pre`. So the 1st list item ends up with 1 space and the 2nd list item with 2 spaces.

What behavior do we want here? We don't have interoperability:

 - In Chromium (both legacy and LayoutNG), WebKit and old Edge, the texts are aligned:

    ![Chromium](https://user-images.githubusercontent.com/7477678/77200570-1fb47380-6aeb-11ea-9b5e-1f77a195b420.png)

 - In Firefox, they aren't:

    ![Firefox](https://user-images.githubusercontent.com/7477678/77201483-d5cc8d00-6aec-11ea-8c99-0fef06630e11.png)

So I guess we can choose among:

 1. Keep `white-space: pre`. Firefox is correct, changing Chromium will be trivial.
 2. Keep `white-space: pre` but add some magic that if a text ::marker has a trailing space and is followed by collapsible spaces, then these collapsible spaces are removed, even if the ::marker space is not collapsible. This will keep Chromium's behavior but implementing this magic would be annoying.
 3. Say that inside markers don't get assigned `white-space: pre` in UA origin. This is close to what Chromium does right now. But I guess doing this properly would need pseudo-classes like `::marker:inside` and `::marker:outside`, even if just for internal use, but that would create a circularity if in the future we allow setting `list-style-position` in the ::marker itself.

I lean towards 1.

Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/4891 using your GitHub account

Received on Friday, 20 March 2020 21:48:08 UTC