Skip to content

[css-easing-2] How to generate a computed value for linear-spline() #7415

Closed
@jakearchibald

Description

@jakearchibald

My initial thought was to serialize it the same as CSS gradients, as being similar to CSS gradients was one of the attractive parts of linear-spline(). However, @dshin-moz has pointed out how weird the computed value for gradients is.

Input:
linear-gradient(to right, <<color>>, <<color>> 50%, <<color>>)
Computed:
linear-gradient(to right, <<color>>, <<color>> 50%, <<color>>)

(I'm using <<color>> instead of values here, as Safari serializes them differently, and it's irrelevant to this issue)

The position value only appears in the output if it appeared in the declaration.

Input:
linear-gradient(to right, <<color>> 80%, <<color>> 10%)
Computed:
linear-gradient(to right, <<color>> 80%, <<color>> 10%)

Position values are not clamped to the position of their previous value.

Input:
linear-gradient(to right, <<color>>, <<color>> 50% 80%)
Computed:
linear-gradient(to right, <<color>>, <<color>> 50%, <<color>> 80%)

The second stop position is expanded into two entries.

So, what should we do for linear-spline()?

Option 1: Copy linear-gradient

Follow all of the rules above, even though they're a bit weird.

Option 2: Output fully computed value

  • Unfold 0 50% 80% into two entries: 0 50%, 0 80%
  • Include calculated positions, so 0, 0.5, 1 becomes 0 0%, 0.5 50%, 1 100%
  • Include corrections made to positions, so 0 50%, 1 20% becomes 0 50%, 1 50%

Option 3: Output closer to authored format

  • If a second stop is provided (eg 0 50% 80%) it's retained in the output
  • Positions are only included if they were included in the declaration, so 0, 0.5, 1 remains 0, 0.5, 1
  • Positions are not corrected, so 0 50%, 1 20% remains 0 50%, 1 20%.

My preference is option 2, as it allows developers to see the validation and calculation that took place.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions