LibWeb: Return resolved value of normal if letter-spacing value is 0

This commit is contained in:
Tim Ledbetter 2025-09-09 10:21:37 +01:00 committed by Sam Atkins
commit 112a45bdf2
Notes: github-actions[bot] 2025-09-10 15:14:57 +00:00
3 changed files with 54 additions and 0 deletions

View file

@ -815,6 +815,13 @@ RefPtr<StyleValue const> CSSStyleProperties::style_value_for_computed_property(L
}
case PropertyID::WebkitTextFillColor:
return resolve_color_style_value(get_computed_value(property_id), layout_node.computed_values().webkit_text_fill_color());
case PropertyID::LetterSpacing: {
// https://drafts.csswg.org/css-text-4/#letter-spacing-property
// For legacy reasons, a computed letter-spacing of zero yields a resolved value (getComputedStyle() return value) of normal.
if (layout_node.computed_values().letter_spacing() == 0)
return KeywordStyleValue::create(Keyword::Normal);
return get_computed_value(property_id);
}
case PropertyID::Invalid:
return KeywordStyleValue::create(Keyword::Invalid);
case PropertyID::Custom:

View file

@ -0,0 +1,14 @@
Harness status: OK
Found 9 tests
9 Pass
Pass Property letter-spacing value 'normal'
Pass Property letter-spacing value '0px'
Pass Property letter-spacing value '10px'
Pass Property letter-spacing value '-20px'
Pass Property letter-spacing value 'calc(10px - 0.5em)'
Pass Property letter-spacing value '110%'
Pass Property letter-spacing value '-5%'
Pass Property letter-spacing value 'calc(10% - 20%)'
Pass Property letter-spacing value 'calc(10px - (5% + 10%)'

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Text: getComputedStyle().letterSpacing</title>
<link rel="help" href="https://www.w3.org/TR/css-text-3/#propdef-letter-spacing">
<meta name="assert" content="letter-spacing computed value is an absolute length and/or percentage.">
<meta name="assert" content="'normal' computes to zero, but the resolved value of 0px is 'normal', so that's the value that is observed.">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../css/support/computed-testcommon.js"></script>
<style>
#target {
font-size: 40px;
}
</style>
</head>
<body>
<div id="target"></div>
<script>
test_computed_value("letter-spacing", "normal");
test_computed_value("letter-spacing", "0px", "normal");
test_computed_value("letter-spacing", "10px");
test_computed_value("letter-spacing", "-20px");
test_computed_value("letter-spacing", "calc(10px - 0.5em)", "-10px");
test_computed_value("letter-spacing", "110%");
test_computed_value("letter-spacing", "-5%");
test_computed_value("letter-spacing", "calc(10% - 20%)", "-10%");
test_computed_value("letter-spacing", "calc(10px - (5% + 10%)", "calc(-15% + 10px)");
</script>
</body>
</html>