Bug 1757017 - Make keyframes for pseudo-elements inherit from the right style. r=dholbert

Differential Revision: https://phabricator.services.mozilla.com/D140045
This commit is contained in:
Emilio Cobos Álvarez 2022-03-02 18:19:18 +00:00
parent fc251d248b
commit 3c5d0d725e
3 changed files with 81 additions and 2 deletions

View file

@ -5893,7 +5893,12 @@ pub extern "C" fn Servo_GetComputedKeyframeValues(
let metrics = get_metrics_provider_for_product();
let element = GeckoElement(element);
let parent_element = element.inheritance_parent();
let pseudo = PseudoElement::from_pseudo_type(pseudo_type);
let parent_element = if pseudo.is_none() {
element.inheritance_parent()
} else {
Some(element)
};
let parent_data = parent_element.as_ref().and_then(|e| e.borrow_data());
let parent_style = parent_data
.as_ref()
@ -5910,7 +5915,6 @@ pub extern "C" fn Servo_GetComputedKeyframeValues(
&mut conditions,
);
let pseudo = PseudoElement::from_pseudo_type(pseudo_type);
let restriction = pseudo.and_then(|p| p.property_restriction());
let global_style_data = &*GLOBAL_STYLE_DATA;

View file

@ -0,0 +1,26 @@
<!doctype html>
<title>CSS Test Reference</title>
<style>
body {
font-size: 30px;
}
.container {
font-size: 5px;
height: 40px;
}
.container::after {
content: "";
display: block;
border: 2px solid blue;
width: 1em;
height: 1em;
font-size: 1em;
}
</style>
<div class="container"></div>
<div class="container"></div>
<div class="container"></div>
<div class="container"></div>
<div class="container"></div>

View file

@ -0,0 +1,49 @@
<!doctype html>
<title>@keyframes + pseudo-element inherits from the right style.</title>
<link rel="author" href="https://mozilla.org" title="Mozilla">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1757017">
<link rel="help" href="https://drafts.csswg.org/css-animations/#property-index">
<link rel="match" href="inheritance-pseudo-element-ref.html">
<style>
body {
font-size: 30px;
}
.container {
font-size: 5px;
height: 40px;
}
.container::after {
content: "";
display: block;
border: 2px solid blue;
width: 1em;
height: 1em;
}
@keyframes kf-fs5px { from, to { font-size: 5px; } }
.fs5px::after {
animation: kf-fs5px 1s infinite;
}
@keyframes kf-fs1em { from, to { font-size: 1em; } }
.fs1em::after {
animation: kf-fs1em 1s infinite;
}
@keyframes kf-fs100p { from, to { font-size: 100%; } }
.fs100p::after {
animation: kf-fs100p 1s infinite;
}
@keyframes kf-fsinherit { from, to { font-size: inherit; } }
.fsinherit::after {
animation: kf-fsinherit 1s infinite;
}
</style>
<div class="container"></div>
<div class="container fs5px"></div>
<div class="container fs1em"></div>
<div class="container fs100p"></div>
<div class="container fsinherit"></div>