Skip to content

Commit 80648af

Browse files
committed
[css-overflow-3] Inserting the block ellipsis should not cause relayouts
Treating it as ''line-height: 0'' should handle that. See w3c#2905
1 parent ae98223 commit 80648af

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

css-overflow-3/Overview.bs

+18-15
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ spec:css-display-3; type:property; text:display
4444
<pre class="anchors">
4545
url: https://www.w3.org/TR/2008/CR-css3-marquee-20081205/#the-overflow-style; type: property; text: overflow-style;
4646
url: https://www.w3.org/TR/CSS22/visuren.html#positioned-element; type: dfn; spec:css2; text:positioned;
47+
url: https://www.w3.org/TR/CSS22/visudet.html#strut-element; type: dfn; spec:css2; text:strut;
4748
</pre>
4849
<style>
4950
.awesome-table td { padding: 5px; }
@@ -849,44 +850,46 @@ Indicating Block-Axis Overflow: the 'block-ellipsis' property</h3>
849850
reducing the space in the line box
850851
available to the other contents of the line.
851852
This inline is assigned ''unicode-bidi: plaintext''
853+
and ''line-height: 0''
852854
and is placed in the line box after the last
853-
<a>soft wrap opportunity</a> [[!CSS-TEXT-3]]
855+
<a>soft wrap opportunity</a> (see [[!CSS-TEXT-3]])
854856
that would still allow the entire <a>block overflow ellipsis</a> to fit on the line.
855-
(This can result in the entire contents of the line box being replaced.)
856857
For this purpose, <a>soft wrap opportunities</a> added by 'overflow-wrap' are ignored.
858+
If this results in the entire contents of the line box being displaced,
859+
the line box is considered to contain a [=strut=], as defined in [[CSS2/visudet.html#leading]].
857860
Text <a href="https://www.w3.org/TR/css-text-3/#justification">alignment and justification</a>
858861
occurs after placement,
859862
and measures the inserted <a>block overflow ellipsis</a>
860863
together with the rest of the line’s content.
861864

865+
Note: Setting the [=block overflow ellipsis=]'s 'line-height' to ''0''
866+
makes sure that inserting it cannot cause the line's height to grow,
867+
which could cause further relayouts and potentially cycles.
868+
This is almost equivalent to inserting the [=block overflow ellipsis=]
869+
as a paint-time operation, except that it still participates in alignment and justification.
870+
The downside is that unusually tall / deep glyphs in the [=block overflow ellipsis=]
871+
may overflow.
872+
862873
The [=block overflow ellipsis=] must not be included
863874
in either the ''::first-letter'' nor the ''::first-line'' pseudo-elements.
864875

865876
If there is no next <a>fragmentation container</a>
866877
and thus the remainder of the content after the break would be discarded,
867878
then the UA may visually replace the contents of the line,
868879
as it does for 'text-overflow'.
869-
If, however, there is a next <a>fragmentation container</a>
870-
that would receive subsequent content,
871-
then the content replaced by the <a>block overflow ellipsis</a>
872-
must be pushed to the next <a>fragmentation container</a>
873-
and the <a>block overflow ellipsis</a> inserted and laid out
874-
exactly as if it were part of the <a>in-flow</a> contents of the line.
875-
This can result in changes to layout within or impacted by the line.
876-
The means of breaking any resulting cycles is up to the UA.
877880

878-
Issue(2905): We may want to get rid of the "MAY" in the previous paragraph,
879-
and require a single behavior.
880-
Finding how to break the cycles probably should be defined as well.
881+
If there is a subsequent <a>fragmentation container</a> in the [=fragmentation context=]
882+
that would receive subsequent content,
883+
then the content displaced by the <a>block overflow ellipsis</a>
884+
must be pushed to that <a>fragmentation container</a>.
881885

882886
The UA must treat the <a>block overflow ellipsis</a> as an unbreakable string,
883887
If any part of the [=block overflow ellipsis=] overflows,
884888
it is treated as [=scrollable overflow=],
885889
and its rendering is affected by the 'text-overflow' property.
886890

887891
The <a>block overflow ellipsis</a> does not capture events:
888-
pointer events are dispatched to whatever is underneath
889-
or otherwise visually replaced by it.
892+
pointer events are dispatched to whatever is underneath it.
890893

891894
It also has no effect on the intrinsic size of the box:
892895
its <a lt="min-content size">min-content</a> and <a lt="max-content size">max-content</a> sizes

0 commit comments

Comments
 (0)