diff --git a/Tests/LibWeb/Layout/expected/picture-source-media-query.txt b/Tests/LibWeb/Layout/expected/picture-source-media-query.txt
new file mode 100644
index 00000000000..7049945dd6d
--- /dev/null
+++ b/Tests/LibWeb/Layout/expected/picture-source-media-query.txt
@@ -0,0 +1,13 @@
+Viewport <#document> at (0,0) content-size 800x600 children: not-inline
+ BlockContainer at (0,0) content-size 800x416 [BFC] children: not-inline
+ BlockContainer
at (8,8) content-size 784x400 children: inline
+ line 0 width: 400, height: 400, bottom: 400, baseline: 400
+ frag 0 from ImageBox start: 0, length: 0, rect: [8,8 400x400]
+ TextNode <#text>
+ InlineNode
+ TextNode <#text>
+ InlineNode
+ TextNode <#text>
+ ImageBox at (8,8) content-size 400x400 children: not-inline
+ TextNode <#text>
+ TextNode <#text>
diff --git a/Tests/LibWeb/Layout/input/120.png b/Tests/LibWeb/Layout/input/120.png
new file mode 100644
index 00000000000..c021943f7fa
Binary files /dev/null and b/Tests/LibWeb/Layout/input/120.png differ
diff --git a/Tests/LibWeb/Layout/input/400.png b/Tests/LibWeb/Layout/input/400.png
new file mode 100644
index 00000000000..adbdc225610
Binary files /dev/null and b/Tests/LibWeb/Layout/input/400.png differ
diff --git a/Tests/LibWeb/Layout/input/picture-source-media-query.html b/Tests/LibWeb/Layout/input/picture-source-media-query.html
new file mode 100644
index 00000000000..fbc76603377
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/picture-source-media-query.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp
index b4961372127..363cd056876 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp
@@ -741,7 +741,14 @@ static void update_the_source_set(DOM::Element& element)
if (source_set.is_empty())
continue;
- // FIXME: 6. If child has a media attribute, and its value does not match the environment, continue to the next child.
+ // 6. If child has a media attribute, and its value does not match the environment, continue to the next child.
+ if (child->has_attribute(HTML::AttributeNames::media)) {
+ auto media_query = parse_media_query(CSS::Parser::ParsingContext { element.document() },
+ child->attribute(HTML::AttributeNames::media));
+ if (!media_query || !media_query->evaluate(element.document().window())) {
+ continue;
+ }
+ }
// 7. Parse child's sizes attribute, and let source set's source size be the returned value.
source_set.m_source_size = parse_a_sizes_attribute(element.document(), child->attribute(HTML::AttributeNames::sizes));