diff --git a/Userland/Libraries/LibWeb/CSS/PseudoClasses.json b/Userland/Libraries/LibWeb/CSS/PseudoClasses.json index 25f68d921d..c74a23fb2e 100644 --- a/Userland/Libraries/LibWeb/CSS/PseudoClasses.json +++ b/Userland/Libraries/LibWeb/CSS/PseudoClasses.json @@ -113,6 +113,9 @@ "target": { "argument": "" }, + "target-within": { + "argument": "" + }, "visited": { "argument": "" }, diff --git a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp index e7a25e9d7a..1bbf994edc 100644 --- a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp +++ b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp @@ -446,6 +446,12 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla } case CSS::PseudoClass::Target: return element.is_target(); + case CSS::PseudoClass::TargetWithin: { + auto* target_element = element.document().target_element(); + if (!target_element) + return false; + return element.is_inclusive_ancestor_of(*target_element); + } case CSS::PseudoClass::Dir: { // "Values other than ltr and rtl are not invalid, but do not match anything." // - https://www.w3.org/TR/selectors-4/#the-dir-pseudo