diff --git a/Libraries/LibHTML/DOM/HTMLStyleElement.cpp b/Libraries/LibHTML/DOM/HTMLStyleElement.cpp
new file mode 100644
index 0000000000..d527b58dcf
--- /dev/null
+++ b/Libraries/LibHTML/DOM/HTMLStyleElement.cpp
@@ -0,0 +1,28 @@
+#include
+#include
+#include
+
+HTMLStyleElement::HTMLStyleElement(Document& document, const String& tag_name)
+ : HTMLElement(document, tag_name)
+{
+}
+
+HTMLStyleElement::~HTMLStyleElement()
+{
+}
+
+void HTMLStyleElement::inserted_into(Node& new_parent)
+{
+ m_stylesheet = parse_css(text_content());
+ if (m_stylesheet)
+ document().add_sheet(*m_stylesheet);
+ HTMLElement::inserted_into(new_parent);
+}
+
+void HTMLStyleElement::removed_from(Node& old_parent)
+{
+ if (m_stylesheet) {
+ // FIXME: Remove the sheet from the document
+ }
+ return HTMLElement::removed_from(old_parent);
+}
diff --git a/Libraries/LibHTML/DOM/HTMLStyleElement.h b/Libraries/LibHTML/DOM/HTMLStyleElement.h
new file mode 100644
index 0000000000..4f46cf50fc
--- /dev/null
+++ b/Libraries/LibHTML/DOM/HTMLStyleElement.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include
+
+class StyleSheet;
+
+class HTMLStyleElement : public HTMLElement {
+public:
+ HTMLStyleElement(Document&, const String& tag_name);
+ virtual ~HTMLStyleElement() override;
+
+ virtual void inserted_into(Node&) override;
+ virtual void removed_from(Node&) override;
+
+private:
+ RefPtr m_stylesheet;
+};
diff --git a/Libraries/LibHTML/Makefile.shared b/Libraries/LibHTML/Makefile.shared
index 76329a0299..43a6f33500 100644
--- a/Libraries/LibHTML/Makefile.shared
+++ b/Libraries/LibHTML/Makefile.shared
@@ -7,6 +7,7 @@ LIBHTML_OBJS = \
DOM/HTMLHeadingElement.o \
DOM/HTMLHeadElement.o \
DOM/HTMLHtmlElement.o \
+ DOM/HTMLStyleElement.o \
DOM/HTMLTitleElement.o \
DOM/Document.o \
DOM/Text.o \
diff --git a/Libraries/LibHTML/Parser/HTMLParser.cpp b/Libraries/LibHTML/Parser/HTMLParser.cpp
index b8d5d2ed6f..079d45173b 100644
--- a/Libraries/LibHTML/Parser/HTMLParser.cpp
+++ b/Libraries/LibHTML/Parser/HTMLParser.cpp
@@ -6,6 +6,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -21,6 +22,8 @@ static NonnullRefPtr create_element(Document& document, const String& t
return adopt(*new HTMLHtmlElement(document, tag_name));
if (lowercase_tag_name == "head")
return adopt(*new HTMLHeadElement(document, tag_name));
+ if (lowercase_tag_name == "style")
+ return adopt(*new HTMLStyleElement(document, tag_name));
if (lowercase_tag_name == "title")
return adopt(*new HTMLTitleElement(document, tag_name));
if (lowercase_tag_name == "h1"