diff --git a/Libraries/LibHTML/Layout/LayoutInline.cpp b/Libraries/LibHTML/Layout/LayoutInline.cpp
index 69f7474c14..d8c1652dab 100644
--- a/Libraries/LibHTML/Layout/LayoutInline.cpp
+++ b/Libraries/LibHTML/Layout/LayoutInline.cpp
@@ -9,3 +9,29 @@ LayoutInline::LayoutInline(const Node& node, StyleProperties&& style_properties)
LayoutInline::~LayoutInline()
{
}
+
+void LayoutInline::layout()
+{
+ Point origin;
+
+ if (previous_sibling() != nullptr) {
+ auto& previous_sibling_rect = previous_sibling()->rect();
+ auto& previous_sibling_style = previous_sibling()->style();
+ origin = previous_sibling_rect.location();
+ // FIXME: Implement proper inline positioning when
+ // there are nodes with different heights. And don't
+ // hardcode font size like we do here.
+ origin.move_by(previous_sibling_rect.width(), previous_sibling_rect.height());
+ origin.move_by(previous_sibling_style.full_margin().right, -11);
+ } else {
+ origin = parent()->rect().location();
+ }
+
+ rect().set_location(origin);
+
+ for_each_child([&](auto& child) {
+ child.layout();
+ rect().set_right(child.rect().right() + child.style().full_margin().right);
+ rect().set_bottom(child.rect().bottom() + child.style().full_margin().bottom);
+ });
+}
diff --git a/Libraries/LibHTML/Layout/LayoutInline.h b/Libraries/LibHTML/Layout/LayoutInline.h
index 2760581098..424fe654de 100644
--- a/Libraries/LibHTML/Layout/LayoutInline.h
+++ b/Libraries/LibHTML/Layout/LayoutInline.h
@@ -12,5 +12,7 @@ public:
virtual const char* class_name() const override { return "LayoutInline"; }
virtual bool is_inline() const override { return true; }
+ virtual void layout() override;
+
private:
};