mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-02 15:46:33 +00:00
LibWeb: Apply all animations and transitions before invalidating style
Some checks are pending
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Some checks are pending
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
This fixes an issue where only the last KeyframeEffect applied to an element would actually have an effect on the computed properties. It was particularly noticeable when animating a shorthand property like border-width, since only one of the border edges would have its width actually animate. By deferring the invalidation until all animations have been processed, we also reduce the amount of work that gets done on pages with many animations/transitions per element. Discord is very fond of this for example.
This commit is contained in:
parent
50422eb563
commit
92221f0c57
Notes:
github-actions[bot]
2025-07-19 15:10:06 +00:00
Author: https://github.com/awesomekling
Commit: 92221f0c57
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5520
Reviewed-by: https://github.com/kalenikaliaksandr ✅
11 changed files with 198 additions and 152 deletions
|
@ -92,8 +92,10 @@ void Animation::set_effect(GC::Ptr<AnimationEffect> new_effect)
|
|||
m_effect = new_effect;
|
||||
|
||||
// Once animated properties of the old effect no longer apply, we need to ensure appropriate invalidations are scheduled
|
||||
if (old_effect)
|
||||
old_effect->update_computed_properties();
|
||||
if (old_effect) {
|
||||
AnimationUpdateContext context;
|
||||
old_effect->update_computed_properties(context);
|
||||
}
|
||||
|
||||
// 7. Run the procedure to update an animation’s finished state for animation with the did seek flag set to false,
|
||||
// and the synchronously notify flag set to false.
|
||||
|
|
|
@ -4,13 +4,18 @@
|
|||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <AK/Bitmap.h>
|
||||
#include <LibJS/Runtime/VM.h>
|
||||
#include <LibWeb/Animations/Animation.h>
|
||||
#include <LibWeb/Animations/AnimationEffect.h>
|
||||
#include <LibWeb/Animations/AnimationTimeline.h>
|
||||
#include <LibWeb/Bindings/AnimationEffectPrototype.h>
|
||||
#include <LibWeb/Bindings/Intrinsics.h>
|
||||
#include <LibWeb/CSS/ComputedProperties.h>
|
||||
#include <LibWeb/CSS/Parser/Parser.h>
|
||||
#include <LibWeb/CSS/StyleInvalidation.h>
|
||||
#include <LibWeb/DOM/Element.h>
|
||||
#include <LibWeb/Layout/Node.h>
|
||||
#include <LibWeb/WebIDL/ExceptionOr.h>
|
||||
|
||||
namespace Web::Animations {
|
||||
|
@ -626,4 +631,77 @@ void AnimationEffect::visit_edges(JS::Cell::Visitor& visitor)
|
|||
visitor.visit(m_associated_animation);
|
||||
}
|
||||
|
||||
static CSS::RequiredInvalidationAfterStyleChange compute_required_invalidation_for_animated_properties(HashMap<CSS::PropertyID, NonnullRefPtr<CSS::CSSStyleValue const>> const& old_properties, HashMap<CSS::PropertyID, NonnullRefPtr<CSS::CSSStyleValue const>> const& new_properties)
|
||||
{
|
||||
CSS::RequiredInvalidationAfterStyleChange invalidation;
|
||||
auto old_and_new_properties = MUST(Bitmap::create(to_underlying(CSS::last_property_id) + 1, 0));
|
||||
for (auto const& [property_id, _] : old_properties)
|
||||
old_and_new_properties.set(to_underlying(property_id), 1);
|
||||
for (auto const& [property_id, _] : new_properties)
|
||||
old_and_new_properties.set(to_underlying(property_id), 1);
|
||||
for (auto i = to_underlying(CSS::first_property_id); i <= to_underlying(CSS::last_property_id); ++i) {
|
||||
if (!old_and_new_properties.get(i))
|
||||
continue;
|
||||
auto property_id = static_cast<CSS::PropertyID>(i);
|
||||
auto const* old_value = old_properties.get(property_id).value_or({});
|
||||
auto const* new_value = new_properties.get(property_id).value_or({});
|
||||
if (!old_value && !new_value)
|
||||
continue;
|
||||
invalidation |= compute_property_invalidation(property_id, old_value, new_value);
|
||||
}
|
||||
return invalidation;
|
||||
}
|
||||
|
||||
AnimationUpdateContext::~AnimationUpdateContext()
|
||||
{
|
||||
for (auto& it : elements) {
|
||||
auto style = it.value->target_style;
|
||||
if (!style)
|
||||
continue;
|
||||
auto& element = it.key;
|
||||
GC::Ref<DOM::Element> target = element.element();
|
||||
auto invalidation = compute_required_invalidation_for_animated_properties(it.value->animated_properties_before_update, style->animated_property_values());
|
||||
|
||||
if (invalidation.is_none())
|
||||
continue;
|
||||
|
||||
// Traversal of the subtree is necessary to update the animated properties inherited from the target element.
|
||||
target->for_each_in_subtree_of_type<DOM::Element>([&](auto& element) {
|
||||
auto element_invalidation = element.recompute_inherited_style();
|
||||
if (element_invalidation.is_none())
|
||||
return TraversalDecision::SkipChildrenAndContinue;
|
||||
invalidation |= element_invalidation;
|
||||
return TraversalDecision::Continue;
|
||||
});
|
||||
|
||||
if (!element.pseudo_element().has_value()) {
|
||||
if (target->layout_node())
|
||||
target->layout_node()->apply_style(*style);
|
||||
} else {
|
||||
auto pseudo_element_node = target->get_pseudo_element_node(element.pseudo_element().value());
|
||||
if (auto* node_with_style = dynamic_cast<Layout::NodeWithStyle*>(pseudo_element_node.ptr())) {
|
||||
node_with_style->apply_style(*style);
|
||||
}
|
||||
}
|
||||
|
||||
if (invalidation.relayout && target->layout_node())
|
||||
target->layout_node()->set_needs_layout_update(DOM::SetNeedsLayoutReason::KeyframeEffect);
|
||||
if (invalidation.rebuild_layout_tree) {
|
||||
// We mark layout tree for rebuild starting from parent element to correctly invalidate
|
||||
// "display" property change to/from "contents" value.
|
||||
if (auto parent_element = target->parent_element()) {
|
||||
parent_element->set_needs_layout_tree_update(true, DOM::SetNeedsLayoutTreeUpdateReason::KeyframeEffect);
|
||||
} else {
|
||||
target->set_needs_layout_tree_update(true, DOM::SetNeedsLayoutTreeUpdateReason::KeyframeEffect);
|
||||
}
|
||||
}
|
||||
if (invalidation.repaint) {
|
||||
element.document().set_needs_display();
|
||||
element.document().set_needs_to_resolve_paint_only_properties();
|
||||
}
|
||||
if (invalidation.rebuild_stacking_context_tree)
|
||||
element.document().invalidate_stacking_context_tree();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -59,6 +59,20 @@ enum class AnimationDirection {
|
|||
Bindings::FillMode css_fill_mode_to_bindings_fill_mode(CSS::AnimationFillMode mode);
|
||||
Bindings::PlaybackDirection css_animation_direction_to_bindings_playback_direction(CSS::AnimationDirection direction);
|
||||
|
||||
// This object lives for the duration of an animation update, and is used to store per-element data about animated CSS properties.
|
||||
struct AnimationUpdateContext {
|
||||
struct ElementData {
|
||||
using PropertyMap = HashMap<CSS::PropertyID, NonnullRefPtr<CSS::CSSStyleValue const>>;
|
||||
PropertyMap animated_properties_before_update;
|
||||
GC::Ptr<CSS::ComputedProperties> target_style;
|
||||
};
|
||||
|
||||
~AnimationUpdateContext();
|
||||
|
||||
// NOTE: This is lazily populated by KeyframeEffects as their respective animations are applied to an element.
|
||||
HashMap<DOM::AbstractElement, NonnullOwnPtr<ElementData>> elements;
|
||||
};
|
||||
|
||||
// https://www.w3.org/TR/web-animations-1/#the-animationeffect-interface
|
||||
class AnimationEffect : public Bindings::PlatformObject {
|
||||
WEB_PLATFORM_OBJECT(AnimationEffect, Bindings::PlatformObject);
|
||||
|
@ -144,7 +158,7 @@ public:
|
|||
virtual DOM::Element* target() const { return {}; }
|
||||
virtual bool is_keyframe_effect() const { return false; }
|
||||
|
||||
virtual void update_computed_properties() = 0;
|
||||
virtual void update_computed_properties(AnimationUpdateContext&) = 0;
|
||||
|
||||
protected:
|
||||
AnimationEffect(JS::Realm&);
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <LibWeb/CSS/Parser/Parser.h>
|
||||
#include <LibWeb/CSS/StyleComputer.h>
|
||||
#include <LibWeb/CSS/StyleValues/CSSKeywordValue.h>
|
||||
#include <LibWeb/DOM/AbstractElement.h>
|
||||
#include <LibWeb/Layout/Node.h>
|
||||
#include <LibWeb/Painting/Paintable.h>
|
||||
#include <LibWeb/WebIDL/ExceptionOr.h>
|
||||
|
@ -912,28 +913,7 @@ void KeyframeEffect::visit_edges(Cell::Visitor& visitor)
|
|||
visitor.visit(m_keyframe_objects);
|
||||
}
|
||||
|
||||
static CSS::RequiredInvalidationAfterStyleChange compute_required_invalidation(HashMap<CSS::PropertyID, NonnullRefPtr<CSS::CSSStyleValue const>> const& old_properties, HashMap<CSS::PropertyID, NonnullRefPtr<CSS::CSSStyleValue const>> const& new_properties)
|
||||
{
|
||||
CSS::RequiredInvalidationAfterStyleChange invalidation;
|
||||
auto old_and_new_properties = MUST(Bitmap::create(to_underlying(CSS::last_property_id) + 1, 0));
|
||||
for (auto const& [property_id, _] : old_properties)
|
||||
old_and_new_properties.set(to_underlying(property_id), 1);
|
||||
for (auto const& [property_id, _] : new_properties)
|
||||
old_and_new_properties.set(to_underlying(property_id), 1);
|
||||
for (auto i = to_underlying(CSS::first_property_id); i <= to_underlying(CSS::last_property_id); ++i) {
|
||||
if (!old_and_new_properties.get(i))
|
||||
continue;
|
||||
auto property_id = static_cast<CSS::PropertyID>(i);
|
||||
auto const* old_value = old_properties.get(property_id).value_or({});
|
||||
auto const* new_value = new_properties.get(property_id).value_or({});
|
||||
if (!old_value && !new_value)
|
||||
continue;
|
||||
invalidation |= compute_property_invalidation(property_id, old_value, new_value);
|
||||
}
|
||||
return invalidation;
|
||||
}
|
||||
|
||||
void KeyframeEffect::update_computed_properties()
|
||||
void KeyframeEffect::update_computed_properties(AnimationUpdateContext& context)
|
||||
{
|
||||
auto target = this->target();
|
||||
if (!target || !target->is_connected())
|
||||
|
@ -950,53 +930,13 @@ void KeyframeEffect::update_computed_properties()
|
|||
if (!computed_properties)
|
||||
return;
|
||||
|
||||
auto animated_properties_before_update = computed_properties->animated_property_values();
|
||||
computed_properties->reset_animated_properties({});
|
||||
|
||||
auto& document = target->document();
|
||||
document.style_computer().collect_animation_into(*target, pseudo_element_type(), *this, *computed_properties, CSS::StyleComputer::AnimationRefresh::Yes);
|
||||
|
||||
auto invalidation = compute_required_invalidation(animated_properties_before_update, computed_properties->animated_property_values());
|
||||
|
||||
if (invalidation.is_none())
|
||||
return;
|
||||
|
||||
// Traversal of the subtree is necessary to update the animated properties inherited from the target element.
|
||||
target->for_each_in_subtree_of_type<DOM::Element>([&](auto& element) {
|
||||
auto element_invalidation = element.recompute_inherited_style();
|
||||
if (element_invalidation.is_none())
|
||||
return TraversalDecision::SkipChildrenAndContinue;
|
||||
invalidation |= element_invalidation;
|
||||
return TraversalDecision::Continue;
|
||||
context.elements.ensure(DOM::AbstractElement { *target, pseudo_element_type() }, [computed_properties] {
|
||||
auto old_animated_properties = computed_properties->animated_property_values();
|
||||
computed_properties->reset_animated_properties({});
|
||||
return make<AnimationUpdateContext::ElementData>(move(old_animated_properties), computed_properties);
|
||||
});
|
||||
|
||||
if (!pseudo_element_type().has_value()) {
|
||||
if (target->layout_node())
|
||||
target->layout_node()->apply_style(*computed_properties);
|
||||
} else {
|
||||
auto pseudo_element_node = target->get_pseudo_element_node(pseudo_element_type().value());
|
||||
if (auto* node_with_style = dynamic_cast<Layout::NodeWithStyle*>(pseudo_element_node.ptr())) {
|
||||
node_with_style->apply_style(*computed_properties);
|
||||
}
|
||||
}
|
||||
|
||||
if (invalidation.relayout && target->layout_node())
|
||||
target->layout_node()->set_needs_layout_update(DOM::SetNeedsLayoutReason::KeyframeEffect);
|
||||
if (invalidation.rebuild_layout_tree) {
|
||||
// We mark layout tree for rebuild starting from parent element to correctly invalidate
|
||||
// "display" property change to/from "contents" value.
|
||||
if (auto parent_element = target->parent_element()) {
|
||||
parent_element->set_needs_layout_tree_update(true, DOM::SetNeedsLayoutTreeUpdateReason::KeyframeEffect);
|
||||
} else {
|
||||
target->set_needs_layout_tree_update(true, DOM::SetNeedsLayoutTreeUpdateReason::KeyframeEffect);
|
||||
}
|
||||
}
|
||||
if (invalidation.repaint) {
|
||||
document.set_needs_display();
|
||||
document.set_needs_to_resolve_paint_only_properties();
|
||||
}
|
||||
if (invalidation.rebuild_stacking_context_tree)
|
||||
document.invalidate_stacking_context_tree();
|
||||
target->document().style_computer().collect_animation_into(*target, pseudo_element_type(), *this, *computed_properties, CSS::StyleComputer::AnimationRefresh::Yes);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ public:
|
|||
|
||||
virtual bool is_keyframe_effect() const override { return true; }
|
||||
|
||||
virtual void update_computed_properties() override;
|
||||
virtual void update_computed_properties(AnimationUpdateContext&) override;
|
||||
|
||||
Optional<CSS::AnimationPlayState> last_css_animation_play_state() const { return m_last_css_animation_play_state; }
|
||||
void set_last_css_animation_play_state(CSS::AnimationPlayState state) { m_last_css_animation_play_state = state; }
|
||||
|
|
|
@ -59,3 +59,11 @@ private:
|
|||
};
|
||||
|
||||
}
|
||||
|
||||
template<>
|
||||
struct AK::Traits<Web::DOM::AbstractElement> : public DefaultTraits<Web::DOM::AbstractElement> {
|
||||
static unsigned hash(Web::DOM::AbstractElement const& key)
|
||||
{
|
||||
return pair_int_hash(ptr_hash(&key.element()), key.pseudo_element().has_value() ? to_underlying(key.pseudo_element().value()) : -1);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <AK/Bitmap.h>
|
||||
#include <AK/CharacterTypes.h>
|
||||
#include <AK/Debug.h>
|
||||
#include <AK/GenericLexer.h>
|
||||
|
@ -1537,15 +1538,18 @@ void Document::update_animated_style_if_needed()
|
|||
if (!m_needs_animated_style_update)
|
||||
return;
|
||||
|
||||
Animations::AnimationUpdateContext context;
|
||||
|
||||
for (auto& timeline : m_associated_animation_timelines) {
|
||||
for (auto& animation : timeline->associated_animations()) {
|
||||
if (animation->is_idle() || animation->is_finished())
|
||||
continue;
|
||||
if (auto effect = animation->effect()) {
|
||||
effect->update_computed_properties();
|
||||
effect->update_computed_properties(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_needs_animated_style_update = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,22 +2,22 @@ Harness status: OK
|
|||
|
||||
Found 196 tests
|
||||
|
||||
36 Pass
|
||||
160 Fail
|
||||
Fail CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px]
|
||||
Fail CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px]
|
||||
Fail CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px]
|
||||
Fail CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Fail CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px]
|
||||
72 Pass
|
||||
124 Fail
|
||||
Pass CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [80px 80px, 80px 80px, 80px 80px, 80px 80px]
|
||||
Fail CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [90px 90px, 90px 90px, 90px 90px, 90px 90px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [90px 90px, 90px 90px, 90px 90px, 90px 90px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [80px 80px, 80px 80px, 80px 80px, 80px 80px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [90px 90px, 90px 90px, 90px 90px, 90px 90px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [90px 90px, 90px 90px, 90px 90px, 90px 90px]
|
||||
Fail CSS Animations: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px]
|
||||
Fail CSS Animations: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px]
|
||||
Fail CSS Animations: property <background-position> from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px]
|
||||
|
@ -60,20 +60,20 @@ Fail Web Animations: property <background-position> from [initial] to [80px 80px
|
|||
Fail Web Animations: property <background-position> from [initial] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px)]
|
||||
Fail Web Animations: property <background-position> from [initial] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px)]
|
||||
Fail Web Animations: property <background-position> from [initial] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px)]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [75px 75px, 75px 75px, 75px 75px, 75px 75px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [75px 75px, 75px 75px, 75px 75px, 75px 75px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [80px 80px, 80px 80px, 80px 80px, 80px 80px]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [85px 85px, 85px 85px, 85px 85px, 85px 85px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [75px 75px, 75px 75px, 75px 75px, 75px 75px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [85px 85px, 85px 85px, 85px 85px, 85px 85px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [75px 75px, 75px 75px, 75px 75px, 75px 75px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [80px 80px, 80px 80px, 80px 80px, 80px 80px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [85px 85px, 85px 85px, 85px 85px, 85px 85px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [85px 85px, 85px 85px, 85px 85px, 85px 85px]
|
||||
Pass CSS Animations: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px]
|
||||
Pass CSS Animations: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Pass CSS Animations: property <background-position> from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px]
|
||||
|
@ -116,20 +116,20 @@ Fail Web Animations: property <background-position> from [unset] to [80px 80px,
|
|||
Fail Web Animations: property <background-position> from [unset] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px)]
|
||||
Fail Web Animations: property <background-position> from [unset] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px)]
|
||||
Fail Web Animations: property <background-position> from [unset] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px)]
|
||||
Fail CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px]
|
||||
Fail CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px]
|
||||
Fail CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px]
|
||||
Fail CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px 40px, 40px 40px, 40px 40px, 40px 40px]
|
||||
Fail CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Pass CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px]
|
||||
Pass CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px]
|
||||
Pass CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px]
|
||||
Pass CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px 40px, 40px 40px, 40px 40px, 40px 40px]
|
||||
Pass CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Pass CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [ 80px 80px, 80px 80px, 80px 80px, 80px 80px]
|
||||
Fail CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px 40px, 40px 40px, 40px 40px, 40px 40px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Pass CSS Transitions: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px 40px, 40px 40px, 40px 40px, 40px 40px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px 60px, 60px 60px, 60px 60px, 60px 60px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [ 80px 80px, 80px 80px, 80px 80px, 80px 80px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px]
|
||||
Pass CSS Animations: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px]
|
||||
Pass CSS Animations: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px]
|
||||
Pass CSS Animations: property <background-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px]
|
||||
|
|
|
@ -2,17 +2,17 @@ Harness status: OK
|
|||
|
||||
Found 280 tests
|
||||
|
||||
88 Pass
|
||||
192 Fail
|
||||
Fail CSS Transitions: property <background-position> from neutral to [left 20px top 20px] at (0) should be [10px 10px]
|
||||
Fail CSS Transitions: property <background-position> from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px]
|
||||
Fail CSS Transitions: property <background-position> from neutral to [left 20px top 20px] at (0.5) should be [15px 15px]
|
||||
Fail CSS Transitions: property <background-position> from neutral to [left 20px top 20px] at (0.75) should be [17.5px 17.5px]
|
||||
104 Pass
|
||||
176 Fail
|
||||
Pass CSS Transitions: property <background-position> from neutral to [left 20px top 20px] at (0) should be [10px 10px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [left 20px top 20px] at (0.5) should be [15px 15px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [left 20px top 20px] at (0.75) should be [17.5px 17.5px]
|
||||
Pass CSS Transitions: property <background-position> from neutral to [left 20px top 20px] at (1) should be [20px 20px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [left 20px top 20px] at (0) should be [10px 10px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [left 20px top 20px] at (0.5) should be [15px 15px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from neutral to [left 20px top 20px] at (0.75) should be [17.5px 17.5px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [left 20px top 20px] at (0) should be [10px 10px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [left 20px top 20px] at (0.5) should be [15px 15px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [left 20px top 20px] at (0.75) should be [17.5px 17.5px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from neutral to [left 20px top 20px] at (1) should be [20px 20px]
|
||||
Fail CSS Animations: property <background-position> from neutral to [left 20px top 20px] at (0) should be [10px 10px]
|
||||
Fail CSS Animations: property <background-position> from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px]
|
||||
|
@ -44,15 +44,15 @@ Fail Web Animations: property <background-position> from [initial] to [left 20px
|
|||
Fail Web Animations: property <background-position> from [initial] to [left 20px top 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)]
|
||||
Fail Web Animations: property <background-position> from [initial] to [left 20px top 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)]
|
||||
Fail Web Animations: property <background-position> from [initial] to [left 20px top 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [left 20px top 20px] at (0) should be [80px 80px]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [left 20px top 20px] at (0.5) should be [50px 50px]
|
||||
Fail CSS Transitions: property <background-position> from [inherit] to [left 20px top 20px] at (0.75) should be [35px 35px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [left 20px top 20px] at (0) should be [80px 80px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [left 20px top 20px] at (0.5) should be [50px 50px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [left 20px top 20px] at (0.75) should be [35px 35px]
|
||||
Pass CSS Transitions: property <background-position> from [inherit] to [left 20px top 20px] at (1) should be [20px 20px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [left 20px top 20px] at (0) should be [80px 80px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [left 20px top 20px] at (0.5) should be [50px 50px]
|
||||
Fail CSS Transitions with transition: all: property <background-position> from [inherit] to [left 20px top 20px] at (0.75) should be [35px 35px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [left 20px top 20px] at (0) should be [80px 80px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [left 20px top 20px] at (0.5) should be [50px 50px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [left 20px top 20px] at (0.75) should be [35px 35px]
|
||||
Pass CSS Transitions with transition: all: property <background-position> from [inherit] to [left 20px top 20px] at (1) should be [20px 20px]
|
||||
Pass CSS Animations: property <background-position> from [inherit] to [left 20px top 20px] at (0) should be [80px 80px]
|
||||
Pass CSS Animations: property <background-position> from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px]
|
||||
|
|
|
@ -2,20 +2,20 @@ Harness status: OK
|
|||
|
||||
Found 144 tests
|
||||
|
||||
76 Pass
|
||||
68 Fail
|
||||
Fail CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)]
|
||||
Fail CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)]
|
||||
Fail CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)]
|
||||
Fail CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.6) should be [rgb(14, 24, 34) rgb(40, 50, 60) rgb(26, 36, 46) rgb(46, 56, 66)]
|
||||
86 Pass
|
||||
58 Fail
|
||||
Pass CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)]
|
||||
Pass CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)]
|
||||
Pass CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)]
|
||||
Pass CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.6) should be [rgb(14, 24, 34) rgb(40, 50, 60) rgb(26, 36, 46) rgb(46, 56, 66)]
|
||||
Pass CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1) should be [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)]
|
||||
Fail CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1.5) should be [rgb(5, 15, 25) rgb(40, 50, 60) rgb(35, 45, 55) rgb(55, 65, 75)]
|
||||
Fail CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)]
|
||||
Fail CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)]
|
||||
Fail CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)]
|
||||
Fail CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.6) should be [rgb(14, 24, 34) rgb(40, 50, 60) rgb(26, 36, 46) rgb(46, 56, 66)]
|
||||
Pass CSS Transitions: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1.5) should be [rgb(5, 15, 25) rgb(40, 50, 60) rgb(35, 45, 55) rgb(55, 65, 75)]
|
||||
Pass CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)]
|
||||
Pass CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)]
|
||||
Pass CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)]
|
||||
Pass CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.6) should be [rgb(14, 24, 34) rgb(40, 50, 60) rgb(26, 36, 46) rgb(46, 56, 66)]
|
||||
Pass CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1) should be [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)]
|
||||
Fail CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1.5) should be [rgb(5, 15, 25) rgb(40, 50, 60) rgb(35, 45, 55) rgb(55, 65, 75)]
|
||||
Pass CSS Transitions with transition: all: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1.5) should be [rgb(5, 15, 25) rgb(40, 50, 60) rgb(35, 45, 55) rgb(55, 65, 75)]
|
||||
Pass CSS Animations: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)]
|
||||
Pass CSS Animations: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)]
|
||||
Pass CSS Animations: property <border-color> from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)]
|
||||
|
|
|
@ -2,20 +2,20 @@ Harness status: OK
|
|||
|
||||
Found 256 tests
|
||||
|
||||
92 Pass
|
||||
164 Fail
|
||||
Fail CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px]
|
||||
Fail CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px]
|
||||
Fail CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px]
|
||||
Fail CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.6) should be [26px 46px 66px 86px]
|
||||
102 Pass
|
||||
154 Fail
|
||||
Pass CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px]
|
||||
Pass CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px]
|
||||
Pass CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px]
|
||||
Pass CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.6) should be [26px 46px 66px 86px]
|
||||
Pass CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1) should be [30px 50px 70px 90px]
|
||||
Fail CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1.5) should be [35px 55px 75px 95px]
|
||||
Fail CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px]
|
||||
Fail CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px]
|
||||
Fail CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px]
|
||||
Fail CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.6) should be [26px 46px 66px 86px]
|
||||
Pass CSS Transitions: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1.5) should be [35px 55px 75px 95px]
|
||||
Pass CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px]
|
||||
Pass CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px]
|
||||
Pass CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px]
|
||||
Pass CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.6) should be [26px 46px 66px 86px]
|
||||
Pass CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1) should be [30px 50px 70px 90px]
|
||||
Fail CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1.5) should be [35px 55px 75px 95px]
|
||||
Pass CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1.5) should be [35px 55px 75px 95px]
|
||||
Pass CSS Animations: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px]
|
||||
Pass CSS Animations: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px]
|
||||
Pass CSS Animations: property <border-width> from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue