-
Notifications
You must be signed in to change notification settings - Fork 715
[css-sizing-4] Only apply contain-intrinsic-size: auto with content-visibility: auto #6308
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
I think this is a good change, because offscreen placeholder sizing is the only use case we've defined for this feature. And it's very important to provide a way to utilize Also, for developers who want to have the same behavior without |
The CSS Working Group just discussed
The full IRC log of that discussion<dael> Topic: [css-sizing-4] Only apply contain-intrinsic-size: auto with content-visibility: auto<dael> github: https://github.com//issues/6308 <dael> cbiesinger: With contain-intrinsic-size: auto. you can get into situation where current size of element is based on css prop that's no longer set on element. <dael> cbiesinger: Set explicit width, remove it, explicit width could still be rememebred and applied. <dael> cbiesinger: Weird situation. Main use case for contain-intrinsic-size: auto is when in combo with contain-vsicility: auto <dael> cbiesinger: Suggestion is to make it only apply with contain-visibility: auto which means this will not be visable for user but address main use case <dael> cbiesinger: What does WG think. Is this a problem we care about and, if is, is this a good solution <Rossen_> q? <dael> TabAtkins: Makes sense to me. Happy to do this. <dael> emilio: Can you remind me how we made apply contain-intrinsic-size: auto work? Does it only change behavior on the screen? <dael> emilio: Can you remind me of how we made content-visibility: auto work? Does it change just the used value? <dael> cbiesinger: Not sure offhand <dael> emilio: Depending on how that works this doesn't solve the problem or solves it. <dael> emilio: If the computed value remains auto proposed solution...needs to be more subtle <dael> chrishtr: Saying script looks at bounding client rect of the offscreen element it would notice old width? <dael> emilio: Yes, but not complaining. When have content-visbility: auto and becomes visible do we change content-visbility style? <dael> chrishtr: No. Contain-size is removed <dael> cbiesinger: Spec only changes used value of contain <dael> emilio: Then this doesn't solve issue, does it? Need to be only for content-visibility: auto that are offscreen <dael> cbiesinger: If it's on screen cotnain size won't apply so c-i-s doesn't apply <TabAtkins> To be clear: it has no effect on the used value of 'contain'. It simply applies containments, *independent* of the 'contain' property. <dael> emilio: Makes sense. Wanted that clarified <dael> Rossen_: That satisfies your concern emilio? <dael> emilio: Yeah. Seems reasonable <dael> Rossen_: Other opinions or concerns? <dael> emilio: Another question- if main use case...why do we want to make this special case? I understand it can cause weird behavior. If authors not expected to use c-i-s:auto with things that don't have c-v:auto...do we need to special case? <dael> chrishtr: Arguement for is to avoid poss of element on screen that dev is confused about. Only use case we know of is placeholder sizing when element is offscreen. <dael> chrishtr: Had to say if would be a big problem in practice <dael> emilio: I guess somebody could come with creative use cases. I don't know. I would prefer to not special case if we don't have evidence this is really confusing. not a hill I want to die on <dael> cbiesinger: I don't really care so much myself. TAG and someone else had concerns and prefered the change. I'm happy not change if WG thinks we don't need to <dael> emilio: TAG is generally smarter then me. If they think would be confusing I'm okay <dael> Rossen_: cbiesinger what was the context of the review? <dael> cbiesinger: Review auto value of c-i-s. I can find a link to the review <dael> Rossen_: We can link in the issue later <cbiesinger> https://github.com/w3ctag/design-reviews/issues/624 <dael> Rossen_: There is some thumbs up and lots of not really caring about how this goes one way or the other. I want to call for objections to resolving on this <dael> Rossen_: We can always come back, but not hearing strong pushback. Proposed behavior does make sense and will improve the behavior <dael> Rossen_: Objections to only apply contain-intrinsic-size: auto with content-visibility: auto <dael> RESOLVED: only apply contain-intrinsic-size: auto with content-visibility: auto <chrishtr> Thanks all! |
Whoops, didn't link the edits for this issue to this thread: 22a5e0e |
Reopening as discussed, that edit does not affect c-v: auto |
Didn't commit 22a5e0e clarify that c-v: auto is the only feature affected by the auto behavior? |
…element is skipping its contents, so you don't have the chance of a phantom size.
No, my mistake, that was an irrelevant commit, it was just about the fact that an element can gain and lose a last remembered size several times. It has nothing to do with the "phantom size visibly sticking around" problem that Christian is talking about here. The edit I just committed (6eb6faa) is directly handling that, tho. |
I left a comment on that commit.. |
As per w3c/csswg-drafts#6308, we should only use the last remembered size when we have `content-visibility: auto` and are currently hidden. R=vmpstr@chromium.org Bug: 1199460 Change-Id: I35e884d0b0ffab538fee20311da8dcb79d580da5 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3311271 Commit-Queue: Christian Biesinger <cbiesinger@chromium.org> Commit-Queue: Vladimir Levin <vmpstr@chromium.org> Auto-Submit: Christian Biesinger <cbiesinger@chromium.org> Reviewed-by: Vladimir Levin <vmpstr@chromium.org> Cr-Commit-Position: refs/heads/main@{#947670}
…n on-screen c-v:hidden element using a phantom size would also still be bad.
https://bugs.webkit.org/show_bug.cgi?id=238867 Reviewed by NOBODY (OOPS!). This patch adds support for contain-intrinsic-size value "none | <length>". The value "auto && <length>" is not supported, because per [1] it depends on "content-visibility:auto" which is not supported yet. Per [2], the properties allow elements with size containment to specify an explicit intrinsic inner size, which is determined in RenderBox. These values will affect the intrinsic width calculation in computeIntrinsicLogicalWidths. As to intrinsic height, the value will be overridden at the point after layout children and before logical height calculation. For grid layout, we need to use explicit intrinsic inner size to calculate auto repetition, if width/height is auto. [1] w3c/csswg-drafts#6308 [2] https://www.w3.org/TR/css-sizing-4/#intrinsic-size-override * LayoutTests/TestExpectations: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-003-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-004-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-005-expected.txt: * Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp: (WebCore::GridTrackSizingAlgorithm::computeGridContainerIntrinsicSizes): Set explicitIntrinsicInnerLogicalSize to m_minContentSize and m_maxContentSize. (WebCore::GridTrackSizingAlgorithm::run): Don't skip stretching tracks for size containment if there is explicitIntrinsicInnerLogicalSize. * Source/WebCore/rendering/RenderBlock.cpp: (WebCore::RenderBlock::computeIntrinsicLogicalWidths const): Ditto * Source/WebCore/rendering/RenderBlockFlow.cpp: (WebCore::RenderBlockFlow::computeIntrinsicLogicalWidths const): Ditto * Source/WebCore/rendering/RenderBox.cpp: (WebCore::RenderBox::updateLogicalHeight): Set explicitIntrinsicHeight to logicalHeight if it exists. (WebCore::RenderBox::computeLogicalHeightWithoutLayout const): We should take account of explicitIntrinsicInnerLogicalHeight here. (WebCore::RenderBox::hasExplicitIntrinsicInnerWidth const): (WebCore::RenderBox::explicitIntrinsicInnerWidth const): (WebCore::RenderBox::hasExplicitIntrinsicInnerHeight const): (WebCore::RenderBox::explicitIntrinsicInnerHeight const): * Source/WebCore/rendering/RenderBox.h: (WebCore::RenderBox::explicitIntrinsicInnerLogicalWidth const): (WebCore::RenderBox::explicitIntrinsicInnerLogicalHeight const): * Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp: (WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths const): Ditto * Source/WebCore/rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths const): Ditto * Source/WebCore/rendering/RenderFlexibleBox.cpp: (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths const): Ditto * Source/WebCore/rendering/RenderGrid.cpp: (WebCore::RenderGrid::layoutBlock): Should use explicitIntrinsicInnerHeigth as the definite size if exists. (WebCore::RenderGrid::computeIntrinsicLogicalWidths const): Don't add gutterSize if it's explicitIntrinsicInnerLogicalSize. (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize const): Ditto. (WebCore::RenderGrid::explicitIntrinsicInnerLogicalSize const): Ditto. (WebCore::RenderGrid::computeAutoRepeatTracksCount const): Use explicitIntrinsicInnerLogicalSize as availableSize if the size of grid container is not specified (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const): The tracks of grid container with size containment are not empty if hasExplicitIntrinsicInnerLogicalSize. * Source/WebCore/rendering/RenderGrid.h: * Source/WebCore/rendering/RenderListBox.cpp: (WebCore::RenderListBox::computeIntrinsicLogicalWidths const): Ditto. (WebCore::RenderListBox::computeLogicalHeight const): Use explicitIntrinsicInnerLogicalHeight as estimated height not the sum of item height. * Source/WebCore/rendering/RenderMenuList.cpp: (RenderMenuList::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderReplaced.cpp: (WebCore::RenderReplaced::computeIntrinsicRatioInformation const): Don't let size containment effect aspect ratio. * Source/WebCore/rendering/RenderReplaced.h: Return explicitIntrinsicInnerSize if exits. * Source/WebCore/rendering/RenderSlider.cpp: (WebCore::RenderSlider::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderVideo.cpp: (WebCore::RenderVideo::calculateIntrinsicSize): Ditto. * Source/WebCore/rendering/style/RenderStyle.cpp: (WebCore::rareNonInheritedDataChangeRequiresLayout): The changes of contain-intrinsic-size should require layout.
https://bugs.webkit.org/show_bug.cgi?id=238867 Reviewed by NOBODY (OOPS!). This patch adds support for contain-intrinsic-size value "none | <length>". The value "auto && <length>" is not supported, because per [1] it depends on "content-visibility:auto" which is not supported yet. Per [2], the properties allow elements with size containment to specify an explicit intrinsic inner size, which is determined in RenderBox. These values will affect the intrinsic width calculation in computeIntrinsicLogicalWidths. As to intrinsic height, the value will be overridden at the point after layout children and before logical height calculation. For grid layout, we need to use explicit intrinsic inner size to calculate auto repetition, if width/height is auto. [1] w3c/csswg-drafts#6308 [2] https://www.w3.org/TR/css-sizing-4/#intrinsic-size-override * rendering/GridTrackSizingAlgorithm.cpp: (WebCore::GridTrackSizingAlgorithm::computeGridContainerIntrinsicSizes): Set explicitIntrinsicInnerLogicalSize to m_minContentSize and m_maxContentSize. (WebCore::GridTrackSizingAlgorithm::run): Don't skip stretching tracks for size containment if there is explicitIntrinsicInnerLogicalSize. * rendering/RenderBlock.cpp: (WebCore::RenderBlock::computeIntrinsicLogicalWidths const): Ditto. * rendering/RenderBlockFlow.cpp: (WebCore::RenderBlockFlow::computeIntrinsicLogicalWidths const): Ditto. * rendering/RenderBox.cpp: (WebCore::RenderBox::updateLogicalHeight): Set explicitIntrinsicHeight to logicalHeight if it exists. (WebCore::RenderBox::computeLogicalHeightWithoutLayout const): We should take account of explicitIntrinsicInnerLogicalHeight here. (WebCore::RenderBox::hasExplicitIntrinsicInnerWidth const): (WebCore::RenderBox::explicitIntrinsicInnerWidth const): (WebCore::RenderBox::hasExplicitIntrinsicInnerHeight const): (WebCore::RenderBox::explicitIntrinsicInnerHeight const): * rendering/RenderBox.h: (WebCore::RenderBox::explicitIntrinsicInnerLogicalWidth const): (WebCore::RenderBox::explicitIntrinsicInnerLogicalHeight const): * rendering/RenderDeprecatedFlexibleBox.cpp: (WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths const): Ditto. * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths const): Ditto. * rendering/RenderFlexibleBox.cpp: (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths const): Ditto. * rendering/RenderGrid.cpp: (WebCore::RenderGrid::layoutBlock): Should use explicitIntrinsicInnerHeigth as the definite size if exists. (WebCore::RenderGrid::computeIntrinsicLogicalWidths const): Don't add gutterSize if it's explicitIntrinsicInnerLogicalSize. (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize const): Ditto. (WebCore::RenderGrid::explicitIntrinsicInnerLogicalSize const): Ditto. (WebCore::RenderGrid::computeAutoRepeatTracksCount const): Use explicitIntrinsicInnerLogicalSize as availableSize if the size of grid container is not specified (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const): The tracks of grid container with size containment are not empty if hasExplicitIntrinsicInnerLogicalSize. * rendering/RenderGrid.h: * rendering/RenderListBox.cpp: (WebCore::RenderListBox::computeIntrinsicLogicalWidths const): Ditto. (WebCore::RenderListBox::computeLogicalHeight const): Use explicitIntrinsicInnerLogicalHeight as estimated height not the sum of item height. * rendering/RenderMenuList.cpp: (RenderMenuList::computeIntrinsicLogicalWidths const): Ditto. * rendering/RenderReplaced.cpp: (WebCore::RenderReplaced::computeIntrinsicRatioInformation const): Don't let size containment effect aspect ratio. * rendering/RenderReplaced.h: Return explicitIntrinsicInnerSize if exits. * rendering/RenderSlider.cpp: (WebCore::RenderSlider::computeIntrinsicLogicalWidths const): Ditto. * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::computeIntrinsicLogicalWidths const): Ditto. * rendering/RenderVideo.cpp: (WebCore::RenderVideo::calculateIntrinsicSize): Ditto. * rendering/style/RenderStyle.cpp: (WebCore::rareNonInheritedDataChangeRequiresLayout): The changes of contain-intrinsic-size should require layout.
I was confused because from the spec it seems that According to 6eb6faa#r61269377
So in https://software.hixie.ch/utilities/js/live-dom-viewer/saved/10484 I expect both elements to keep being 50px tall when gaining |
… as well Based on discussion on w3c/csswg-drafts#6308 (comment) and based on the spec as written, contain-intrinsic-size auto should apply to all elements that skip their contents, not just content-visibility: auto elements. This patch does this. R=chrishtr@chromium.org Change-Id: Ibf38be014ae25ff64af027f6c1608caa7ded3514
… as well Based on discussion on w3c/csswg-drafts#6308 (comment) and based on the spec as written, contain-intrinsic-size auto should apply to all elements that skip their contents, not just content-visibility: auto elements. This patch does this. R=chrishtr@chromium.org Change-Id: Ibf38be014ae25ff64af027f6c1608caa7ded3514
The CSS Working Group just discussed
The full IRC log of that discussion<TabAtkins> Topic: contain-intrinsic-size and content-visibility<TabAtkins> github: https://github.com//issues/6308#issuecomment-1191880225 <TabAtkins> vmpstr: We previous resolved that cis:auto applies only if cv:auto also applies <TabAtkins> vmpstr: When doing spec changes there was some confusiont aht Oriol pointed out about whether this also applies to cv:hidden <TabAtkins> vmpstr: For context, we have "relevant to the user", and "skips its contents" <TabAtkins> vmpstr: For cv:hidden, we say the affected element always skips its contents <TabAtkins> vmpstr: For cv:auto, it skips its content only if it's not relevant to the user <TabAtkins> vmpstr: So current spec text for cis:auto applies if the element is not relevant to the user *and* skips its contents <TabAtkins> vmpstr: This wording implies if should apply to cv:hidden, but only if it's not relevant to the user. This isn't a state we track for cv:hidden elements <TabAtkins> vmpstr: I don't think we *should* track that state. Should change the spec. <TabAtkins> vmpstr: I don't feel strongly about how <TabAtkins> vmpstr: Could drop "is relevant to the user" from cis, so it'll apply to cv:hidden always, or cv:auto when it skips its content <TabAtkins> vmpstr: Alternately could make it clear that cis only applies to cv:auto <TabAtkins> vmpstr: TAG talked about only applying it to cv:auto <TabAtkins> vmpstr: Applying it to cv:hidden seems a little awkward. Dunno use-cases, value doesn't switch between skipping contents and not; dev just sets it. <oriol> q+ <astearns> ack oriol <TabAtkins> oriol: Clarifiction: cv:hidden always skips contents, then it triggers size containment. <TabAtkins> oriol: With size containment we don't record last remembered size <flackr> q+ <TabAtkins> oriol: If cv:hidden is applied from the start we'll never have a size <TabAtkins> oriol: So this can affect when you're adding cv:hidden dynamically and there was a remembered size from before; quesiton is whether ot use it or not <astearns> ack flackr <TabAtkins> flackr: I think from a dev pov, applying it to hidden allows authors to use hidden to do their own show/hide logic (rather than relying on cv:auto) <fantasai> TabAtkins: I wrote the spec the way it was because it seemed to me that it was something that applied to certain concepts, and anything using those concepts would want ... <fantasai> TabAtkins: I agree it's slightly wrong <fantasai> TabAtkins: but iirc, it was intentionally written to rely on a quality of the element rather than a property value <emilio> q+ <fantasai> TabAtkins: specifically because I thought hidden should apply <astearns> ack emilio <TabAtkins> vmpstr: So I think easiest is to jus tmake it apply if the element skips its content, and remove the relevant from teh user condition <TabAtkins> emilio: I think there's a tangential issue about this. Shoudl also define how long a remembered size remains <TabAtkins> emilio: Oriol has been writing some changes that implement the spec to the letter; it's not great <TabAtkins> emilio: Adds some complexity to remove remembered size at intersectionobserver time. <TabAtkins> emilio: So depending on how we resolve this, the interaction of switching between values might be more complex <TabAtkins> astearns: emilio/oriol, are you okay with removing "relevant to the user" and raise further issues as we go? or do you prefer locking to a property value <TabAtkins> emilio: Dont' think I have a strong opinion <TabAtkins> oriol: Fine with either <TabAtkins> oriol: Think problems emilio referred to are a bit orthogonal <TabAtkins> astearns: So does anyone want to argue against dropping the condition? <TabAtkins> astearns: So proposed resolution is to remove the "not relevant to the user" condition in c-i-s <TabAtkins> RESOLVED: Drop the "not relevant to the user" condition from c-i-s:auto <TabAtkins> astearns: Anyone think we need to bring this back to the TAG? |
… as well Based on discussion on w3c/csswg-drafts#6308 (comment) and based on the spec as written, contain-intrinsic-size auto should apply to all elements that skip their contents, not just content-visibility: auto elements. This patch does this. R=chrishtr@chromium.org Change-Id: Ibf38be014ae25ff64af027f6c1608caa7ded3514 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3777917 Reviewed-by: Oriol Brufau <obrufau@igalia.com> Commit-Queue: Vladimir Levin <vmpstr@chromium.org> Cr-Commit-Position: refs/heads/main@{#1030610}
… as well Based on discussion on w3c/csswg-drafts#6308 (comment) and based on the spec as written, contain-intrinsic-size auto should apply to all elements that skip their contents, not just content-visibility: auto elements. This patch does this. R=chrishtr@chromium.org Change-Id: Ibf38be014ae25ff64af027f6c1608caa7ded3514 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3777917 Reviewed-by: Oriol Brufau <obrufau@igalia.com> Commit-Queue: Vladimir Levin <vmpstr@chromium.org> Cr-Commit-Position: refs/heads/main@{#1030610}
… as well Based on discussion on w3c/csswg-drafts#6308 (comment) and based on the spec as written, contain-intrinsic-size auto should apply to all elements that skip their contents, not just content-visibility: auto elements. This patch does this. R=chrishtr@chromium.org Change-Id: Ibf38be014ae25ff64af027f6c1608caa7ded3514 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3777917 Reviewed-by: Oriol Brufau <obrufau@igalia.com> Commit-Queue: Vladimir Levin <vmpstr@chromium.org> Cr-Commit-Position: refs/heads/main@{#1030610}
…to content-visibility: hidden as well, a=testonly Automatic update from web-platform-tests CIS: Apply contain-intrinsic-size: auto to content-visibility: hidden as well Based on discussion on w3c/csswg-drafts#6308 (comment) and based on the spec as written, contain-intrinsic-size auto should apply to all elements that skip their contents, not just content-visibility: auto elements. This patch does this. R=chrishtr@chromium.org Change-Id: Ibf38be014ae25ff64af027f6c1608caa7ded3514 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3777917 Reviewed-by: Oriol Brufau <obrufau@igalia.com> Commit-Queue: Vladimir Levin <vmpstr@chromium.org> Cr-Commit-Position: refs/heads/main@{#1030610} -- wpt-commits: d8fcd31ebcb01dcf78530bab3aa173c18666b602 wpt-pr: 34915
https://bugs.webkit.org/show_bug.cgi?id=238867 Reviewed by Alan Bujtas. This patch adds support for contain-intrinsic-size value "none | <length>". The value "auto && <length>" is not supported, because per [1] it depends on "content-visibility:auto" which is not supported yet. Per [2], the properties allow elements with size containment to specify an explicit intrinsic inner size, which is determined in RenderBox. These values will affect the intrinsic width calculation in computeIntrinsicLogicalWidths. As to intrinsic height, the value will be overridden at the point after layout children and before logical height calculation. For grid layout, we need to use explicit intrinsic inner size to calculate auto repetition, if width/height is auto. [1] w3c/csswg-drafts#6308 [2] https://www.w3.org/TR/css-sizing-4/#intrinsic-size-override * LayoutTests/TestExpectations: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-003-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-004-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-005-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-009-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-029-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-030-expected.txt: The three failed cases are related to css scrollbar-gutter. * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-031-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-032-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-logical-003-expected.txt: * Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp: (WebCore::GridTrackSizingAlgorithm::computeGridContainerIntrinsicSizes): Set explicitIntrinsicInnerLogicalSize to m_minContentSize and m_maxContentSize. (WebCore::GridTrackSizingAlgorithm::run): Don't skip stretching tracks for size containment if there is explicitIntrinsicInnerLogicalSize. * Source/WebCore/rendering/RenderBlock.cpp: (WebCore::RenderBlock::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderBlockFlow.cpp: (WebCore::RenderBlockFlow::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderBox.cpp: (WebCore::RenderBox::updateLogicalHeight): Set explicitIntrinsicHeight to logicalHeight if it exists. (WebCore::RenderBox::computeLogicalHeightWithoutLayout const): We should take account of explicitIntrinsicInnerLogicalHeight here. (WebCore::RenderBox::explicitIntrinsicInnerWidth const): (WebCore::RenderBox::explicitIntrinsicInnerHeight const): * Source/WebCore/rendering/RenderBox.h: (WebCore::RenderBox::explicitIntrinsicInnerLogicalWidth const): (WebCore::RenderBox::explicitIntrinsicInnerLogicalHeight const): * Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp: (WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderFlexibleBox.cpp: (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderGrid.cpp: (WebCore::RenderGrid::layoutBlock): Should use explicitIntrinsicInnerHeigth as the definite size if exists. (WebCore::RenderGrid::computeIntrinsicLogicalWidths const): Don't add gutterSize if it's explicitIntrinsicInnerLogicalSize. (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize const): Ditto. (WebCore::RenderGrid::explicitIntrinsicInnerLogicalSize const): Ditto. (WebCore::RenderGrid::computeAutoRepeatTracksCount const): Use explicitIntrinsicInnerLogicalSize as availableSize if the size of grid container is not specified. (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const): The tracks of grid container with size containment are not empty if hasExplicitIntrinsicInnerLogicalSize. * Source/WebCore/rendering/RenderGrid.h: * Source/WebCore/rendering/RenderListBox.cpp: (WebCore::RenderListBox::computeIntrinsicLogicalWidths const): Ditto. (WebCore::RenderListBox::computeLogicalHeight const): Use explicitIntrinsicInnerLogicalHeight as estimated height not the sum of item height. * Source/WebCore/rendering/RenderMenuList.cpp: (RenderMenuList::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderReplaced.cpp: (WebCore::RenderReplaced::computeIntrinsicRatioInformation const): Don't let size containment effect aspect ratio. * Source/WebCore/rendering/RenderReplaced.h: Return explicitIntrinsicInnerSize if exits. * Source/WebCore/rendering/RenderSlider.cpp: (WebCore::RenderSlider::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::computeIntrinsicLogicalWidths const): Ditto. * Source/WebCore/rendering/RenderVideo.cpp: (WebCore::RenderVideo::calculateIntrinsicSize): * Source/WebCore/rendering/style/RenderStyle.cpp: (WebCore::rareNonInheritedDataChangeRequiresLayout): The changes of contain-intrinsic-size should require layout. Canonical link: https://commits.webkit.org/255971@main
https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override
If
auto
applies to everything, you can into the situation where an element is visible on screen but rendered with outdated dimensions. For example:Now, if JS adds
contain: size; width: auto;
, the element will be rendered at 200px width, even though this size is neither in the current CSS style not is it related to the content size.This is an unfortunate situation. To fix this, we would like to propose only applying
auto
if the element also hascontent-visibility: auto
. This would ensure that the remembered size is only used if the element is offscreen, where an outdated size will only affect the scrollbar size.Thoughts?
@dbaron @chrishtr @vmpstr @tabatkins
The text was updated successfully, but these errors were encountered: