diff --git a/Base/res/html/misc/nth-child.html b/Base/res/html/misc/nth-child.html
index 5413202a093..11865fde4bc 100644
--- a/Base/res/html/misc/nth-child.html
+++ b/Base/res/html/misc/nth-child.html
@@ -52,6 +52,9 @@
.acid3 > div:nth-child(-5n+3) {
background-color: lightblue;
}
+ .test-of-type > div:nth-child(2n of div) {
+ background-color: lightblue;
+ }
.test-of > div:nth-child(3n+1 of .special) {
background-color: lightblue;
}
@@ -191,6 +194,22 @@
15
+:nth-child(2n of div)
+
+
1
+
Paragraph
+
2 +
+
Paragraph
+
3
+
Paragraph
+
4 +
+
Paragraph
+
5
+
Paragraph
+
6 +
+
Paragraph
+
+
:nth-child(3n+1 of .special)
1 +
diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp
index 87c5108fadf..f44d53a1202 100644
--- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp
+++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp
@@ -4491,12 +4491,14 @@ Optional
Parser::parse_a_n_plus_b_patt
if (is_n_dimension(first_value)) {
a = first_value.token().dimension_value_int();
- values.skip_whitespace();
- auto& second_value = values.next_token();
- if (second_value.is(Token::Type::EndOfFile)) {
+ if (!values.has_next_token() || values.peek_token().is(Token::Type::Whitespace)) {
//
return make_return_value();
- } else if (is_signed_integer(second_value)) {
+ }
+
+ values.skip_whitespace();
+ auto& second_value = values.next_token();
+ if (is_signed_integer(second_value)) {
//
b = second_value.token().to_integer();
return make_return_value();
@@ -4552,12 +4554,14 @@ Optional Parser::parse_a_n_plus_b_patt
// -n ['+' | '-']
if (is_dashn(first_value)) {
a = -1;
- values.skip_whitespace();
- auto& second_value = values.next_token();
- if (second_value.is(Token::Type::EndOfFile)) {
+ if (!values.has_next_token() || values.peek_token().is(Token::Type::Whitespace)) {
// -n
return make_return_value();
- } else if (is_signed_integer(second_value)) {
+ }
+
+ values.skip_whitespace();
+ auto& second_value = values.next_token();
+ if (is_signed_integer(second_value)) {
// -n
b = second_value.token().to_integer();
return make_return_value();
@@ -4605,12 +4609,14 @@ Optional Parser::parse_a_n_plus_b_patt
// '+'?† n ['+' | '-']
if (is_n(first_after_plus)) {
a = 1;
- values.skip_whitespace();
- auto& second_value = values.next_token();
- if (second_value.is(Token::Type::EndOfFile)) {
+ if (!values.has_next_token() || values.peek_token().is(Token::Type::Whitespace)) {
// '+'?† n
return make_return_value();
- } else if (is_signed_integer(second_value)) {
+ }
+
+ values.skip_whitespace();
+ auto& second_value = values.next_token();
+ if (is_signed_integer(second_value)) {
// '+'?† n
b = second_value.token().to_integer();
return make_return_value();