-
Notifications
You must be signed in to change notification settings - Fork 714
[css-logical] Handling ambiguous physical/logical shorthands with var() #9690
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
That's not the currently the case in implementations.
This syntax is under discussion in #1282, which seems to be leaning towards other approaches.
If this is the only problematic case, it seems simpler to just not put logical keywords into |
Yeah, if it ends up being the only such case, I agree. |
@tabatkins, I am starting to try and think about this problem as I try to add support for the logical keywords from CSS Values 5 (https://drafts.csswg.org/css-values-5/#position). Can you clarify where in the model (which spec?) "track[ing] precisely whether you've used a physical or logical longhand for each axis/side" is required? |
The spec is simply not implementable in the current form, that's why opposed the change. |
Ok. But can you help me understand what part isn’t implementable? |
Per the current model in the spec, we cascade logical and physical longhands independently, then associate them early in computed-value time (after (Within a single rule, order of declarations thus matters: in an English document, whether you specify The issue, then, is about what properties a shorthand actually expands to. Saying So there's a design issue there. If the physical/logical switch is in the value space, variables can mean that it hides until computed-value time, but it needs to be known at parse time. If the switch isn't in the value space (say it's |
A few shorthands can potentially expand to either physical longhands or logical longhands, depending on the content of the property. For example,
margin: 5px 10px;
expands tomargin-top: 5px; margin-bottom: 5px; margin-left: 10px; margin-right: 10px;
, butmargin: logical 5px 10px;
instead expands tomargin-block: 5px; margin-inline: 10px;
.The fact that they expand to one set of longhands is, currently, important for the model, since we track precisely whether you've used a physical or logical longhand for each axis/side.
However, if you write
margin: var(--foo);
, you can't tell whether the property will expand into physical or logical longhands until computed-value time, but we need to know that at parse time. Because of the above point about why they need to expand to either physical or logical but not both, they can't do the normal var()-in-shorthand trick of expanding into a magic unserializable form that'll become real at computed-value time.We either need to add some more magic to the "did you set this side using physical or logical" that allows for a magic unobservable var() value that will decide its origin later, or we need to switch the syntax for "I'm gonna expand into logical values" to outside the value space, such as with a bang-syntax.
I think we should try for the first option first, since this also applies to our attempt to put logical keywords into the
background-position
property. The syntax isn't ambiguous in that case (unlike withmargin
), so it would be awkward to have to writebackground-position: start start !logical;
.The text was updated successfully, but these errors were encountered: